はじめに
「VBAってプログラミングでしょ?自分には無理…」
そう思ったことはありませんか? 実はAIツール「Claude Code」を使えば、プログラミングの知識がなくてもExcelのマクロ(VBA)を自動で作れます。
この記事では、Claude CodeとVBAをまったく触ったことがない方でも実践できるように、具体的なコード例を交えながら丁寧に解説します。
Claude CodeとVBAって何?
Claude Codeとは
Claude Codeは、Anthropicが提供するAIコーディングアシスタントです。「こんな処理をするコードを書いて」と日本語で指示するだけで、プログラムコードを自動生成してくれます。
プログラマーでなくても使えるのが最大の特徴で、「やりたいこと」を言葉で伝えるだけでOKです。
VBA(Excel マクロ)とは
VBAとは「Visual Basic for Applications」の略で、ExcelやWordなどOffice製品で動く自動化プログラムのことです。
たとえばこんなことができます:
- 毎月同じフォーマットで集計表を作る作業を1クリックで完了
- 大量の行データを条件でフィルタリングして別シートに転記
- セルの書式をまとめて整える
これまではVBAを書くには専門知識が必要でしたが、Claude Codeと組み合わせることでその壁がぐっと低くなりました。
準備するもの
必要なものはシンプルです:
- Excel(2016以降推奨)
- Claude Codeへのアクセス(claude.ai またはClaude Code CLI)
Claude Codeのアカウントは公式サイト(claude.ai)から作成できます。無料プランでも基本的な使い方は可能です。
実践①:セルの書式を一括整えるマクロ
やりたいこと
「A列のデータをすべて太字にして、背景色を薄い青にしたい」というケースです。手作業だと何十行もあると大変ですが、マクロなら一瞬です。
Claude Codeへの指示(プロンプト)
Claude Codeにこう伝えてみましょう:
Excelで以下の処理をするVBAマクロを書いてください。
·アクティブなシートのA列(A1から最終行まで)のセルをすべて太字にする
·同じ範囲の背景色を薄い青(RGB: 173, 216, 230)に変更する
·マクロ名は「FormatColumnA」にする
生成されるコード例
Claude Codeが生成するコードはだいたいこのようなものになります:
Sub FormatColumnA()
Dim lastRow As Long
Dim rng As Range
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' A1から最終行までを範囲に指定
Set rng = Range("A1:A" & lastRow)
' 太字に設定
rng.Font.Bold = True
' 背景色を薄い青に設定
rng.Interior.Color = RGB(173, 216, 230)
MsgBox "書式設定が完了しました!"
End Sub
Excelへの貼り付け手順
生成されたコードをExcelで動かすには以下の手順を踏みます:
- ExcelのリボンメニューやAlt+F11でVBEを開く
- 左ペインで「標準モジュール」を右クリック→「挿入」→「標準モジュール」
- 右ペインに表示されたコードエリアにコードを貼り付け
- F5キーまたは「実行」ボタンでマクロを実行
実践②:別シートへのデータ転記マクロ
やりたいこと
「Sheet1のB列に『完了』と入力されている行だけを、Sheet2に転記したい」というケースです。フィルタをかけてコピペする作業も、マクロなら自動化できます。
Claude Codeへの指示
Excelで以下の処理をするVBAマクロを書いてください。
·Sheet1のB列を確認し、値が「完了」の行を見つける
·その行のA列からD列のデータをSheet2に順番に転記する
·転記はSheet2の最終行の次の行から追加していく
·マクロ名は「TransferCompleted」にする
生成されるコード例
Sub TransferCompleted()
Dim wsSource As Worksheet
Dim wsDest As Worksheet
Dim lastRowSrc As Long
Dim lastRowDst As Long
Dim i As Long
Set wsSource = ThisWorkbook.Sheets("Sheet1")
Set wsDest = ThisWorkbook.Sheets("Sheet2")
lastRowSrc = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRowSrc
If wsSource.Cells(i, 2).Value = "完了" Then
lastRowDst = wsDest.Cells(Rows.Count, 1).End(xlUp).Row + 1
wsDest.Range("A" & lastRowDst & ":D" & lastRowDst).Value = _
wsSource.Range("A" & i & ":D" & i).Value
End If
Next i
MsgBox "転記が完了しました!"
End Sub
「動かない!」ときのClaude Code活用術
エラーメッセージをそのまま貼り付ける
マクロを実行してエラーが出たら、そのエラーメッセージをそのままClaude Codeに貼り付けてください。
以下のエラーが出ました。修正してください。
「実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。」
これだけでClaude Codeが原因を分析して修正案を提示してくれます。自分でエラーを調べる必要はありません。
「もう少し詳しく」と追加指示を出す
最初の生成結果が期待と少し違っても大丈夫です。会話を続けながら修正できます:
ありがとうございます。追加で、転記する前に
Sheet2の既存データをクリアしてから転記するように変更してください。
このように自然な日本語でやり取りしながらコードを育てていけるのが、Claude Codeの強みです。
よくあるつまずきポイントと対処法
マクロが実行できない
Excelのデフォルト設定ではマクロが無効になっています。以下の手順で有効化してください:
- 「ファイル」→「オプション」→「トラストセンター」→「トラストセンターの設定」
- 「マクロの設定」で「警告を表示してすべてのマクロを無効にする」または「すべてのマクロを有効にする」を選択
- ファイルをマクロ有効ブック(.xlsm)として保存し直す
コードをどこに貼ればいいかわからない
VBEの「標準モジュール」に貼るのが基本です。シートのコードエリア(Sheet1など)に貼ってしまうと動作が変わる場合があります。迷ったら必ず「標準モジュール」へ。
「シートが見つかりません」エラーが出る
コード内のシート名(例:"Sheet1")と実際のシート名が一致していない場合に起こります。シートタブの名前を確認して、Claude Codeに「シート名は〇〇です」と伝えてコードを再生成してもらいましょう。
まとめ
Claude CodeとVBAの組み合わせでできることを振り返りましょう:
- プログラミング知識不要で、日本語の指示からVBAコードを自動生成
- エラーが出ても、メッセージを貼り付けるだけで修正してもらえる
- 「もっとこうしたい」という追加要望も会話形式で対応可能
「マクロは難しい」という思い込みは、もう過去のものになりつつあります。まずはシンプルな書式変更マクロから試してみてください。一度動くマクロが完成すると、「次はこれも自動化したい!」という気持ちが自然と湧いてきます。
Excel業務を抱えている方にとって、Claude CodeはVBA開発の心強いパートナーになってくれるはずです。