このページの内容について
このページは、VBAエキスパート(ExcelVBAスタンダード)試験合格講座の第八回記事です。公式テキスト第5章「ワークシート関数」の内容について解説します。自分でも手を動かしながら読み進めてください。主に講座受講者の復習での利用を想定しています。
ワークシート関数
ベーシックで学習したように、VBAには標準で備え付けられている関数が多くあります。VBAの関数はExcelの関数とはことなるもので、同じ名前の関数であっても動作が異なることがあります。ExcelVBAではExcelの関数を使用することができます。ここでは文法と代表的な関数の紹介をします。
文法
WorksheetFunction.関数名([引数])
LARGE関数
MAX関数、MIN関数は引数で渡した値の中で最大値、最小値を取得します。対してLARGE関数は引数の中で大きい順に順位をつけて指定した順位の値を返す、上位互換の関数です。
サンプルコード(クリックでコピー)
Private Sub Test_Large()
Dim arr() As Double
ReDim arr(0 To 5)
arr(0) = Rnd
arr(1) = Rnd
arr(2) = Rnd
arr(3) = Rnd
arr(4) = Rnd
arr(5) = Rnd
Debug.Print WorksheetFunction.Large(arr, 2)
End Sub
実行結果
上記サンプルコードは配列にランダムな0以上1未満の値を入力し、その値の内2番目に大きい値をイミディエイトウィンドウに出力します。
SAMLL関数
引数の中で小さい順に順位をつけて指定した順位の値を返す、MIN関数の上位互換の関数です。
サンプルコード(クリックでコピー)
Private Sub Test_Small()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
ws.Cells(1, 1) = Rnd
ws.Cells(2, 1) = Rnd
ws.Cells(3, 1) = Rnd
ws.Cells(4, 1) = Rnd
ws.Cells(5, 1) = Rnd
ws.Cells(6, 1) = Rnd
Debug.Print WorksheetFunction.Small(ws.Range("A1:A6"), 3)
End Sub
実行結果
上記サンプルコードはセル「A1:A6」にランダムな0以上1未満の値を入力し、その値の内3番目に小さい値をイミディエイトウィンドウに出力します。
EOMONTH関数
VBAの関数にはない機能の一つで、指定した日付の月末日を取得することができます。EOMONTHは「End Of Month」の略です。
サンプルコード(クリックでコピー)
Private Sub Test_EoMonth()
Dim past_year As Long, past_month As Long, current_day As Long
Dim past_today As String, past_eomonth As Date
past_eomonth = WorksheetFunction.EoMonth(Date, -12)
past_year = Year(past_eomonth)
past_month = Month(past_eomonth)
current_day = Day(Date)
past_today = DateSerial(past_year, past_month, current_day)
If IsDate(past_today) Then
Call MsgBox("1年前の今日は" & past_today, vbInformation)
Else
Call MsgBox("1年前の今日は" & past_eomonth + 1, vbInformation)
End If
End Sub
実行結果
上記サンプルコードは1年前の月末を取得し、マクロ実行日の日付とDateSerial関数と使って1年前の今日をイミディエイトウィンドウに出力します。ただしこのサンプルコードは2月29日に実行した場合、エラーになるためその場合は1年前の3月1日を出力します。
【PR】VBAエキスパート試験対策記事
当サイトでは、オデッセイコミュニケーションズ社が運営する試験であるVBAエキスパート(Excel VBA ベーシック/Excel VBA スタンダード)の出題範囲をベースに用語や各種関数の解説などを行っています。試験合格に向けて必須と言われる公式テキストに沿って解説をしています。受験をするか悩んでいる方、テキストとは別視点の解説を見てみたい方、受験はしないがExcelVBA(マクロ)に興味がある方へ向けた記事です。
Comment