Excel VBA スタンダード・ワークシート関数について

Excel VBAのワークシート関数、WorksheetFunctionを使用すると、Excelのワークシート関数をVBAで呼び出すことができます。

Excel VBA WorksheetFunction.Sum

WorksheetFunction.Sum

Sum関数は、指定されたセル範囲または数値の合計を計算します。複数のセル範囲や値を指定することも可能です。

Sub SumFunctionExample()
    Dim sumResult As Double
    
    ' 数値の合計を計算するためのセル範囲を指定してSum関数を呼び出す例
    sumResult = WorksheetFunction.Sum(Range("A1:A10")) ' セル範囲A1からA10までの合計を計算
    
    ' 合計を表示
    MsgBox "合計値は: " & sumResult
End Sub

WorksheetFunction.Sumを使用して、セル範囲A1からA10までの数値の合計を計算しています。計算された合計値は MsgBox を使用して表示されます。セル範囲内に数値以外の値がある場合、それらの値は無視されます。

 

セル範囲内に数値以外の値(文字列など)が含まれている場合、Sum関数は数値以外の値を無視して合計を計算します。ただし、エラー値(#VALUE!など)が含まれている場合はエラーが返されます。

 

Excel VBA WorksheetFunction.CountIf

WorksheetFunction.CountIf

CountIf関数は、条件に一致するセルの数をカウントします。条件は文字列や数値を含むことができます。

Sub CountIfFunctionExample()
    Dim countResult As Long
    
    ' 条件に一致するセルの数をカウントするための範囲と条件を指定してCountIf関数を呼び出す例
    countResult = WorksheetFunction.CountIf(Range("A1:A10"), ">50") ' A1からA10のセル範囲で50より大きいセルの数をカウント
    
    ' 結果を表示
    MsgBox "条件に一致するセルの数: " & countResult
End Sub

WorksheetFunction.CountIfを使用して、セル範囲A1からA10までの条件(ここでは">50")に一致するセルの数を数えています。条件に一致するセルの数が`MsgBox`で表示されます。

 

Excel VBA WorksheetFunction.SumIf

WorksheetFunction.SumIf

SumIf関数は、条件に一致するセルの値の合計を計算します。条件は文字列や数値で指定できます。

Sub SumIfFunctionExample()
    Dim sumResult As Double
    
    ' 条件に一致するセルの値の合計を求めるための範囲、条件を指定してSumIf関数を呼び出す例
    sumResult = WorksheetFunction.SumIf(Range("A1:A10"), ">50", Range("B1:B10")) ' A1からA10のセル範囲で50より大きい場合にB1からB10の値を合計
    
    ' 結果を表示
    MsgBox "条件に一致するセルの合計: " & sumResult
End Sub

 

Excel VBA WorksheetFunction.Large

WorksheetFunction.Large

Large関数は、指定された範囲または配列内で指定したランク位置の大きな値を取得します。ランク位置は引数として渡された数値で指定されます。

Large関数は、指定された範囲内に値がない、もしくは無効な値(エラー値)がある場合、エラーを返します。

Sub LargeFunctionExample()
    Dim largeResult As Variant
    Dim rng As Range
    Set rng = Range("A1:A10") ' 範囲を指定
    
    ' 指定した位置の大きな値を取得するための範囲と位置を指定してLarge関数を呼び出す例
    largeResult = WorksheetFunction.Large(rng, 2) ' A1からA10までの範囲で2番目に大きな値を取得
    
    ' 結果を表示
    MsgBox "2番目に大きな値は: " & largeResult
End Sub

WorksheetFunction.Largeを使用して、セル範囲A1からA10までの範囲で2番目に大きな値を取得しています。指定した位置の大きな値が MsgBox で表示されます。取得したいランクの位置を変更する場合は、2番目の引数に別の位置を指定します。

 

Excel VBA WorksheetFunction.Small

WorksheetFunction.Small

Small関数は、指定された範囲または配列内で指定したランク位置の小さい値を取得します。ランク位置は引数として渡された数値で指定されます。

Large関数は、指定された範囲内に値がない、もしくは無効な値(エラー値)がある場合、エラーを返します。

Sub SmallFunctionExample()
    Dim smallResult As Variant
    Dim rng As Range
    Set rng = Range("A1:A10") ' 範囲を指定
    
    ' 指定した位置の小さな値を取得するための範囲と位置を指定してSmall関数を呼び出す例
    smallResult = WorksheetFunction.Small(rng, 3) ' A1からA10までの範囲で3番目に小さな値を取得
    
    ' 結果を表示
    MsgBox "3番目に小さな値は: " & smallResult
End Sub

WorksheetFunction.Smallを使用して、セル範囲A1からA10までの範囲で3番目に小さな値を取得しています。指定した位置の小さい値が MsgBox で表示されます。

 

Excel VBA WorksheetFunction.Vlookup

WorksheetFunction.Vlookup

Vlookup関数は、指定されたキー(検索値)に対応する値を検索範囲内から取得します。

Vlookup関数は、検索範囲内でキーが見つからない場合、#N/Aエラーを返します。

Vlookup関数は、検索する値がソートされていることを前提としています。そうでない場合、誤った結果を返す可能性があります。

Sub VlookupFunctionExample()
    Dim lookupResult As Variant
    Dim lookupValue As Variant
    Dim lookupRange As Range
    Dim resultRange As Range
    
    ' 検索値と検索範囲を指定
    lookupValue = "apple" ' 検索値
    Set lookupRange = Range("A1:B10") ' 検索範囲(A1からB10までの範囲)
    Set resultRange = Range("B1:B10") ' 結果を返す範囲(B列)
    
    ' Vlookup関数を呼び出し、検索値に対応する値を取得する
    lookupResult = WorksheetFunction.VLookup(lookupValue, lookupRange, 2, False)
    
    ' 結果を表示
    If Not IsError(lookupResult) Then
        MsgBox "検索値に対応する値は: " & lookupResult
    Else
        MsgBox "検索値が見つかりません"
    End If
End Sub

WorksheetFunction.Vlookupを使用して、検索範囲内(A1からB10)で apple という検索値に対応する2列目(B列)の値を取得しています。検索値に対応する値が見つかれば、それを MsgBox で表示します。検索値が見つからない場合はエラーメッセージが表示されます。

 

Excel VBA WorksheetFunction.MatchとIndex

WorksheetFunction.MatchとIndex

Match関数は、指定された値と一致する位置(行番号や列番号)を検索することです。指定された値が範囲内で最初に見つかった位置(行番号や列番号)を返します。

Index関数は、指定された行番号や列番号に基づいてセル範囲から値を取得することです。セル範囲から特定の行番号や列番号のセルの値を取得します。

MATCH関数で値を見つけられない場合、エラーが返されます。

INDEX関数も同様に、範囲外の行番号や列番号を指定するとエラーが返されます。

Sub MatchAndIndexFunctionsExample()
    Dim matchResult As Variant
    Dim indexResult As Variant
    Dim searchValue As Variant
    Dim dataRange1 As Range
    Dim dataRange2 As Range
    
    ' 検索値とデータ範囲を指定
    searchValue = "Banana" ' 検索値
    Set dataRange1 = Range("B1:B5") ' 検索する範囲
    Set dataRange2 = Range("A1:A5") ' 検索する範囲
    
    ' Match関数の例: 指定された値の位置を検索する
    matchResult = WorksheetFunction.Match(searchValue, dataRange1, 0) ' 完全一致で検索
    
    If Not IsError(matchResult) Then
        MsgBox "検索値の位置は: " & matchResult
    Else
        MsgBox "検索値が見つかりません"
    End If
    
    ' Index関数の例: 特定の位置から値を取得する
    indexResult = WorksheetFunction.Index(dataRange2, matchResult, 1) ' Match関数で取得した位置の値を取得
    
    If Not IsError(indexResult) Then
        MsgBox "検索値に対応する値は: " & indexResult
    Else
        MsgBox "エラー:検索値が見つからないか、INDEXの範囲外です"
    End If
End Sub

MATCH関数を使用して Banana という値がデータ範囲内で見つかる位置を検索し、その位置を取得しています。次に、 INDEX関数を使用してMATCH関数で取得した位置から対応する値を取得しています。各結果がMsgBoxで表示されます。

 

ひとつ前のVlookupは、指定した検索位置の右側の取得で、検索位置の左側は取得できません。MATCH関数とINDEX関数を組み合わせれば、左右両方の取得ができます。

 

Excel VBA WorksheetFunction.EoMonthとDateSerial

WorksheetFunction.EoMonthとDateSerial

EoMonth関数は、指定された日付に対して、指定された月数を加算または減算します。結果は新しい月末日付として返されます。

DateSerial関数は、指定された年、月、日から日付を作成します。年、月、日を整数値で渡します。

Sub EDateAndDateSerialExample()
    Dim originalDate As Date
    Dim newDateByEDate As Date
    Dim newDateByDateSerial As Date
    
    ' 初期の日付を設定
    originalDate = DateSerial(2023, 12, 1) ' 2023年12月1日の日付
    
    ' EDate関数を使用して日付を変更
    newDateByEDate = WorksheetFunction.EoMonth(originalDate, 2) ' 2ヶ月後の末日を取得
    
    MsgBox "EoMonth関数で2ヶ月後の末日は: " & newDateByEDate
    
    ' DateSerial関数を使用して日付を変更
    newDateByDateSerial = DateSerial(Year(originalDate), Month(originalDate) + 2, Day(originalDate)) ' 2ヶ月後の日付を取得
    
    MsgBox "DateSerial関数で2ヶ月後の日付は: " & newDateByDateSerial
End Sub

EoMonth関数を使用して元の日付(2023年12月1日)から2ヶ月後の月末日付を取得し、DateSerial関数は2ヶ月後の日付を計算しています。それぞれの計算結果が`MsgBox`で表示されます。

Excel VBAのスキルを活かして、開発者としてのキャリアを築いてみませんか?

当サイトでは、Excel VBAエキスパート認定資格取得に向けた情報を提供しています。興味がある方は、ぜひ以下の問題集からチャレンジしてみてください。

 

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。