第87回.WorksheetFunction(ワークシート関数を使う)
VBA関数以外に、Excelワークシート関数をマクロVBAで使うことが出来ます、
ワークシート関数は、VBA関数よりはるかに多くの関数があるので、ぜひ活用したいところです。。
ワークシート関数を使う事で、VBAコードを非常に簡潔に記述することが出来る場合が多いものです。
エクセル入門
ワークシート関数の使い方
Application.は省略できます。
Range("B1") = WorksheetFunction.CountA(Columns(1))
WorksheetFunctionで使用できる関数
文字列操作、日付/時刻、これらの関数はほとんど使えません
OFFSET関数も使えませんが、
VBAでは関数ではなく、セル(Rangeオブジェクト)のOffsetプロパティが使えます。
データベース関数は使用できません
データベース関数は使えません。
VBAでは、繰り返し処理等の他の方法で実装することが基本です。
もし、どうしても使いたい場合は、
ワークシートにVBAでデータベース関数を入れて、結果の値だけを取得してくる方法になります。
最近のバージョンで追加されたピリオド付きの関数の関数名
このような、
○○○.△△△
の形式の関数は、
○○○_△△△
このように、.ピリオドが_アンダーバーに変換されています。

WorksheetFunctionで使える関数を確認する方法
WorksheetFunction.
ピリオドまで入力した時に候補表示されます。

ワークシート関数で使えない関数は、VBAに同等の関数があるか、
VBAでは使う必要のないものという事になります。
個別の関数の使い方
VBEでは、引数名が、Arg1, Arg2, ・・・
としか表示されません。
ワークシート関数の引数を熟知していないと使えない事になります。
そのような時は、
ワークシートで関数を入力して確認してください。

関数の結果(戻り値)
ただし、
ワークシート関数なら、結果が「#N/A」となるような場合は、
マクロの実行がエラーとなりストップしてしまいます。

このようなエラーに対しては、VBAで個別の対処が必要になってきます。
エラー対応については、本ページ下で説明します。
WorksheetFunctionの使用例.
変数・セル = WorksheetFunction.Countif(Range("A:A"), "abc")
Vlookup
変数・セル = WorksheetFunction.VLookup(Cells(1, 4), Range("A:C"), 3, 0)
変数・セル = WorksheetFunction.Match(Cells(1, 4), Range("A:A"), 0)
使い方は、ワークシート関数と全て同じです。
引数等が不明な場合は、ワークシート上で確認してください。
検索系の関数での日付の扱い
つまり、Cells(1, 4)に日付が入っているとして、
変数・セル = WorksheetFunction.VLookup(Cells(1, 4)
このようにした場合、日付としては正しく検索されません。
変数・セル = WorksheetFunction.VLookup(Cells(1, 4).Value2, Range("A:C"), 3, 0)
このように、数値で検索することも可能ですが、.Valueを付けないほうが簡単で確実です。
WorksheetFunctionのエラー対処
VBAでエラーが発生すると、マクロが停止してしまいます。
マクロが停止しないようにするための対処が必要になります。
On Error Resume Next
変数 = WorksheetFunction.VLookup(Range("D1"), Range("A:B"), 2, 0)
If Err.Number <> 0 Then
変数 = "なし"
Err.Clear
End If
件数 = WorksheetFunction.CountIf(Range("A:B"), Range("D1"))
If 件数 > 0
Then
変数 = WorksheetFunction.VLookup(Range("D1"), Range("A:B"), 2, 0)
Else
変数 = "なし"
End If
変数 = Application.VLookup(Range("D1"), Range("A:B"), 2, 0)
変数には「エラー 2042」が入ります、セルであれば「#N/A」となります。
この書き方は、
Excel97より前の古い記述ですので、進んで使うようなものではありません。
最後に
豊富で便利なワークシート関数を使わない手はありません。
自力でマクロVBAをダラダラと何十行も書くようなことがないように、
ワークシート関数については、なるべく広く一通り見ておくようにしましょう。
第10回.ワークシートの関数を使う(WorksheetFunction)
同じテーマ「VBA入門」の記事
第84回.RangeのAddressプロパティ
第85回.結合セルの扱い
第86回.総合練習問題10
第87回.WorksheetFunction(ワークシート関数を使う)
第88回.並べ替え(Sort)
第89回.オートフィルタ(AutoFilter)
第90回.フィルタオプションの設定(AdvancedFilter)
第91回.条件付き書式(FormatCondition)
第92回.名前定義(Names)
第93回.ピボットテーブル(PivotTable)
第94回.コメント(Comment)
新着記事NEW ・・・新着記事一覧を見る
トランザクション処理|SQL入門(12月11日)
インデックスを作成して高速化(CREATE INDEX)|SQL入門(12月9日)
他のテーブルのデータで追加/更新/削除|SQL入門(12月8日)
データの削除(DELETE)|SQL入門(12月7日)
データの更新(UPDATE)|SQL入門(12月6日)
複数のSELECT結果を統合(UNION,UNION ALL)|SQL入門(12月5日)
テーブルを結合して取得(INNER JOIN,OUTER JOIN)|SQL入門(12月4日)
データベースの正規化とマスタの作成|SQL入門(12月3日)
データベースにおけるNULLの扱い方|SQL入門(12月2日)
オブジェクト変数とは何か|VBA技術解説(12月2日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。