【エクセルVBA】経理作業を効率化する方法~サンプルコード3選~

 

「毎月の経費入力がめんどうで、気づいたら深夜になっていた…」

「確定申告の直前に帳簿のミスを発見して、パニックになった…」

 

そんな悩みを抱えたことはありませんか?

 

私は2020年に10年間勤めた会社を辞め、経理の知識ゼロの状態で個人事業主として独立しました。

なるべくお金をかけたくない!という思いから、会計ソフトを使わずにエクセルで仕訳帳を自作し、帳簿をつけていました。

しかし、本業が忙しくなるたびに経理が後回しになり、年末には帳簿のミスと領収書探しで確定申告書類の準備に苦戦することに。。。

そこで活用したのが「エクセルVBA(マクロ)」による経理作業の自動化です。

 

この記事では、経理作業をVBAで効率化する具体的な方法を、初心者でもわかるサンプルコード3選とあわせて解説します。

「VBAって難しそう…」と思っている方でも、コードの仕組みを丁寧に説明しているので、ぜひ最後まで読んでみてください。

 

広告

エクセルで経理している人が感じるリアルな悩み

個人事業主として仕事をしながら、経理まで自分でこなすのは想像以上に大変です。

私のように、簿記や勘定科目のことをまったく知らない状態からスタートした方も多いのではないでしょうか。

 

まずは、エクセルで経理を続けている多くの方が感じているリアルな悩みを整理してみましょう。

 

こんな経験、あなたにもありませんか?

次の項目にいくつ当てはまるか、チェックしてみてください。

  • 毎月のレシートや領収書をエクセルに入力するのに1〜2時間以上かかっている
  • 勘定科目の選択に迷い、そのたびにネットで調べている
  • 数式がいつの間にか壊れていて、合計金額がおかしくなっていた経験がある
  • 月末にまとめて入力するため、記憶が曖昧になって間違いが増えている
  • 確定申告の直前に「金額が合わない!」となり、深夜まで作業したことがある
  • 青色申告決算書の書き方がわからず、毎年ゼロから調べ直している
  • 本業が繁忙期に入ると経理が後回しになり、年末に書類の山と格闘している

 

私自身、独立した当初はこれらすべてに悩んでいました。

特に辛かったのは、仕事が一番忙しいタイミングに確定申告の準備まで重なること。

 

年末になると憂うつな気持ちがずっと続いていて、「経理だけは本当に嫌い…」と何度も思いました。

 

エクセル経理が「しんどい」になるまでの3つのパターン

エクセルで経理することの限界は、ある日突然やってきます。

共通した3つのパターンを見てみましょう。

 

【パターン①】事業規模が大きくなると追いつかなくなる

開業したての頃は取引件数が少ないため、手入力でも何とかなります。

しかし、仕事が増えて取引件数が増えるにつれ、入力の手間が一気に増大。

毎月50件だった仕訳が200件になったとき、エクセルでの処理は一気にきつくなります。

 

【パターン②】「なんとなく合っている」感覚で申告してしまう

エクセルはミスを検知してくれません。

誤った数値を入力してもそのまま計算を続けるため、間違いに気づかないまま確定申告をしてしまうリスクがあります。

追徴課税のリスクはゼロではなく、これが一番怖いポイントです。

 

【パターン③】年々複雑になる税制に対応しきれなくなる

インボイス制度、電子帳簿保存法など、経理に関わる制度は年々変わっています。

エクセルはあくまで表計算ソフトであり、法改正への自動対応はしてくれません。

自分でフォーマットを更新し続けるのは、相当な手間と知識が必要です。

 

なぜエクセルの経理でこんなに苦労するのか?根本原因を解説

エクセルは「表計算ソフト」であって「会計ソフト」ではありません。

この根本的な違いが、経理業務でエクセルを使い続けることの大きなデメリットを生み出しています。

具体的にどんな問題が起きるのか、1つ1つ見ていきましょう。

 

エクセル経理が非効率な3つの根本原因

原因① すべてを手入力するため、ヒューマンエラーが起きやすい

エクセルでは、銀行口座やクレジットカードの明細を自動で取り込む機能がありません。

そのため、毎月の取引データはすべて手入力することになります。

1件1件入力していると、キーの打ち間違いや桁間違いが必ず起きます。

私も「¥5,400」と入力すべきところを「¥54,000」と入力し、月次の合計が大幅にズレた経験があります。

 

原因② 確定申告書類と連動していないため、二重入力が発生する

エクセルに仕訳データを入力しても、そのデータが自動的に青色申告決算書に反映されるわけではありません。

別途、e-Taxや申告書類に数字を転記する作業が必要になります。

この「転記」という作業がまた一つのミスの温床になり、同じデータを二度入力する工程は手間が倍になるだけでなく、転記ミスのリスクも抱えることになります。

 

原因③ 管理が属人化し、後から見直すのが大変

「自分だけがわかるルール」でエクセルを組んでしまうと、少し時間が経ったときに「このシートは何のためにあるんだっけ?」となります。

私もかつて、3ヶ月ぶりに自分の仕訳帳を見直したとき、列の意味がわからなくなって焦った経験があります。

税理士に確認をお願いしたいときも、独自フォーマットのエクセルだと説明に時間がかかってしまいます。

 

「とりあえずエクセル」が個人事業主にとって危険な理由

開業当初の私のように「無料で使えるし、とりあえずエクセルで経理してみよう」という考えは、じつは非常に危険です。

短期的にはコストを抑えられますが、長期的にはかえって「時間・労力・リスク」というコストが膨らんでいきます。

 

「経理にかけた時間は、本業にかけられるはずだった時間」なのです。

 

個人事業主にとって、時間は収入と同じくらい大切なもの。

「エクセルで何とかしのげている」という状況が続くほど、その機会損失は積み重なっていきます。

 

エクセルVBAで経理を自動化する方法【サンプルコード3選】

独立後、私が最初に取り組んだのが「エクセルVBA(マクロ)による経理の自動化」でした。

本業でVBAを使ったマクロを多数開発していたこともあり、そのスキルを経理処理にも応用しようと考えたのです。

VBAを使えば「ある程度」の自動化は実現できます。

 

今回は、実際に私が使っていた経理自動化マクロの中から、特に効果が高かった3つをご紹介します。

 

① CSVデータを仕訳帳へ自動転記するマクロ

銀行やクレジットカード会社からダウンロードしたCSVファイルを、仕訳シートへ自動転記するマクロです。

手入力の手間を大幅に削減でき、転記ミスもゼロにできるのがポイントです。

 

■ サンプルコード

Sub ImportCSVToJournal()

Dim ws As Worksheet
Dim csvPath As String
Dim lastRow As Long

' CSVファイルのパスを指定(同フォルダ内のbank_data.csvを読み込む)
csvPath = ThisWorkbook.Path & "\bank_data.csv"

' 仕訳帳シートを指定
Set ws = ThisWorkbook.Sheets("仕訳帳")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

' CSVを別ブックとして開いてデータをコピー
Dim csvBook As Workbook
Set csvBook = Workbooks.Open(csvPath)

Dim csvWs As Worksheet
Set csvWs = csvBook.Sheets(1)
Dim i As Long

' 2行目からデータ終端まで繰り返し転記
For i = 2 To csvWs.Cells(csvWs.Rows.Count, "A").End(xlUp).Row
ws.Cells(lastRow, 1).Value = csvWs.Cells(i, 1).Value  ' 日付
ws.Cells(lastRow, 2).Value = csvWs.Cells(i, 2).Value  ' 内容
ws.Cells(lastRow, 3).Value = csvWs.Cells(i, 3).Value  ' 金額
lastRow = lastRow + 1
Next i

csvBook.Close SaveChanges:=False
MsgBox "CSVデータの取り込みが完了しました。"

End Sub

■ コードの動作を解説します

このマクロは、3つのステップで動作します。

  • csv を ThisWorkbook.Path と同じフォルダから自動的に探して開く
  • CSVの2行目(1行目はヘッダーを想定)からデータが終わる行まで、For〜Next ループで1行ずつ仕訳帳シートへ転記する
  • 転記が完了したらCSVブックを閉じ、完了メッセージを表示する

 

実行するには、エクセルのVBAエディター(Alt+F11)を開き、このコードを貼り付けてからF5キーで実行するだけ。

VBAを初めて使う方でも、コピー&ペーストで試せる簡単なコードになっています。

 

ポイントは、csvPath の部分にご自身のCSVファイル名を合わせることです。

転記先の列(日付・内容・金額)も、実際のCSVの列順に合わせて調整してください。

 

→ → → 経理処理に応用できる「転記マクロ」のダウンロードはこちら

 

② 仕訳データをCSV形式で自動出力するマクロ

月次の仕訳データをCSV形式で自動出力するマクロです。

会計ソフトへのインポートや、税理士への共有データとして活用できます。

ファイル名には年月が自動で付くため、保存の手間も省けます。

 

■ サンプルコード

Sub ExportMonthlyCSV()

Dim ws As Worksheet
Dim filePath As String
Dim fileNum As Integer
Dim lastRow As Long
Dim i As Long
Dim lineStr As String

Set ws = ThisWorkbook.Sheets("仕訳帳")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

' 保存先とファイル名を今月の年月で自動設定
filePath = ThisWorkbook.Path & "\" & Format(Now, "YYYYMM") & "_仕訳.csv"

fileNum = FreeFile
Open filePath For Output As #fileNum

' ヘッダー行を出力
Print #fileNum, "日付,取引内容,金額,勘定科目"

' データ行を出力(2行目から最終行まで)
For i = 2 To lastRow
lineStr = ws.Cells(i, 1).Value & "," & _
ws.Cells(i, 2).Value & "," & _
ws.Cells(i, 3).Value & "," & _
ws.Cells(i, 4).Value
Print #fileNum, lineStr
Next i

Close #fileNum
MsgBox filePath & " に出力完了しました。"

End Sub

■ コードの動作を解説します

このマクロの動作は、次の4ステップです。

  • 仕訳帳シートのデータ行数を取得し、出力ファイルのパスを今月の年月(YYYYMM形式)で自動設定する
  • FreeFile関数で使用可能なファイル番号を取得し、新規CSVファイルをオープンする
  • ヘッダー行(日付・取引内容・金額・勘定科目)を最初に出力する
  • For〜Next ループで2行目から最終行まで1行ずつCSV形式で書き出し、完了後にメッセージを表示する

 

Format(Now, “YYYYMM") の部分が年月を自動取得している箇所で、毎月ファイル名を変更する手間がなくなります。

出力したCSVは、各種会計ソフトへのデータ取り込みにも活用可能。

 

CSV変換で日付が文字化けしてしまう問題の解決方法は、下記の記事で紹介しています。

→ → → 「CSV変換で日付の文字化けを防ぐ方法」記事はこちら

 

併せてチェックしてみてください。

 

③ 勘定科目を自動仕訳するマクロ

取引内容のキーワードをもとに、勘定科目を自動で割り当てるマクロです。

「交通費」「通信費」「消耗品費」など、よく使う勘定科目をキーワードで自動判定させることで、手動選択の手間を省けます。

私が一番重宝していたのが、このマクロです。

 

■ サンプルコード

Sub AutoCategorize()

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim content As String

Set ws = ThisWorkbook.Sheets("仕訳帳")
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

' B列(取引内容)を読み取り、D列(勘定科目)に自動記入
For i = 2 To lastRow
content = ws.Cells(i, 2).Value

Select Case True
Case InStr(content, "電車") > 0 Or InStr(content, "バス") > 0 Or InStr(content, "交通") > 0
ws.Cells(i, 4).Value = "旅費交通費"
Case InStr(content, "通信") > 0 Or InStr(content, "インターネット") > 0 Or InStr(content, "携帯") > 0
ws.Cells(i, 4).Value = "通信費"
Case InStr(content, "文具") > 0 Or InStr(content, "消耗品") > 0 Or InStr(content, "コンビニ") > 0
ws.Cells(i, 4).Value = "消耗品費"
Case InStr(content, "書籍") > 0 Or InStr(content, "本") > 0
ws.Cells(i, 4).Value = "新聞図書費"
Case InStr(content, "接待") > 0 Or InStr(content, "会食") > 0
ws.Cells(i, 4).Value = "接待交際費"
Case Else
ws.Cells(i, 4).Value = "要確認"
End Select
Next i

MsgBox "勘定科目の自動入力が完了しました。」要確認」の項目は手動で修正してください。"

End Sub

■ コードの動作を解説します

このマクロはSelect Case文とInStr関数を組み合わせた、シンプルな自動仕訳マクロです。

  • B列(取引内容)を2行目からデータ終端まで1行ずつ読み取る
  • InStr関数で取引内容の文字列の中に特定のキーワードが含まれているかを確認する
  • キーワードに一致した場合、D列(勘定科目)に対応する勘定科目名を自動入力する
  • どのキーワードにも一致しない場合は「要確認」と入力し、後から手動確認できるようにフラグを立てる

 

InStr関数は「文字列の中に特定の文字が含まれているか」を調べるための関数です。

たとえば InStr(content, “電車") > 0 は「取引内容に『電車』という文字が含まれていれば真」という意味になります。

 

キーワードのリストを自分の事業に合わせて増やせば増やすほど、自動仕訳の精度が上がっていきます。

よく使う勘定科目と関連キーワードを事前にリスト化しておくと便利です。

 

VBAで文字列を切り出しする方法は、下記の記事で紹介しています。

→ → → 「文字列を切り出しする関数の使い方」記事はこちら

 

併せてチェックしてみてください。

 

VBAで自動化しても越えられない「3つの限界」

VBAを駆使してエクセル経理を自動化することは可能です。

しかし、しばらく使い続けるうちに「これ以上はVBAでは無理だ」と感じることになります。

 

実際に私が感じた「越えられない壁」を、正直にお伝えします。

 

限界① 銀行・クレジットカードとのリアルタイム連携ができない

VBAでCSVを取り込むマクロは作れますが、それでも「銀行サイトからCSVをダウンロードする」という手作業は毎月発生します。

口座やカードの枚数が増えれば増えるほど、ダウンロードの手間が増えていく。。。

 

会計ソフトなら、銀行口座やクレジットカードと直接API連携しているため、取引データの自動取込が可能です。

CSVのダウンロード作業すら不要になります。

 

この差は、使い続けるほどに大きく感じるようになりました。

 

限界② 確定申告書類の自動作成は事実上不可能

どれだけ丁寧に仕訳データを整備しても、エクセルVBAだけで青色申告決算書や確定申告書類を自動作成するのは非常に困難です。

国税庁の書類の書式は毎年変わる可能性があり、その都度マクロを修正し続けるのは現実的ではありません。

 

私はこの壁に何度もぶつかり、「ここまで作り込む労力は本業に使うべきだ」と感じました。

 

会計ソフトなら、日々入力したデータをもとに確定申告書類を自動作成でき、e-Taxへのデータ連携も可能です。

 

限界③ インボイス制度・電子帳簿保存法への対応が難しい

2023年から始まったインボイス制度への対応も、エクセルVBAだけでは困難です。

適格請求書発行事業者番号の管理や、仕入税額控除の計算など、税務処理は年々複雑化しています。

また、電子帳簿保存法では電子取引データの保存要件(検索可能性・改ざん防止)を満たす必要があります。

 

エクセルで要件を満たすには専門知識と継続的な管理が必要で、個人事業主が一人で対応するのは相当な負担です。

会計ソフトはこれらの法改正に自動対応しており、ユーザー側での対応は基本的に不要になります。

 

頑張って自動化するより、もっと楽な方法があります

ここまで読んでいただいた方はおわかりかと思いますが、

VBAで頑張って自動化するよりも、最初から会計ソフトを使った方が圧倒的に楽

なのは間違いありません。

 

私の経験を正直にお伝えすると、「最初からエクセルを使わずに会計ソフトを使えばよかった」と後悔しています。

エクセルとVBAに費やした時間は、今思うと本当にもったいなかった…。

 

会計ソフトを使えば、エクセルVBAでは実現できなかった以下のことが、すべて自動化できます。

  • 銀行口座・クレジットカードとの自動連携(取引データを自動取り込み)
  • AIによる自動仕訳・勘定科目の自動提案
  • 青色申告決算書・確定申告書類の自動作成
  • インボイス制度(適格請求書)への自動対応
  • 電子帳簿保存法への対応
  • レシートをスマホで撮影するだけで自動仕訳する機能
  • スマホからいつでもどこでも入力・確認が可能

 

実際に私は会計ソフトを導入してから、経理に費やす時間は激減しました。

今では本業の合間の休憩時間に、スマホでサッと入力を済ませています。

 

確定申告書類も、ソフト上でほぼ自動作成できるため、1月中旬から準備を始めても余裕をもって申告できるようになりました。

「経理が嫌い」だった私が、今では「経理は別に苦じゃない」と思えるようになったのは、間違いなく会計ソフトのおかげです。

 

私が実際に使っている会計ソフト「マネーフォワード」は商工会議所の方や先輩個人事業主の方から、

経理をやったことがない人でも扱えて、「確定申告」「請求書作成」「帳簿作成」「銀行口座連携」など、いろんな機能が使えてコスパもいい

と勧められましたものです。

 

今のところ、なんのストレスなく使えているのでこれからも使い続けようとお思っています。

 

会計ソフト「マネーフォワード」については、下記の記事で詳しく紹介しています。

【個人事業主おすすめ】マネーフォワードを使うべき7つの理由と導入メリット

 

まとめ|エクセルVBAは便利だが、会計ソフトには敵わない

この記事でお伝えしたことを整理します。

  • エクセル経理の悩みの根本は「手入力によるミス」「二重入力」「属人化」の3つ
  • エクセルVBAを使えば「CSV取り込み」「CSV出力」「自動仕訳」などある程度の自動化はできる
  • それでも「銀行口座連携」「確定申告書類の自動作成」「インボイス対応」などは会計ソフトでしか実現できない
  • 会計ソフトを使えば、日々の仕訳・口座連携・確定申告がすべて一元管理できる
  • 個人事業主こそ、早めに会計ソフトへ移行することで本業に集中できる

 

エクセルで経理することの限界を感じている方、確定申告のたびに憂うつになっている方は、ぜひ一度会計ソフトの無料トライアルを試してみてください。

「こんなに楽になるなら、もっと早く使えばよかった」と感じるはずです。

 

会計ソフトを導入して経理にかかる時間を削減しましょう。