【ExcelVBA公開模試】すべてを含まない
文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。
問題
A1:A100にランダムに文字が入力されている(図1)。「東南西北白緑中」を含まないセルの右隣りに*印をつけたい(図2)。次のコードの続きを記述して完成させなさい。
Sub moshi()
hairetsu = Split("東,南,西,北,白,緑,中", ",")
hairetsu_max = UBound(hairetsu)
End Sub
<図1>
<図2:完成イメージ>
わえなび式 正解例
(このページの下にあります)
目標回答時間
プロ2分以内、アマチュア10分以内に処理ができたら合格
この問題の出題範囲
「速読VBA単語」Program3-7まで
ご案内
ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。
正解例
sw(スイッチ)やflg(フラグ)のような変数名で、0と1を切り替える変数を用意して、If文の中で切り替えをするのが最も分かりやすいです。
Sub moshi()
hairetsu = Split("東,南,西,北,白,緑,中", ",")
hairetsu_max = UBound(hairetsu)
For i = 1 To 100
sw = 0
For j = 0 To hairetsu_max
If Cells(i, 1) Like "*" & hairetsu(j) & "*" Then
sw = 1
Exit For
End If
Next
If sw = 0 Then Cells(i, 2) = "*"
Next
End Sub
(別解その1)Exit Forにならないままループが最後まで終わったときの変数は最大値+1(j = hairetsu_max + 1)です。
Sub moshi()
hairetsu = Split("東,南,西,北,白,緑,中", ",")
hairetsu_max = UBound(hairetsu)
For i = 1 To 100
For j = 0 To hairetsu_max
If Cells(i, 1) Like "*" & hairetsu(j) & "*" Then
Exit For
End If
Next
If j = hairetsu_max + 1 Then Cells(i, 2) = "*"
Next
End Sub
(別解その2)
Sub moshi()
hairetsu = Split("東,南,西,北,白,緑,中", ",")
hairetsu_max = UBound(hairetsu)
For i = 1 To 100
cnt = 0
For j = 0 To hairetsu_max
If Not Cells(i, 1) Like "*" & hairetsu(j) & "*" Then
cnt = cnt + 1
End If
Next
If cnt = hairetsu_max + 1 Then Cells(i, 2) = "*"
Next
End Sub
バックナンバー
この記事が気に入ったらサポートをしてみませんか?