pickup

目次

ワークシート関数はVBAで実行できるのか?

こんにちは。伊川(@naonaoke)です。

前回紹介しましたCOUNTIF関数は、VBAでも実行できます。


すごく難しいように思いますが、それほど難しくありません。

問題提起

 

(株)IKAWAの柄久 瀬瑠子(エク セルコ)は新人研修中です。新人から、下記のような質問がありました。

・COUNTIFは、VBAで、実行できるのでしょうか?

柄久 瀬瑠子(エク セルコ)は、VBAはあまり理解していません。

どのように、新人に説明したらいいだろうか?

解決策

回答
sesuo2.jpg
・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

「クリア実行」に上の図のコードを記載します。


実行すると上の図のようになります。

ここがポイント

 

ここがポイント
Function8.png
VBAを勉強するときにですが、WorkSheet関数をVBAで再現できるのかという事を考えると、非常に良い訓練になります。そして、VBAとWorkSheet関数の一長一短に気づきます。その気づきが重要なのです。

 

スポンサーリンク

まとめ

今回のまとめ
sesuko3.jpg
なんとか新人の質問に答えることができました。そして、VBAにも少しずつ興味を持ち始めた、柄久 瀬瑠子(エク セルコ)なのでした。

 

今回のサンプルファイルは、No55です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事