VBAの中でもExcelワークシート関数が使えます。
書式は次の通りです。
WorksheetFunction.関数名(値、または、Range(範囲の文字列))
関数名の前に「WorksheetFunction.」、セル範囲はRangeで囲みます。
それぞれの関数をこのようなワークシートで説明していきます。
COUNT関数
セルC1にA列のデータ個数を求めるには次のように考えます。
VBAの中でCOUNT関数を使えば、ループの回数を決めることができます。
Range(“C1”) = WorksheetFunction.Count(Range(“A:A”))
End Sub
この結果は、5です。
COUNTA関数
COUNT関数は数値の個数しか数えませんので、数えるものが商品名の場合は文字列でも数えるCOUNTA関数を使います。
Range(“C1”) = WorksheetFunction.Count(Range(“B:B”))
End Sub
この結果は、5です。
VLOOKUP関数
VLOOKUP関数もVBAで使えます。
Range(“C1”) = WorksheetFunction.VLookup(3, Range(“A:B”), 2, False)
End Sub
この結果は、Cです。
次のようにセルの値を検索してそのVLOOKUP関数を求めることもできます。
End Sub
この結果は、Aです。
セルA1のValueを求めているのは、検索するのはA1の「値」を使うからです。Rangeだけの場合は、そのセル自体として検索するので、VLOOKUP関数の動作としては正確ではありません。ただし、動作は正常にします。あくまで値と明記するかどうかの違いですが、このVBAを見た人に対して、このVBAを作った人は動作を理解して作成していることをアピールできます。
関数の組み合わせ
関数の組み合わせもできます。
INDEX関数とMATCH関数の組み合わせでVLOOKUP関数の代替えとすることができますが、それを再現し、セルC1にB1からB5の範囲の中からBを求めてA列の同じ行の値を求めるには次の数式です。
この結果は、2です。
関数ごとに関数名の前には「WorksheetFunction.」、Rangeを指定するので面倒ですが仕方ありません。
ただし、エラー回避の関数の組み合わせでは注意が必要です。
このVLOOKUP関数の結果、エラーとなった場合、Excelのワークシート関数ではエラーと判定し、「エラー」の文字を出せます。しかし、VBAは計算式が間違ってエラーが出た場合、動作が止まり、エラーメッセージが出るようになります。
もしこの動作をさせたいときは、OnErrorなどのエラー処理が別途必要になります。
まとめ
VBAでは値を集計するのに様々な手段を使うことができますが、今回紹介したVBA内でExcelワークシート関数を使う方法と、Excel関数をワークシート上で使って求めた値のValueで取り込む方法もあります。また、自分でオリジナルの処理ルーチンを作ることもできます。
それぞれ合った方法で利用しましょう。
コメント