読者です 読者をやめる 読者になる 読者になる

夢見る税理士の独立開業繁盛記

神戸市東灘区で開業している駆け出し税理士の、試行錯誤日記

エクセルで単語が含まれているかを判定するには?

Excelのこと

前回の日記で書いた、弥生会計のデータを生成するエクセルファイル「勘定科目類推機能付出納帳→弥生仕訳帳変換シート」。
「勘定科目類推機能付」と仰々しいタイトルが付いていますが、機能としては摘要に登録された単語が含まれていると、対応する勘定科目を引っ張ってくるというシンプルな仕組みです。

例えば摘要に「郵便」という単語があれば「通信費」。「タクシー」という単語があれば「旅費交通費」。「接待」「懇親」という単語があれば「交際費」。といった感じで、登録された単語と勘定科目の対応表から勘定科目を引っ張ってきます。


具体的には以下のようなマクロですが、肝は
「If InStr(Worksheets("データ貼付").Range("C" & Rowno).Value, Hanteikey) > 0 Then」
の一行のみです。

Sub 摘要から勘定科目を類推()
'
' 摘要から勘定科目を類推させる
'

'変数宣言
Dim Hanteikey As String
Dim Rowno As Long
Dim Hanteino As Long


'C列にある摘要から勘定科目を類推させ、F,G列に入れる
Hanteino = 9
Rowno = 9
Do While Worksheets("データ貼付").Range("C" & Rowno).Value <> ""

Do While Worksheets("摘要→勘定科目テーブル").Range("B" & Hanteino).Value <> ""
Hanteikey = Worksheets("摘要→勘定科目テーブル").Range("B" & Hanteino).Value

If InStr(Worksheets("データ貼付").Range("C" & Rowno).Value, Hanteikey) > 0 Then
Worksheets("データ貼付").Range("F" & Rowno).Value = Worksheets("摘要→勘定科目テーブル").Range("C" & Hanteino).Value
Worksheets("データ貼付").Range("G" & Rowno).Value = Worksheets("摘要→勘定科目テーブル").Range("D" & Hanteino).Value
Hanteino = Hanteino + 1

Else
Hanteino = Hanteino + 1
End If

Loop

Hanteino = 9
Rowno = Rowno + 1
Loop


'該当勘定科目のないF列に「未確定勘定」を入れる
Rowno = 9

Do While Worksheets("データ貼付").Range("C" & Rowno).Value <> ""

If Worksheets("データ貼付").Range("F" & Rowno).Value = "" Then
Worksheets("データ貼付").Range("F" & Rowno).Value = "未確定勘定"

End If

Rowno = Rowno + 1
Loop

End Sub

InStr関数は、ある単語が含まれている場合、その単語の位置を数字で返す関数です。
単語が含まれていたら1以上の数字、含まれていなければ0を返してくるので、「>0」という条件にしておけば、単語が含まれているかどうかを判定させることが可能になります。
タネを明かせば「なーんだ」って感じですが、知らない人の前で実演したときは「エクセルが勘定科目を自分で考えることができるの!?」とびっくりされて、「違う違う」と思わず苦笑いしてしまったこともありました(^^;。


※自動推測で仕訳を生成する機能については、今月クラウド会計の二強であるfreeeとMFクラウド会計の間で訴訟になっていましたね。
jp.techcrunch.com
二社とも今赤字覚悟でシェアアップに努めなければならないときなので、こういった問題一つでも死活問題になるのでしょうね。
まあ私のエクセルは、関数一つで疑似的に自動推測っぽいことをしているだけなので、比較対象にもならないでしょうし心配しなくてもいいですよねえ( ^ω^)・・・。


神戸市東灘区御影の会計事務所 小林敬幸税理士事務所です