名称未設

【ExcelVBA公開模試】リストを出力するときはClearContentsを忘れずに

文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。

問題

セル範囲C2:C101に「A」「B」「O」「AB」の文字がランダムに入力されている(図1)。ExcelVBAを用いて、セルA2に入力した血液型の人をF2以降に抽出したい。次の処理をそれぞれ実行しなさい。
(1)セルA2に「A」と入力して抽出しなさい(図2)。
(2)さらに「AB」にして、もう一度抽出しなさい(図3)。

<図1>

<図2>

<図3>

わえなび式 正解例

(このページの下にあります)

目標回答時間

プロ2分以内、アマチュア10分以内に処理ができたら合格

この問題の出題範囲

「速読VBA単語」Program3-4まで

ご案内

ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。

これは不正解!!

セル範囲Range("A2")をFor文で100回参照するのは不適切です。また、下の図のように、抽出される人数によっては、直前に抽出した結果が残ることがあります。

Sub moshi()
   cnt = 0
   For i = 2 To 101
       If Cells(i, 3) = Range("A2") Then
           cnt = cnt + 1
           Cells(cnt + 1, 6) = Cells(i, 3)
           Cells(cnt + 1, 7) = Cells(i, 4)
       End If
   Next
End Sub

正解例

もう一度抽出する場合は事前にリスト範囲(考えられる最大の範囲)の文字を消します。

Sub moshi()
    Range("F2:G101").ClearContents
    cnt = 0
    blood = Range("A2")
    For i = 2 To 101
        If Cells(i, 3) = blood Then
            cnt = cnt + 1
            Cells(cnt + 1, 6) = blood
            Cells(cnt + 1, 7) = Cells(i, 4)
        End If
    Next
End Sub

別解

cntの初期値やcnt=cnt+1の位置が違うパターンもあります。

Sub moshi()
    Range("F2:G101").ClearContents
    cnt = 2
    blood = Range("A2")
    For i = 2 To 101
        If Cells(i, 3) = blood Then
            Cells(cnt, 6) = blood
            Cells(cnt, 7) = Cells(i, 4)
            cnt = cnt + 1
        End If
    Next
End Sub

バックナンバー


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