目次
ワークシート関数はVBAで実行できるのか?
こんにちは。伊川(@naonaoke)です。
前回紹介しましたCOUNTIF関数は、VBAでも実行できます。
すごく難しいように思いますが、それほど難しくありません。
問題提起
(株)IKAWAの柄久 瀬瑠子(エク セルコ)は新人研修中です。新人から、下記のような質問がありました。
・COUNTIFは、VBAで、実行できるのでしょうか?
柄久 瀬瑠子(エク セルコ)は、VBAはあまり理解していません。
どのように、新人に説明したらいいだろうか?
解決策
・WorkSheetFunctionを使うことで、VBAでも使用できる関数がある。
WorkSheetFunctionとは
以前、このブログで、Functionプロシージャを紹介しました。
Functionは、関数という意味です。
直訳すると、ワークシートの関数なので、Excelは、ワークシート関数をVBAで利用するには、WorkSheetFunctionとあらかじめ宣言してねと決めました。
WorkSheetFunctionは、メチャクチャ便利です。
COUNTIF VBAバージョン作成 その1 対象のデータベースを確認
上の図で、同一人物を何人いるかカウントします。
COUNTIF VBAバージョン作成 その2 実際のコードを記載する
集計関数系をVBAで実行するには、「A列の始めから、最後まで」というような範囲を指定できるスキルが必要となります。
「A列の始めから、最後まで」の記載の方法は、上の記事を読んでください。
COUNTIF VBAバージョン作成 その3 実行ボタンを作成して装飾をする
上の図のようなボタンを作成すると、第三者が使うときに便利です。
Sub COUNTIF() '検索値の宣言 Dim j As Long '変数(数値型)を宣言 maxrow2 = Cells(Rows.Count, "C").End(xlUp).Row 'C列の最後までと範囲とする(サンプルではセルC29) For j = 2 To maxrow2 'ループする範囲を宣言する(セルC2からC列の最後まで) 'COUNTIFのVBAヴァージョンを使って検索する⇒WorksheetFunction.COUNTIF(関数のCOUNTIFに該当) 'Cells(j, 3)は、モーツアルト~ドリーブストラヴィンスキーまで(セルC2~C29) 'Cells(j, 4)は、検索結果を表示する(セルD2~D29) Cells(j, 4) = WorksheetFunction.COUNTIF(Range("A:A"), Cells(j, 3)) Next j 'ループの終了を宣言する MsgBox "検索完了" End Sub
「COUNTIF実行」に上の図のコードを記載します。
Sub クリア() Dim j As Long maxrow2 = Cells(Rows.Count, "D").End(xlUp).Row For j = 2 To maxrow2 Cells(j, 4).Clear Next j MsgBox "クリア完了" End Sub
「クリア実行」に上の図のコードを記載します。
実行すると上の図のようになります。
ここがポイント
VBAを勉強するときにですが、WorkSheet関数をVBAで再現できるのかという事を考えると、非常に良い訓練になります。そして、VBAとWorkSheet関数の一長一短に気づきます。その気づきが重要なのです。
まとめ
なんとか新人の質問に答えることができました。そして、VBAにも少しずつ興味を持ち始めた、柄久 瀬瑠子(エク セルコ)なのでした。
今回のサンプルファイルは、No55です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。