ラベル WorksheetFunction の投稿を表示しています。 すべての投稿を表示
ラベル WorksheetFunction の投稿を表示しています。 すべての投稿を表示

VBA セルの位置検索(WorksheetFunction.Match)




WorksheetFunction.Match(検査値,検査範囲,0)


検査範囲内でで検査値に合致する位置を返すメソッドです。
Findメソッドが遅く感じている部分がありましたがこちらに変更するとだいぶ早くなりました。


名前 説明 備考
Arg1 検査値 範囲内で検索する値
Arg2 検査範囲 検索する範囲
Arg3 検査方法 -1:検査値以上の最小値
0:検査値に完全一致する値
1:検査値以下の最大値

検査値方法Arg3は既定値は1ですが完全一致する値があればどれでも同じ結果になります。


Sub SampleMatch()
 Dim r As Long
 'ABCという検査値を"シートのA列"から探す
 r = WorksheetFunction.Match("ABC", Worksheets(1).Columns("A"), 0)
  
 MsgBox CelRow
End Sub
メッセージボックスに見つけた行数を返します。


検査値が検査範囲にない場合や検査値がブランク(="")の場合は
「worksheetfunctionクラスのmatchプロパティを取得できません」


と出るのでMatchメソッドの前に
On Error GoToや
On Error Resume Next
もしくは
If 検査値 <> "" Then 
などで回避するのが良さそうです。


参照・類似ページ
文字列検索[Find]メソッド

集計 Sum



WorksheetFunction.Sum(Arg1, Arg2, ・・・・・・・, Arg30)

WorksheetFunction.Sumメソッドによる集計方法です。
cellsで範囲指定する場合はRange(cells,cells)とします。
引数Arg1~最大で30の値の合計を返します。
引数にエラー値を入れると

「実行時エラー'1004':
WorksheetFunction.Sum クラスの Sum プロパティ値を取得出来ません。」

というエラーメッセージが表示されます。

名前 説明 備考
Arg1~30 合計対象範囲 Variant 必須
引数一覧
※Argの意味 : argument(引数)
引数に入れる内容はExcel関数と同じです。


例 下記Excelシートの"A1:A4"の合計を"B2"セルに表示

Sub SampleSum()

    Range("B2") = WorksheetFunction.Sum(Range("A1:A4"))
    
End Sub


Sub SampleSum()

    Range("B2") = WorksheetFunction.Sum(Range(Cells(1, 1), Cells(4, 1)))
    
End Sub

検索条件一致集計 SumIfメソッド



WorksheetFunction.SumIf(Arg1, Arg2, Arg3)

引数Arg1の範囲にあるArg2に一致する条件値のArg3の値の数値の合計を計算するワークシートのメソッドです。
[WorksheetFunction.SumIf(条件範囲,検索条件,合計範囲)]

名前 説明 備考
Arg1 検索対象範囲 Range 必須
Arg2 検索文字列 Variant 必須
Arg3 合計範囲 Variant 必須
引数一覧
引数に入れる順番内容はExcel関数のSUMIFと同じです


例 下記ExcelシートのYamadaの数字の合計を"B2"セルに表示


Sub SampleSumif()
Dim Worksh As Worksheet

Set Worksh = ThisWorkbook.Worksheets(1)

    Worksh.Range("B1") = WorksheetFunction.SumIf _
    (Worksh.Range(Cells(5, 1), Cells(10, 1)), _
    Worksh.Range("A1"), _
    Worksh.Range(Cells(5, 2), Cells(10, 2)))

End Sub


配列(連想配列:ハッシュ)を使った集計方はこっちにあります。
配列(連想配列:ハッシュ)の使い方 (Dictionary)