VBA18_Tips【オートフィルタを自作しよう】

こんにちは。Benです。前回は条件によって色を分ける処理を行いました。今回は条件に当てはまるものだけを表示するのをノートします。
○フクロウ村農協
出荷日農作物名出荷者重さ(kg)
2015/8/23トマトBen20.5
2015/8/23きゅうりBen119.1
2015/8/23トマト太郎56.1
2015/8/23カボチャ花子87.3
2015/8/24きゅうりBen44.8
2015/8/24ナスBen9.6
2015/8/24トマト太郎34.0
2015/8/24カボチャ花子123.5
2015/8/25ピーマンBen56.9
2015/8/25ナスBen22.8
2015/8/25カボチャ花子210.4

材料となる表です。どこぞの農協の出荷表だと思ってください。これから、作物名がトマトの行だけ表示させるようにしたいと思います。処理としては繰り返し処理でデータ1行ずつ読み込んでトマトかどうか条件分岐するものです。

Sub 抽出()
Dim i As Integer
i = 4 'データが始まる行番号
Do Until IsEmpty(Cells(i, 1))
If Cells(i, 2) = "トマト" Then
Rows(i).EntireRow.Hidden = False '表示
Else
Rows(i).EntireRow.Hidden = True '非表示
End If
i = i + 1 '次の行へ
Loop
End Sub
これがコードです。前回のときに説明しませんでしたが、Do~Loopを用いてデータセルが空白(Empty)かどうか判定しています。IsEmpty()関数は、()内のセルが空白だったらTrue、そうでなかったらFalseを返すものです。Do Until IsEmpty(Cells(i,1)=Trueは、i行1列目のセルが空白になるまで繰り返すという意味です。なお、=Trueは省略可能でなのでコードでは省略しています。

20151120a1.gif
これを実行すると御覧のようにトマト以外の行が非表示になりました。Rows(i).EntireRow.Hiddenは「i行を非表示にするか」というプロパティでTrueで非表示です。。

これだけだと汎用性がないので、もう少しフレキシブルにしましょう。その前に上のメニュタブ(ホームや挿入等)に開発タブがない方は、メニューのファイルオプションリボンのユーザー設定で右ウィンドウの開発にチェックを入れてタブを追加しましょう。

20151120a.gif
作物名の上のB2セルを選択し、メニューのデータタブ-データの入力規則を選択します。ご覧のように入力値の種類をリスト、リストに表示したい範囲を指定します。ついでにセルをわかりやすくするために背景色も付けました。

20151120b.gif
そうするとこのようにドロップダウンリストで入力できます。次にマクロを実行するボタンを作ります。開発タブから挿入をクリックして出てきた一番左上のボタンをクリック、そしてシートの適当なところにドラッグすると、マクロを選ぶウィンドウが現れます。先ほどのコードがあるSubプロシージャ名を選択するとクリックするとこのマクロが実行されるボタンの完成です。ボタンを右クリック-テキストの編集でボタンの文字を変えられます。

最後にIf文の表示するかの判定のところをトマト固定でなくB2セルで選択した文字列にするため、下記のように書き換えて完成です。
If Cells(i, 2) = Range("B2").Value Then

20151120d.gif
実際動かしてみましょう。きゅうりを選んで実行ボタンを押すときゅうりだけが表示されていれば成功です。これがデータ抽出の基本です。も忘れないようにしなければ。では今日はこの辺で

この記事へのコメント


この記事へのトラックバック