名称未設

【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

バックナンバー


この記事が気に入ったらサポートをしてみませんか?