読者です 読者をやめる 読者になる 読者になる

働く母ちゃん

ワーママとして3歳の息子の子育てや仕事、趣味のことなど雑多に書いてます。最近は息子の影響で鉄子になりつつあります。海外ドラマではGOTにはまってます。

1つの列に対して複数の条件を可変的に選択するマクロ

Excel 仕事

ようやく仕事の記事かよと思ったらまさかのExcelマクロですよ。PMOはどうした、って感じですよね。年内には1本書きたいなあ…でもPMOにはいろいろな役割がある中でExcelマクロの技術はあって損はないと思ってます!

○設定とコード

気を取り直してタイトルの件、いろいろ調べて試した結果を自分用に忘れないようにメモ。

条件は1つの列に対して複数条件抽出したいけど、その条件がしょっちゅう変わるという場合。 イメージとしてはExcelでフィルタを掛ける際に条件を1つずつチェックする場合で、その条件がよく変わる!という時に使えます。 今回は動物園大好きな子どものことを考えて下の表を作ってみました! 設定としては下記の表を使って今日イベントを行う動物の数を知りたいという場合。(そんな設定なさそうな気がしますが…)

動物
キリン 10
ゾウ 3
チーター 2
ライオン 7
アルパカ 4
トラ 5
パンダ 1
ヒツジ 15
ヤギ 20
ヒョウ 6

上記表はExcelのA・B列に記載していて、E列に表示させたい(=今日イベントを行う)動物を記載するとします。

'変数宣言
Dim arryAnimal() As String  '配列
Dim countAnimal As Long     '配列の要素数

'配列に格納する動物の数を設定
countAnimal = Application.WorksheetFunction.CountA(Range("$E:$E"))

'配列再定義
ReDim arryAnimal(countAnimal - 1) As String

'配列に格納する動物の数だけループ
For i = 0 To countAnimal - 1

    'E列に記載されている動物名を配列内に設定
    arryAnimal(i) = Cells(i + 1, 5)

Next i

'フィルタ
ActiveSheet.Range("$A:$B").AutoFilter Field:=1, Criteria1:= _
   Array(arryAnimal()), Operator:=xlFilterValues

'メッセージ
MsgBox "フィルタ完了"

今回例えばE列にキリンとパンダを記載すればキリンとパンダだけが表示されるようになります。 マクロを実行すると今日イベントを行う動物の数が11頭だとわかりますね!

私は上記でうまくいきましたが、うまくいかない場合はすみません…
※独学なので、書き方も適当です…

(無料電話サポート付)できる Excel マクロ&VBA 2013/2010/2007/2003/2002対応 (できるシリーズ)

(無料電話サポート付)できる Excel マクロ&VBA 2013/2010/2007/2003/2002対応 (できるシリーズ)