【VBAスタンダードに挑戦!】
本日の5分勉強の内容
********************************************************
ワークシート関数
・ワークシートで使用している関数をマクロでも使用できる
・WorksheetFunction. 関数名 (引数)
・引数はワークシートで使用するとき と同じように指定する
・記述方法は VBA のルールに従う
例) A1 (ワークシート) vs Range("A1") (VBA)
・ワークシート関数では呼び出せない関数もある
例えば、セルの中で使用する If 関数は、マクロでは使えない
(同じ書き方で使えない)
・使用できる関数はヘルプで確認するか、
WorksheetFunction. (ドッドまで)を記述すれば、
候補が表示されるので、そこで確認する
Match 関数
・指定したデータが、指定した範囲の上(左)から何番目にあるか調べる
・Match(検索値, 範囲, 照合の種類)
Range("F3") = WorksheetFunction.Match(Range("E3"), Range("C2:C9"), 0)
青枠のデータが赤枠の中の何番目にあるか セル F3 に入力する
※最初に見つけたデータの行数を取得しているので、
検索範囲内はユニークの方が良い、または、それを補う手段が必要
ユニーク = Unique・・・唯一、一意、固有
Match・・・適合させる、試合、マッチ(棒)
Index 関数
・指定した行(列)番号のデータが何か調べる
・Index(範囲, 行(列)番号)
Range("F3") = WorksheetFunction.Index(Range("C2:C9"), Range("E3"))
赤枠の範囲の上から3番目(青枠)の値段を セルF3 に入力する
Index・・・索引、しるし
Match + Index 関数
・合わせ技
・VLookupは検索するデータが指定範囲の一番左側になければいけないが、
Match と Index を組み合わせれば、
右側のデータを検索し、左側のデータを取得できる
With WorksheetFunction
Range("F3") = .Index(Range("B2:B9"), .Match(Range("E3"), Range("C2:C9"), 0))
End With
・Match 関数で¥5,000 (青枠)は赤枠の上から何番目か調べ、
その値を行番号に使用して、緑枠のデータを取得する
・Match, Index それぞれに 「WorksheetFunction」と記述する必要がある
・「With」を使用して可読性を良くする
・シート上では一行で記述しなければいけないが、
VBA では、変数を使用して記述できる
Dim r as long '行を表すのに使用
With WorksheetFunction
r = .Match(Range("E3"), Range("C2:C9"), 0) '行番号を取得して変数に入れる
Range("F3") = .Index(Range("B2:B9"), r, 0)) '変数を使用して記述する
End With
********************************************************
Match関数は、列番号を取得してVLOOKUP関数によく使用します。
100列以上ある表を扱うときはとても便利。
Index 関数は使用場面がなかったので、使ったことはありませんが、
Match 関数と合わせれば、VLookup 関数で、苦労していた場合に使えそうです。
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/