Excel VBA(マクロ)で、If 文を使うことがあります。
If 文は「もしこうだったらこうする」と
条件に一致する場合に、指定した処理をさせるためにあります。
さて、今日はこの If 文を使ってあいまい検索する事例を取り上げたいと思います。
1、If 文の使い方
まずは、If 文の使い方について、通常の使い方とあいまい検索をする方法を紹介します。
通常の使い方
Excel VBA で If 文を使う場合、以下のように記述します。
処理①
Else
Endif
これで、「条件1 に該当する場合に処理①を行う」という命令になります。
例えば、セルA1 の文字列が「消費税」の場合に、メッセージボックスで「OK」と表示させたければ以下のようにコードを書きます。
1 2 3 4 5 6 7 8 9 |
Sub test() If Cells(1, 1).Value = "消費税" Then MsgBox "OK" End If End Sub |
セル A1 に「消費税」と入力した状態で実行すると、以下のようにメッセージボックスが表示されることが確認できます。
Like を使った場合
さて、今日お話ししたい Like は、If 文の条件1の中で使います。
処理①
Else
Endif
例えば、セルA1 の文字列に「消費税」というキーワードが含まれる場合に、メッセージボックスで「OK」と表示させたければ以下のようにコードを書きます。
1 2 3 4 5 6 7 8 9 |
Sub test() If Cells(1, 1).Value Like "*消費税*" Then MsgBox "OK" End If End Sub |
セルA1 の文字列が「消費税」とぴったり一致する場合を条件とするときは以下のように書きました。
If Cells(1, 1).Value = “消費税”
それに対して、「消費税」というキーワードを含むことを条件とする場合は以下のように書きます。
という記述を使って以下のように書きます。
If Cells(1, 1).Value Like “*消費税*”
「消費税」というキーワードを「*」で囲うことを忘れないようにしましょう!
こうすることで、消費税という文字の前後に他の文字が含まれる場合も条件を満たすことになります。
例えば、セルA1 に「消費税の計算を行います」と記述した状態で実行してみましょう。
「消費税」というキーワードの後ろに他の文字列があっても、以下のようにメッセージボックスが表示されることが確認できます。
また、セルA1 に「勉強したいのは消費税」と記述した状態で実行してみましょう。
「消費税」というキーワードの前に他の文字列があっても、以下のようにメッセージボックスが表示されることが確認できます。
2、Like によるあいまい検索で現金出納帳の摘要から科目を割り当てる
Like によるあいまい検索で現金出納帳の摘要から科目を割り当てる VBA コード
さて、Like を使ったあいまい検索の例をもう少し紹介します。
次のような現金出納帳があったとします。
以下の項目を入力するものとなっています。
日にち、勘定科目、科目コード、摘要、収入金額、支払金額。
差引残高はセルに数式を埋め込んであるので計算されます。
お題として、摘要を入力した状態で実行すると勘定科目と科目コードを割り当てるコードを考えてみます。
例えば、摘要欄に「〇〇商店」というキーワードがある場合には、勘定科目は「仕入高」、科目コードは「712」というように自動的に割り当てれるようにするという意味です。
何回も出てくる取引内容だと、このようにすれば勘定科目と科目コードを手入力せずに済みます。
さて、下準備としてまず現金出納帳の余白にキーワード、勘定科目、科目コードの対応が分かる表を作っておきます。
よく出てくる取引を選ぶ出すと良いでしょう。
これで、どのキーワードにどの科目を割り当てたいかを設定したことになります。
VBE(エディタ)を開いて以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Sub Kamoku_Suitei() Dim Keyword_Line 'キーワードの列番号' Dim Kamoku_Line '勘定科目の列番号' Dim Code_Line '科目コードの列番号' Dim Keyword 'キーワード' Dim Kamoku '勘定科目' Dim Code '科目コード' Dim Tekiyou '摘要' Dim i Dim j Keyword_Line = 19 Kamoku_Line = 20 Code_Line = 21 For i = 1 To 500 Tekiyou = Cells(i + 12, 14).Value '摘要をあいまい検索' For j = 1 To 20 If Tekiyou Like "*" & Cells(j + 11, Keyword_Line) & "*" Then Kamoku = Cells(j + 11, Kamoku_Line) Code = Cells(j + 11, Code_Line) Exit For Else End If Next j Cells(i + 12, 12).Value = Kamoku '勘定科目割り当て' Cells(i + 12, 13).Value = Code '科目コード割り当て' Next i End Sub |
これを実行すると、以下のようにだいたいの勘定科目と科目コードが自動的に割り振られます。
すべての摘要のキーワードを想定すると量が多くなりすぎるので、絞る必要はあるわけですが、頻繁に出てくるものを設定しておくだけで勘定科目と科目コードを入力する手間が省けます。
コード説明
さて、今回の VBA コードについて主な点をお話ししておきます。
If 文での検索の条件は以下のように記述しています。
If Tekiyou Like “*” Cells(j + 11, Keyword_Line) “*”
今回のようにキーワードを順番に読み込む必要がある場合には、キーワードを「Cells(j + 11, Keyword_Line)」のように変数を使って表さなければなりません。
そのような場合に Like を使うとすると、先の “*消費税*”のように “” で囲われる中に全てを表示することができません。
文字列をつなぐ役割を持った & を使って
“*” & Cells(j + 11, Keyword_Line) & “*”
のように記述します。
これで、「Cells(j + 11, Keyword_Line)」というキーワードを含む文字列を表すことができます。
3、経理業務で使えるExcel現金出納帳プレゼント!!
2022年3月29日に追記致します!
上記でお話しした現金出納帳にマクロを組み込んでさらに使いやすくしたものをプレゼント致します!
▼▼以下よりダウンロードできますので、ぜひ有効活用して下さい▼▼
現金出納帳ダウンロード
なお、使い方につきましては以下の動画▼の中で解説しておりますので参考にして下さい。
4、まとめ
Like を使ったあいまい検索は意外と使える場面が多いです。
今回の例を参考にして、是非活用いただければと思います。
編集後記
昨日(12/19)は仕事の後、マッサージを受けに行ってきました。
ここのところ座って作業しっぱなしで、かなり体が凝ってたので楽になりました。