こんにちは、jazz335です。今回はChatGPTで資産管理エクセルマクロを作成した経緯をお話しします。
銀行預金管理をNumbersでやってたが・・・
僕は数年前からMacユーザになりました。会社ではWindowsを使っていて、VBAマクロもちょこちょこ書いています。そして、これまで自分の銀行預金の管理を MacのNumbers で行ってきました。口座ごとに表を作り、用途別に金額を分ける。iPhoneでも見れるのが最大のメリットで、運用としては悪くなかったのですが、次第に限界を感じるようになりました。
・銀行が増える
・普通/定期が混ざる
・生活防衛費などの目的別資金が混在する
・今いくらあるのかを一瞬で把握できない
「全体像が見えない」
そこで考えたのが、Excelでの一元管理です。
しかしながらMacのエクセルでVBAを書くのはかなりクセが強く、Windows版エクセルでVBAを書くようにはいかないところがあります。
Mac版Excelマクロはクセが強い
最初に直面したのは、Windows前提の情報がほとんど役に立たないという事実です。
・テーブル機能が不安定
・ActiveXが使えない(CreateObjectで実行時エラー)
・VBEがSubの重複を貼り付け時に警告しない
・UIが突然死ぬことがある
Windowsなら動くコードが、Macでは普通に落ちます。
そこで方針を決めました。ChatGPTと対話しながら要件を定義して、全てコードを書いてもらう。そして、
「Macで確実に動く、シンプルな設計にする」
フェーズ分割という考え方
最終的にやりたいことは「総資産ポートフォリオの可視化」です。しかし、いきなり株式や確定拠出年金まで扱うと破綻するのは明らかでした。
そこでフェーズを分けました。
フェーズ1:預金だけ
フェーズ2:分析・可視化
フェーズ3:株式・DCの統合
この記事は、フェーズ1を完成させるまでの記録です。
フェーズ1の全体設計
1ブック完結で運用します。
フェーズ1時点のシート構成は以下です。
MENU
操作用のシート。ボタンを置くだけ。
入力_預金内訳
Numbersからコピペする作業台。
履歴_預金内訳
1明細=1行で蓄積されるデータベース。
預金サマリー
銀行別・普通/定期別の集計結果を表示する成果物。
重要な設計判断は以下の2点です。
・テーブル機能を使わない
・ActiveXに依存しない
これだけで、Macでの安定性が大きく変わりました。
NumbersからExcelへの取り込み設計
Numbers側では、次のような「文法」を決めました。
銀行口座区分 01_XX銀行(普通)
2026/1/3
生活費 100,000
子供の学費積立 200,000
合計 300,000
ポイントは以下です。
・銀行名と口座区分をセル内に明示する
・合計行はあってもよい(無視する)
・金額が空白の行は無視する
これを1枚のExcelシートに縦にペタペタ貼るだけです。
銀行が増えても、小口口座でも、同じ文法で扱います。
履歴化で一番大事だったこと
履歴を作るよりも重要だったのが、事故防止です。
同じ入力を2回押すと、履歴が二重に溜まる。
これは実務では致命的です。
そこで採用したルールがこれです。
「口座キー+基準日+内訳名」が同じなら追加しない。
VBAでは次のような関数を使いました。
Private Function ExistsHistoryRow(ws As Worksheet, _
accountKey As String, baseDate As Date, itemName As String) As Boolean
Dim r As Long, lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For r = 2 To lastRow
If ws.Cells(r, "A").Value = accountKey _
And ws.Cells(r, "D").Value = baseDate _
And ws.Cells(r, "E").Value = itemName Then
ExistsHistoryRow = True
Exit Function
End If
Next r
ExistsHistoryRow = False
End Function
これにより、安心してボタンを押せるようになりました。
集計ロジックは地味に、しかし確実に
MacではDictionaryが使えません。
そこで採用したのが、Excel標準機能だけを使う方法です。
・RemoveDuplicates
・SUMIF
銀行別集計の考え方はこうです。
- 履歴シートの銀行名列をコピー
- 重複を削除
- 各銀行についてSUMIFで合計
地味ですが、Macでも100%安定します。
預金サマリーの完成形
完成した預金サマリーは、次の構成です。
左側:銀行別 残高合計
右側:普通/定期別 残高合計
両方の合計が一致することで、数字の整合性が一目で分かります。
・毎回シートをクリアして再生成
・銀行が増えても壊れない
・書式(カンマ、合計線)も自動
完全に「日常運用できるツール」になりました。
今回の最大の学び
一番強く感じたのはこれです。
コードを書く力より、運用を言語化する力のほうが重要。
私は今回一行もコードを書いていません。
代わりにやったのは、
・どう使いたいかを言葉にする
・自然にやっている運用を仕様に落とす
・危険なポイント(重複、Mac依存)を先に潰す
その結果、壊れにくい仕組みができました。
Excel × VBAは正直しんどいです。
特にMac。
それでも、
・フェーズを切る
・欲張らない
・動くものを積み上げる
この3つを守れば、ちゃんと「資産管理のOS」になります。
ChatGPTと対話しながらマクロを書いて気づいたこと
今回の取り組みで、もう一つ大きな発見がありました。
それは「ChatGPTとの対話そのものが、設計作業の一部になっていた」ということです。
私はVBAを少し書けますが、複雑なコードをほとんど書いたことがありません。
それでも、最終的には実務で使えるマクロが完成しました。
その理由を振り返ると、ChatGPTとの関わり方にいくつか特徴があったと感じています。
ChatGPTは「答えを出す前に寄り添ってくれる」
まず感じたのは、ChatGPTがいきなり正解を押し付けてこないことです。
「こうすればいいですよ」
「これが最適解です」
という形ではなく、
・今どこで詰まっているか
・何がまだ決まっていないか
・どこに不安があるか
を前提に話を進めてくれました。
特に助かったのは、「先に進める前に、仕様を一度言語化しましょう」と何度も立ち止まってくれた点です。
結果として、あとから大きな手戻りが起きませんでした。
意味が分からない部分を、分からない前提で説明してくれる
VBAを書いていない立場からすると、
・なぜこの処理が必要なのか
・なぜここでエラーになるのか
・どこを触ってはいけないのか
が分からないまま進むのが一番怖いポイントです。
ChatGPTは、
「これは今は理解しなくて大丈夫です」
「ここはそういうものだと思ってください」
と、理解の優先順位を整理してくれました。
結果として、
・今理解すべきこと
・後で理解すればいいこと
が自然に分かれ、頭が混乱しませんでした。
エラー画面やデバッグ情報は「画面キャプチャ」が最強
今回かなり実感したのがこれです。
エラー文を文章で説明するよりも、
エラー画面やVBEの状態をそのままキャプチャして貼る方が、圧倒的に早く解決します。
・実行時エラーのダイアログ
・VBE上のコード位置
・どこで止まっているか
これらを画像で貼ると、ChatGPTは「何が起きているか」を即座に把握してくれました。
特にMac版ExcelはWindowsと挙動が違うため、
文章だけだと説明が難しい場面が多かったです。
「YES / NO で聞いてもらう」のが実は重要だった
途中から気づいたのですが、
大きな設計判断のときに、
「これはYESですか?NOですか?」
という聞き方をしてもらえると、非常に楽でした。
自分でも整理しきれていない段階では、
・自由回答
・長文説明
よりも、
・YES / NO
・どちらが近いか
で聞かれた方が、判断しやすかったです。
その結果、設計が一段ずつ積み上がっていきました。
「自然にやっていること」が、そのまま仕様になる
今回の設計で印象的だったのは、
「あなたが自然にやったことが、そのまま仕様です」
と言われた場面です。
銀行口座区分行、ブロック構造、合計行の扱いなど、
すべて自分が普段Numbersでやっていた運用でした。
ChatGPTはそれを否定せず、
・それを前提にする
・言語化する
・ルールとして固定する
という形で整理してくれました。
結果として、「無理にシステムに合わせる」のではなく、
「自分の運用に合った仕組み」ができました。
Mac環境では「シンプルさ」が正義
対話を通じて何度も確認したのが、
・ActiveXは避ける
・テーブルに依存しない
・標準機能で組む
という方針です。
ChatGPTは「できること」よりも「落ちないこと」を優先してくれました。
その結果、
・RemoveDuplicates
・SUMIF
・Cells.Clear
といった地味な構成になりましたが、
これはMac環境ではむしろ最適解でした。
ChatGPTは「コードを書く相手」ではなく「設計の壁打ち相手」
最終的に感じたのはこれです。
ChatGPTは、マクロを代わりに書いてくれる存在ではなく、
「考えを整理し、設計を形にする相手」だった、ということです。
私はコードをほとんど書いていません。
それでも、
・何を作るか
・どこで止めるか
・どこから次に進むか
は、対話の中で自然に決まりました。
これは一人でやっていたら、かなり遠回りしていたと思います。
まとめ
ChatGPTと対話しながらマクロを書くという体験は、
・技術習得
・問題解決
・思考整理
が同時に進む、不思議な感覚でした。
特に、
・分からないことを分からないと言える
・途中で立ち止まれる
・失敗してもすぐ戻れる
という点は、学習コストを大きく下げてくれました。
これからExcelやVBAに挑戦する人には、
「まずChatGPTに話しかけながら設計してみる」
というやり方を、強くおすすめしたいです。
