Excel VBA_代表的なワークシート関数の使い方
この記事では代表的なワークシート関数の操作方法についてまとめます。
- 関数とは何か?
- VBA関数、ワークシート関数
- 代表的なワークシート関数
関数とは何か?
データを投入すると、何らかの処理をして、結果を返却する仕組みです。 関数とはその名の通り「数の関わり合い」を意味しますが、具体的には「数における原因と結果の関わり合い」を意味しています。分かりやすいのが
VBAにおける関数とは、特定の処理をするために用意された便利な命令集と考えることもできます。関数を呼び出せば、文字列や日付、時刻などの操作をカンタンに扱うことができます。部品として処理を1まとめにすることで、より見やすく効率的にコードを書くことが可能となります。
VBA関数、ワークシート関数
VBAであらかじめ用意されている関数をVBA関数と呼びます。 VBA関数はプロシージャ内に関数名を記述してそのまま使うことができます。
一方でワークシート上で使う関数をワークシート関数といいます。 ワークシート関数で代表的なモノにはSUM関数、IF関数などがあります。これらはVBAのプロシージャ内でそのまま使うことはできないため特別な書き方をしたり、そもそもVBAでは使用できないモノもあります。
ワークシート関数の使い方
ワークシート関数をVBAで利用するにはWorksheetFunctionオブジェクトの後にワークシート関数名を記述します。 WorksheetFunctionオブジェクトはワークシート関数の親オブジェクトであり、WorksheetFunctionプロパティを使って取得します。
Application.WorksheetFunction.ワークシート関数名
Application.
は省略できますので下記のように書いた方が便利です。
WorksheetFunction.ワークシート関数名
ワークシート関数の代表的なSUM関数は次のようにVBA内で使うことができます。ここではセルA1~A5の値の合計を求めています。
Dim 合計値 As Long
合計値 = WorksheetFunction.Sum(Range("A1:A5"))
使用できないワークシート関数
LEFT関数やIF関数など一部のワークシート関数はVBAで使うことができません。代わりにVBA関数のleft関数やIf~Thenステートメントを使います。VBAで使用できるワークシート関数はWorksheetFunction.
と入力してから表示される自動メンバー表示の一覧で確認できます。
もし表示できない場合はCtrl + Space
で再表示をしてみて下さい。
どちらを使えば良いのか?
ワークシート関数を積極的に利用して、必要な部分はマクロでコードを書くというのがあるべき姿だと個人的には考えています。VBA関数よりはるかに多くの関数がワークシート関数には用意されています。わざわざ機能が用意されているならそれを活用しない手はありませんし、ワークシート関数を使えばVBAコードを非常に簡潔に記述できるケースは非常に多いです。
例えばセルA1~A5の値を合計するプログラムを比較してみます。
Dim i As Long
Dim 合計値 As Long
For i = 1 To 5
合計値 = 合計値 + Range("A" & i).Value
Next
MsgBox 合計値
Dim 合計値 As Long
合計値 = WorksheetFunction.Sum(Range("A1:A5"))
MsgBox 合計値
Excelを有効活用できる人がVBAでマクロを組むと非常にさっぱりとコードを書けます。関数なら1行で済む事を自力でダラダラと何十行も書くようなことがないよう、ワークシート関数についても理解を深めておきましょう。
代表的なワークシート関数
ここからは代表的なワークシート関数をご紹介していきます。
SUM, AVERAGE関数
セルの合計値/平均値を求めることができます。
Dim 合計値 As Long
合計値 = WorksheetFunction.Sum(Range("A1:A5"))
Dim 平均値 As Long
平均値 = WorksheetFunction.Average(Range("A1:A5"))
MAX, MIN関数
セルの最大値/最小値を求めることができます。
Dim 最大値 As Long
最大値 = WorksheetFunction.Max(Range("A1:A5"))
Dim 最小値 As Long
最小値 = WorksheetFunction.Min(Range("A1:A5"))
VLOOKUP関数
VBAでも威力を発揮するのがVLOOKUP関数です。下記の表から商品に対応する金額を検索します。
例えばここでは商品F
に対応する金額35000
を検索します。まずはVBAプログラミングによるFor文とIf文を組み合わせた方法からです。
Dim i As Long
Dim 金額 As Long
For i = 3 To 12
If Range("B" & i) = "商品F" Then
金額 = Range("C" & i).Value
MsgBox 金額
End If
Next i
同じことをVLOOKUP関数で行うと次のようになります。
Dim 金額 As Long
金額 = WorksheetFunction.VLookup("商品F", Range("B3:C12"), 2, False)
MsgBox 金額
こちらの方がずっとカンタンにできますよね。
COUNT, COUNTIF関数
データが存在するかどうか?を調べる際に力を発揮するのがCOUNTIF関数です。条件に当てはまるセルの数をカウントする関数ですが、文字列を検索するにも有効に使うことができます。
If WorksheetFunction.CountIf(Range("B3:B12"), "商品F") > 0 Then
MsgBox "商品Fが見つかりました"
Else
MsgBox "商品Fは存在しません"
End If
Discussion