Excelのこととか色々

Excel のこととか楽天とか いろいろ書いてみます・・・

【VBAスタンダードに挑戦!】ワークシート関数(INDEX/MATCH関数)

【VBAスタンダードに挑戦!】

f:id:tuna-kichi:20200614200940p:plain

 

本日の5分勉強の内容

 

 

********************************************************

ワークシート関数

・ワークシートで使用している関数をマクロでも使用できる

・WorksheetFunction. 関数名 (引数)

・引数はワークシートで使用するとき と同じように指定する

・記述方法は VBA のルールに従う
 例) A1 (ワークシート) vs Range("A1") (VBA)

・ワークシート関数では呼び出せない関数もある
 例えば、セルの中で使用する If 関数は、マクロでは使えない
 (同じ書き方で使えない)

・使用できる関数はヘルプで確認するか、
 WorksheetFunction. (ドッドまで)を記述すれば、
 候補が表示されるので、そこで確認する

 f:id:tuna-kichi:20200808171740p:plain

 

Match 関数

・指定したデータが、指定した範囲の上(左)から何番目にあるか調べる

・Match(検索値, 範囲, 照合の種類)

f:id:tuna-kichi:20200811102103p:plain

Range("F3") = WorksheetFunction.Match(Range("E3"), Range("C2:C9"), 0)

青枠のデータが赤枠の中の何番目にあるか セル F3 に入力する

※最初に見つけたデータの行数を取得しているので、
 検索範囲内はユニークの方が良い、または、それを補う手段が必要

 

ユニーク = Unique・・・唯一、一意、固有

Match・・・適合させる、試合、マッチ(棒)

                      

Index 関数

・指定した行(列)番号のデータが何か調べる

・Index(範囲, 行(列)番号)

f:id:tuna-kichi:20200811102456p:plain

 

Range("F3") = WorksheetFunction.Index(Range("C2:C9"), Range("E3"))

赤枠の範囲の上から3番目(青枠)の値段を セルF3 に入力する

 

 Index・・・索引、しるし

                      

 

Match + Index 関数

・合わせ技

・VLookupは検索するデータが指定範囲の一番左側になければいけないが、
 Match と Index を組み合わせれば、
 右側のデータを検索し、左側のデータを取得できる

 

f:id:tuna-kichi:20200811103836p:plain

 

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) '行番号を取得して変数に入れる 
 R
ange("F3") = .Index(Range("B2:B9"), r, 0)) '変数を使用して記述する

End With

********************************************************

Match関数は、列番号を取得してVLOOKUP関数によく使用します。

100列以上ある表を扱うときはとても便利。

 

 

Index 関数は使用場面がなかったので、使ったことはありませんが、

Match 関数と合わせれば、VLookup 関数で、苦労していた場合に使えそうです。

 

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/