指定した素材のみ抽出する例題
メニュー画面作成で作成した表の中に「素材別表示」のシートがあります。このシートは枠組みのみ書いてあります。(図10 素材別表示シート)このシートに素材名を入れて(2行B列)ボタンを押すと、カロリー入力シートの一覧表から指定素材のデータのみ抽出するマクロを作成したいと思います。
今回の抽出は、VBAを使わず一覧表のシートにフィルターをかける方法でも実現できますが、一覧表の表の形が複雑になったとき(合計や抽出したくないデータが入っている等)や、抽出したいセルの場所がばらばらだったりした時でもマクロでは実現できます。
まだ説明していないメソッドやプロパティが出てきますが、気にせず入力して、実行してみてください。詳しい説明は次回以降で順を追って行います。
[リスト17]Search(素材別カロリー表.xlsm)
Sub Search()
a = Cells(2, 2) '素材名を変数aに読み込む(1)
y = 6 'カロリー入力シートの検索開始行(2)
sy = 5 '素材別表示カロリー設定開始行(3)
Do While Sheets("カロリー入力").Cells(y, 1) <> "" '(4)
If a = Sheets("カロリー入力").Cells(y, 1) Then '(5)
Cells(sy, 2) = Sheets("カロリー入力").Cells(y, 1) '(6)
Cells(sy, 3) = Sheets("カロリー入力").Cells(y, 2)
Cells(sy, 4) = Sheets("カロリー入力").Cells(y, 3)
sy = sy + 1 '(7)
End If
y = y + 1 '(8)
Loop
MsgBox ("検索終了しました") '(9)
End Sub
(1)で変数aに指定された素材の名前を読み込みます。(2)と(3)でカロリー入力シートと素材別表示シートの、現在見ている行番号を入れた変数(ポインターとも言います)yとsyを設定しています。Do While … Loop文は繰り返し命令です。この命令と「y = y + 1」で表のはじめから終りまで、順に指定された素材があるか調べています。
If 条件式 Then … End If文はもし 条件式が正しいならば処理「…」をしなさい。ということです。今回は、もし指定素材と同じ名前がついている行ならば、そのデータを素材表示シートに移しなさい。ということになります。データを移したのち、次のデータを設定するため、sy行のポイントを「sy = sy + 1」で次の行に移しています。
これで、素材名を入れるとそのデータのみ検索して表示させることができるようになりました。次にまた検索を行いたいときに、いま表示されているデータを消して、検索したいと思いませんか?消去のボタンも作ってみましょう。
[リスト18]Clear(素材別カロリー表.xlsm)
Sub Clear()
Range(Cells(5, 2), Cells(100, 4)).Select '(1)
Selection.ClearContents '(2)
Cells(2, 2) = "" '(3)
Cells(5, 2).Select '(4)
End Sub
(1)は範囲指定です。今回直接100行まで指定しました。
(2)はマクロの記録で説明したもので、指定範囲の消去命令です。
(3)は素材名を設定する枠のデータを消去しています。
(4)は範囲指定のままだといけないので、5行B列を指定しなおしたものです。
消去ボタンを作って確認してください。
メニューボタンと抽出マクロで一連のプログラムが出来上がりました。この例題をそのまま使うのではなく、自分がやりたいものにどう応用していこうかと考えると、また楽しいと思います。
まとめ
セルの操作について説明しました。シート間のデータを自由に操作できるようになったと思います。次回は最後の例題でもでてきましたIf文などの条件文の説明を行いたいと思います。新しい命令文を使えるようになるたびに、プログラムのスキルも上がってくると思います。自分で作りたいものを思い浮かべながら、説明を読んでいただけると、より頭に入ってくると思います。
WINGSプロジェクト 横塚 利津子著/山田祥寛監修 <WINGSプロジェクトについて> テクニカル執筆プロジェクト(代表 山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。2009年4月時点での登録メンバは30名で、現在も一緒に執筆をできる有志を募集中。