pickup

目次

VBAでIndex Match関数を再現する

こんにちは。伊川(@naonaoke)です。


上の記事、動画ですが、結構な勢いで再生されました。

現時点で、視聴回数 236,624回です。

一発屋なのですね。

今回は、関数をVBAで再現します。

問題提起

(株)IKAWAの柄久 瀬瑠子(エク セルコ)は上司から下記の依頼を受けました。

VBAでVLOOKUP関数のようなことはできないのか?

どのよなコードを記載するのか?

解決策

回答
sesuo2.jpg
・Application.WorksheetFunctionで、ワークシート関数を使う。

 

Application.WorksheetFunction

Applicationは省略できます。

しかし、すべてのワークシート関数が使えるわけではありません。


WorksheetFunctionというクラスに、WorksheetFunctionメンバーに格納されている関数が使えます。

今回は、XLOOKUPを赤枠で囲みました。

XLOOKUPは、当初は、VBAで使えなかったようですが、WorksheetFunctionメンバーに格納されていて、びっくりです。

ちなみに、この辺の知識は、クラスモジュールにつながります。

WorksheetFunctionを使う 作成手順その1 データ    ベース確認



上の数式をVBAで再現します。

WorksheetFunctionを使う 作成手順その2 コード解説


Sub test2()
Dim ws As Object
Dim ws2 As Object
Set ws = Worksheets("原本") 'wsというObjectにWorksheets("原本")をセット
Set ws2 = Worksheets("転記") 'ws2というObjectにWorksheets("転記")をセット

'WithステートメントでApplication.WorksheetFunctionを、まとめる

With Application.WorksheetFunction  'VBAでワークシート関数を使うおまじない
myR = .Index(ws.Range("A:A"), .Match(ws2.Range("A1"), ws.Range("B:B"), 0))

'=INDEX(原本!$A:$A,MATCH(転記!A:A,原本!B:B,0)) 関数で記載する

If IsError(myR) = True Then  'エラー判定が出たら、
ws2.Range("B1") = "該当無"   '該当無と表示する
Else
ws2.Range("B1") = myR        'そうじゃなかったら、myRを表示する
End If

End With

End Sub

 

WorksheetFunctionを使う 作成手順その3  WorksheetFunctionの欠点

WorksheetFunctionは、確かに便利なのす。

ただし、この辺りを使いすぎると、VBAを使いこなすことができません。

考え方が、ワークシート関数と同じだからです。

なるべく、配列等で記載することが、VBAスキルアップにつながります。

コードを記載していくと理解できるのですが、コードが長くなり、利便性を感じません。

きっちり、コンピュータ言語的に記載していくことが、大切です。

ここがポイント

ここがポイント
Function8.png
VBAを使いこなそうとするときに、関数をVBAで表現したら、どうなるのか考えましょう。WorksheetFunctionが慣れてきたら、配列等で表現できるように考えましょう。

 

まとめ

今回のまとめ
sesuko3.jpg
今回は、伊川の人気?の動画をVBAで表現しました。VBAのスキルアップのために、伊川と一緒にがんばりましょう。。

今回のサンプルファイルは、No115です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事