Excel×VBAで自動化:freee・マネーフォワード取込用CSVを作成する方法

『経理処理をもう少し楽にしたい…』
『会計ソフト、便利だけど若干使いづらい…』
『もっと早く終わらないかな…』

ひとり社長や、小規模ビジネスであれば会計ソフトの利用は最低限と良いと考えています。

  • 基本はExcelでデータ入力
  • 月に1回、会計ソフトにインポート

で十分です。

インポートする際のcsvデータの出力を自動化しておくと効率的です。

※このようなイメージで

目次

事前の準備

日々のデータ入力はExcelやスプレッドシートで行う方が効率的です。

小規模ビジネスであれば、なおさら。

こんな感じで入力していきます。
(データ入力の流れなどは、後日別記事で整理します)

 ※サンプルファイル

VBA/マクロを組んでみよう

基本はこちら👇

初めてのマクロ
『Excelマクロ』を触ったことがない人へ 『Excelマクロ』の存在を『知っている人』は多いと思います。 一方で、『触ったことがある人』、『自分でコードを書いて業務に活かしている人』 は多くはないのではない...

具体的には、次の3つのStepで組んでみましょう。

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 rngNext 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新
定額減税給付金再勧奨通知の対応
賭博覇王伝 零 ギャン鬼編 全巻読破

◇今日の一冊
リセットの習慣

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

●1990年4月生まれ。東京都出身。
●『時間とお金』『家庭と仕事』『思考と行動』の悩みをサポート。
●IT、発信、営業、会計、税金に強みを持つ。
●公認会計士。
●3児(みんな男の子)の父。

目次