『経理処理をもう少し楽にしたい…』
『会計ソフト、便利だけど若干使いづらい…』
『もっと早く終わらないかな…』
ひとり社長や、小規模ビジネスであれば会計ソフトの利用は最低限と良いと考えています。
- 基本はExcelでデータ入力
- 月に1回、会計ソフトにインポート
で十分です。
インポートする際のcsvデータの出力を自動化しておくと効率的です。
※このようなイメージで
事前の準備
日々のデータ入力はExcelやスプレッドシートで行う方が効率的です。
小規模ビジネスであれば、なおさら。
こんな感じで入力していきます。
(データ入力の流れなどは、後日別記事で整理します)
VBA/マクロを組んでみよう
基本はこちら👇

具体的には、次の3つのStepで組んでみましょう。
①仕訳シートをコピーして、新しいワークブックに貼り付け
②日付を文字列化
③csvデータとして保存
①仕訳シートをコピーして、新しいワークブックに貼り付け
Dim src As Worksheet
Dim newwb As Workbook
Set src = ThisWorkbook.Sheets("MF")
src.UsedRange.Copy
Set newwb = Workbooks.Add
newwb.Sheets(1).Range("A1").PasteSpecial xlPasteAll
まず、
srcは『source』、newwbは「New Wordbook』の略称です。
Set src = ThisWorkbook.Sheets("MF")
で、『MF』というExcelのシートを特定し、
src.UsedRange.Copy
で、入力したデータの範囲をコピーします。
次に、
Set newwb = Workbooks.Add
で、新しいブックを開き、
newwb.Sheets(1).Range("A1").PasteSpecial xlPasteAll
で、新しいブックの1枚目のシートに先ほどコピーしたデータを貼り付けています。
②日付を文字列化
コピーができたら『csvデータに保存』といきたいところですが、
このままではインポートが上手くいきません。
csvとしてそのまま保存すると、日付が短縮形『dd/mm/yyyy』の形になってしまい、インポート時にエラーが出るからです。
そのため、日付を文字列化して『yyyy/mm/dd』の形でcsvデータ上で表記する必要があります。
少しややこしいですが、コードは以下になります。
Dim rng As Range
Dim cell As Range
With newwb.Sheets(1)
Set rng = .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
For Each cell In rng
If IsDate(cell.Value) Then
cell.NumberFormat = "@" ' 文字列形式に変更
cell.Value = Format(cell.Value, "yyyy/mm/dd") ' yyyy/mm/dd形式に変換
End If
Next cell
End With
Set rng = .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
これは、『A列のうち、A1 から最後のデータが入っているセルまでの範囲を取得する』といったコードです。
For Each cell In rng~Next cell
では、日付データに該当した場合、文字列形式に変換することを繰り返し処理しています。
③csvデータとして保存
最後にcsvデータに保存していきます。
Dim filePath As String
Dim lastMonth As Date
Dim yyyymm As String
' 前月yyyymm取得
lastMonth = DateAdd("m", -1, Date)
yyyymm = Format(lastMonth, "yyyymm")
' 保存先フォルダ+ファイル名
filePath = "C:\Users\amehu\OneDrive\00.Inbox\MF取り込み用_" & yyyymm & ".csv"
' CSV形式で保存
newwb.SaveAs Filename:=filePath, FileFormat:=xlCSV
' ブックを閉じる(保存済みなので確認なし)
newwb.Close SaveChanges:=False
ファイル名を『MF取り込み用_202509』と『名称+前月』と記入するため、
まず前月のデータを取得します。
lastMonth = DateAdd("m", -1, Date)
で、前月の取得を行い(この時点では『日付』形式)
yyyymm = Format(lastMonth, "yyyymm")
で、『日付』形式から、『文字列』に変換しています。
次に、
filePath = "C:\Users\amehu\OneDrive\00.Inbox\MF取り込み用_" & yyyymm & ".csv"
で保存先とファイル名を指定します。
C:\Users\amehu\OneDrive\00.Inbox
の部分をご自身で保存した先に変更頂ければ。
- フォルダ上部のアドレスバーを右クリック
- 『アドレスをテキストとしてコピー』を押下
で、パスを取得できます。
以降のコードはcsv保存とファイルを閉じるものなので、詳細は割愛します。
実行すると、下記のようなファイルが生成されます。
まとめ
以下のコードをもとに張り付ければOKです。
シート名や、ファイル格納先はアレンジ頂ければ。
(赤字箇所です)
freee用に作りたければ、『MF』を『freee』に変更すれば大丈夫です。
(Excelファイル側のシートも『freee』に変更することを忘れずに)
Sub MF()
'①MFシートをコピーして、新しいワークブックに貼り付け
Dim src As Worksheet
Dim newwb As Workbook
Set src = ThisWorkbook.Sheets("MF")
src.UsedRange.Copy
Set newwb = Workbooks.Add
newwb.Sheets(1).Range("A1").PasteSpecial xlPasteAll
'②日付を文字列化する
Dim rng As Range
Dim cell As Range
With newwb.Sheets(1)
Set rng = .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
For Each cell In rng
If IsDate(cell.Value) Then
cell.NumberFormat = "@" ' 文字列形式に変更
cell.Value = Format(cell.Value, "yyyy/mm/dd") ' yyyy/mm/dd形式に変換
End If
Next cell
End With
'③csvデータとして保存
Dim filePath As String
Dim lastMonth As Date
Dim yyyymm As String
' 前月yyyymm取得
lastMonth = DateAdd("m", -1, Date)
yyyymm = Format(lastMonth, "yyyymm")
' 保存先フォルダ+ファイル名
filePath = "C:\Users\amehu\OneDrive\00.Inbox\MF取り込み用_" & yyyymm & ".csv"
' CSV形式で保存
newwb.SaveAs Filename:=filePath, FileFormat:=xlCSV
' ブックを閉じる(保存済みなので確認なし)
newwb.Close SaveChanges:=False
End Sub
その後の流れ
できたcsvファイルを取り込みます。
マネーフォワードクラウドの場合は、以下記事の『2.②インポートの仕方』をご参照ください。

freeeの場合は、Excelデータで取り込みが可能です。
しかし、その場合コードを分ける必要があるので、csvのまま取り込みを行います。
具体的には公式HPのこの辺りを。
なお、上記のリンク先には『インポート用のサンプルデータ』も添付されていますが、
入力項目が多すぎるので、おすすめはしません。。。
冒頭でお示したデータでも問題なく取り込めますので、公式フォーマットは必須ではないです。
(むしろ入力項目数が多すぎて、挫折に繋がってしまいます)
以上、csvデータの出力までの自動化と、その後の流れを書いてみました。
ここにRPAを組み合わせると、取り込みまで自動化することも可能です。
(これは別記事で紹介予定です)
何か参考になる点があれば嬉しいです。
ではまた次回。
編集後記
◇日記
昨日は、オフ。
早朝ラン&ブログ執筆をして、午前中は次男と公園⇒土手へ。
(長男は空手)
夜は、妻が作ってくれたアクアパッツァの美味しさに感動しました。
◇ブログネタ経緯
経理の仕組みを整理している中で書こうかなと思って。
◇1日1新
定額減税給付金再勧奨通知の対応
賭博覇王伝 零 ギャン鬼編 全巻読破
◇今日の一冊
リセットの習慣

※
