【VBA】組み込み関数を使いこなせ!コード量が激減!VLOOKUPを例に実演!

f:id:yshgs_elec:20210214162927j:plain

「VBAの基本的なスキルさえあれば、組み込み関数なんて使えなくてもいいや。」

こんな風に考えている人は多いのではないでしょうか。

 

私自身、昔は

「最終的につくりたいものさえ作れてしまえば過程はどうでも良いのだ。」

このように考えていました。

 

しかしながら、VBAの勉強を進め、さまざまな組み込み関数を使いこなせるようになった今、猛烈に思うことは

「なんて無駄なコードを書いてきたんた・・・。」

ということです。

 

たしかにIF文、FOR分、DO分を最低限使いこなすことができれば、たいていのことは実行できます。

しかしながら、それをやってしまうとコード量がとんでもなく長くなってしまうのです。

 

というわけでこの記事では、VLOOKUP関数を例に

◆VLOOKUPの機能を自力でコーディングした場合

◆組み込み関数としてVLOOKUPを使った場合

でどのくらいコード量に差が出るのかを実演してみます。

 

それでは早速やっていきましょう!

※組み込み関数はワークシート関数と呼んだりもしますが、本記事中では組み込み関数と呼ばせていただきます。

スポンサーリンク

題材紹介:VLOOKUP関数について

まずはじめに今回取り扱うVLOOKUP関数とはどのようなものなのかをご紹介しておきましょう。

※VLOOKUPくらい知ってるぜ!という方は読み飛ばしてください。

 

VLOOKUPを簡単に説明すると

【指定した表の中から条件に一致する項目を抜き取ってくる】機能です。

以下の画像は、D1セルからK12セルまでの表に対して、A2セルに記入された時刻、A3セルに記入されたデータ名のデータをVLOOKUPで取得しようとしている際の作業風景です。(A4セルで作業をしています。)

VLOOKUP関数にMATCH関数を組み合わせて使っている作業イメージ

このまま数値を出力すると、

VLOOKUP関数にMATCH関数を組み合わせて使った結果

きちんとdata4という列の0.5という時刻のデータが出力されていることがわかります。

(A4セルの数値とH7セルの数値が一致していますね。)

 

これがざっくりとしたVLOOKUPの機能です。

※今回はMATCH関数と組み合わせて使っています。

 

VLOOKUPの基本機能がわかったところで、次はこの記事の本題である、この作業をVBA上でコーディングしていきましょう

 

スポンサーリンク

VLOOKUPの機能を自力で作った場合

まずは先ほどおこなった作業をDo Loop をつかって自力で再現してみましょう。

◆自力でVLOOKUP機能を作ったVBAコード

Sub vlookup_jiriki()
    Dim search_time As Single, search_data As Single
    Dim search_word As String
    search_time = Cells(2, 2)
    search_word = Cells(3, 2)
    data_region = Range("D1:K12")
    i = 1
    Do Until data_region(i, 1) = search_time
        i = i + 1
    Loop
    j = 1
    Do Until data_region(1, j) = search_word
        j = j + 1
    Loop
    search_data = data_region(i, j)
    Cells(4, 2) = search_data
End Sub

これでもかなり短縮して書いたつもりですが、結構なコード量になっていますね。

次は組み込み関数としてVLOOKUP(とMATCH)をつかったらどれくらいのコード量で書けるのかを実演してみましょう。

 

スポンサーリンク

組み込み関数のVLOOKUPを使った場合

さっそくコードを書いてみましょう。

◆組み込み関数のVLOOKUPを使った場合のコード

Sub vlookup_kansu()
    Dim search_time As Single, search_data As Single
    Dim search_word As String
    search_time = Cells(2, 2)
    search_word = Cells(3, 2)
    search_data = WorksheetFunction.VLookup(search_time, Range("D1:K12"), WorksheetFunction.Match(search_word, Range("D1:K1")))
    Cells(4, 2) = search_data
End Sub

はい、これだけです。

 

前半部分と最後は一緒なので、変化した部分だけを比較すると

10行からたったの1行にコード量を削減できました。

もちろんそれに応じてコーディングにかかった時間も非常にすくなくてすみました。

 

これだけコード量、作業量を削減できるのです。

組み込み関数を使わない理由がありませんよね。

スポンサーリンク

おわりに

というわけで今回は組み込み関数を使いこなすことで、どのくらいコード量を削減できるのかを実演してみました。

すべての関数を覚えておく必要はありませんが、まずコーディングを始める際に、

「組み込み関数で代用できないだろうか?」

このように考える癖をつけておくのが良いでしょう。

 

このように私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

・日々の残業時間を減らしたい。

・業務をもっと効率的にこなしたい。

・もっと勉強する時間を作りたい。

こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。

この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました