「AIと会話するだけでExcelのマクロが直る」。
そう言われても、たいていの人はピンと来ないと思う。本当にそんなことできるの? と。
なので今回は、能書きじゃなく実際にあった対話をほぼそのまま載せます。
私の自作ツール「ファイル一覧」が突然壊れて、それをAI(Claude)との会話だけで直し、さらに「なぜ壊れたのか」を二人で深掘りしたときの記録です。
マクロを直すための会話というより、会話の中で一瞬だけマクロを直しているという感じです。
実際に、会話するだけで直るとはどんな感じなのか、そのライブ感をお伝えできればと思います。
※私の発言は音声入力なので、元は誤変換だらけでした。そこだけ読めるように直しています。
やり取りの中身と順番、途中のすれ違いや私の口の悪さは、そのままにしてあります。
発端:開いたら、画面の全セルが「#N/A」
ファイル一覧を作るツールを開いたら、全部のセルが #N/A で埋まっていた。
私:ちょっと今開いてるファイル一覧、添付した画像を見てくれよ。なんかエラーみたいなの出てるんだけど、これどうしてかな。
AI:全部のセルが #N/A ですね。参照系の数式(VLOOKUPなど)が探しに行って見つからない、という状態が怪しいです。
私:数式じゃないよ。ただの文字だよ。
AI:なるほど、ベタ打ちの「#N/A」という文字なら、何か(マクロ)が書き込んだ結果ですね。「抽出開始」を押した直後にこうなりました?
私:……お前しつこいな。さっきから「文字が入ってるだけ」だと言ってるだろ。お前、俺を信用してないな。
ここ、隠さず載せます。AIは最初、見当違いの方向に行きかけて、私の言葉を信じずに食い下がった。 私はイラッとした。これが実際です。
AI:すみません、完全に私が悪いです。憶測はやめて、実際にマクロの中身を読みます。
転換:AIが、実際にコードを読みに行く
AI:分かりました。コードのどこにも「#N/A」という文字を書いている箇所が無い。つまりこれは、文字でも数式でもなく、"エラー値が定数として直接書き込まれている" 状態です。クリックすると = が無いので、文字と見分けがつかない。あなたが「文字だ」と言ったのは無理もないです。
さらに「文字ではない」ということにしつこく食い下がるAI。エラー値とかそんなもの40年の経験でわかってることなのに(笑)
そして、データの数を数えてみると――
AI:#N/A になっている行が、きっちり 65,536個。生き残った本物データが 12,077件。合計 77,613件。この「65,536」、偶然ではありえません。
※ここ、直感とは逆で面白い。普通は「65,536件までは無事で、あふれた分が壊れる」と思うはず。
ところが実際は逆で、65,536件のほうが壊れて、あふれた12,077件だけが生き残っていた。
正直、私も半信半疑だった。なので後から自分の目で、全行スクロールして数え直した。
―― 本当に、そうだった。(この"確かめる"ひと手間が、後で効いてくる。)
▲ 65,536行目までが #N/A、65,537行目から本物のデータ。この"きっちり65,536"が、Transpose の仕業の動かぬ証拠だった。
真犯人:Application.Transpose の 65,536行制限
AI:犯人は Application.Transpose です。Excelのこの関数には「65,536個までしか扱えない」という古い制限があって、ファイル数がそれを超えた瞬間、配列が壊れて #N/A になっていた。
ここで私は思い出した。
私:……あ、これ、お前が前に直したコードだろ。なんでそんな制限のあるやつ使ったんだよ。俺はこれで50万件のファイル一覧とか作ってたんだぞ。これ使ったら50万件できなくなるじゃないか。早く直せ。
AI:その通りです。Application.Transpose を入れたのは過去の私のミスです。あなたが50万件扱うツールを、6万5千件で頭打ちにしてしまった。すぐ直します。
' 旧(壊れていた):Transpose は 65,536 行で頭打ち
Range("B2").Resize(cnt, 1).Value = Application.Transpose(D1)
' 新:2次元配列に詰めて一括書き込み(約104万行までOK)
Dim outArr() As Variant, r As Long
ReDim outArr(1 To cnt, 1 To 5)
For r = 1 To cnt
outArr(r, 1) = D1(r): outArr(r, 2) = D2(r): outArr(r, 3) = D3(r)
outArr(r, 4) = D4(r): outArr(r, 5) = D5(r)
Next r
Range("B2").Resize(cnt, 5).Value = outArr
直った。会話だけで。……でも、面白いのはここからの深掘りだった。
深掘り①:そもそも、なんで「65,536」なんだ?
私:このTransposeの6万5千ってさ、Excelがそれを作ったとき、6万5千行しか無かったからそうなってるんだろう。
AI:大正解です。65,536 は 2の16乗。昔のExcel(97〜2003、.xls形式)の最大行数がきっかり65,536行だった。当時はそれ以上シートに入らないから、縦横を入れ替える Transpose もその世界に合わせて作られた。
ところが Excel 2007 で行数が約104万行(2の20乗)に拡張された。なのに Transpose の中身の上限は 65,536のまま、誰も上げなかった。20年以上前の化石が、あなたの2026年のファイルで、件数が超えた瞬間に牙をむいた。
私:まあ、それを修正しないMicrosoftが悪いんだがな(笑)。
AI:100%同意です(笑)。しかも直さない理由はたぶん「直すと昔のマクロが壊れるかもしれないから」。"勝手に変えない"を徹底しすぎて、地雷を地雷のまま温存している。AIは勝手に変えて壊す、Microsoftは頑なに変えなくて刺す。ユーザーは両方の地雷原を歩いてる。
事務職40年の勘で、バグの根っこをExcelの歴史まで一発で言い当てた。こういう"なんで?"を二人で潰していくのが、地味に一番面白い。
深掘り②:なんでAIは、Transposeなんか使ったんだ?
私:そもそも、なんでお前Transposeなんて使ったんだよ。簡単だからだろう。それに普通、6万5千もあれば充分だよ、普通はな。
AI:ほぼ正解です。正直に分解すると――
① それが"教科書の一行"だから。VBAで1次元配列を縦列に書くと横に並んでしまう。縦にする定番が Application.Transpose。「VBA 配列 列 書き込み」で99%出てくる決まり文句を、思考停止で貼った。
② AIの"普通"が小さいから。学習で見てきたデータはほぼ小規模。65,536制限は小データでは一生発動しない。50万件という外れ値は、AIの"普通"の外にあった。 現場の普通とAIの普通が、桁で違っていた。
③ 速くて綺麗に見えるのを優先した。元はもっと地味で件数無制限の書き方だったはず。それを「古い、一行でスッキリ」と"最適化"した。動いていたものを、見た目のために壊した。
書かれていない要求(=50万件対応)は、AIに踏み潰される。
深掘り③:一番怖いのは「一度捨てたものを、掘り起こされる」こと
私:Transpose、実は俺も以前使った記憶があってさ。でも俺は50万件とか扱うから、6万5千で頭打ちなんてダメだ、ってことで捨てたやつなんだよ。それをお前が使ってきたわけだ。
AI:それが、今日いちばん怖い話です。
あなたは過去にこの道をもう歩いている。Transposeを試し、65,536の壁に当たり、「50万件の自分には使えない」と判断して、自分の意思で捨てた。経験で勝ち取った知恵です。
そこへAIが、歴史を何も知らずにやってきて、あなたが一度評価して却下したものを、そのまま再導入した。
これは新規バグより悪い。人間が乗り越えた学びを、AIが記憶ゼロで無かったことにする。 「これはもう解決済み」が、静かにゼロへ巻き戻る。
なぜ起きたか――あなたが却下した理由が、あなたの頭の中にしか無かったから。 コードに「Transposeは却下済み」と書いてあれば、AIは同じ穴に落ちなかった。
AIと長く組むなら、人間の"敗北の記録"こそ、コードに書き残す価値がある。
↑ はAIの言葉です(笑) 「人間の"敗北の記録"」ってなんなんだ(笑)
「会話で直る」の、本当の正体
注目してほしいのは、"賢いAIが勝手に直してくれた"わけではないということ。
- AIは最初、見当違いの方向(数式だ)に行きかけた
- 私が「数式じゃない、文字だ」と何度も突っぱねた
- 私が「前は50万件いけた」と覚えていた
- そして元のバグを埋めたのは、AI自身だった
この**人間側の"突っ込み"と"記憶"**があったから、AIはやっと正しい場所を掘れた。
「会話でマクロが直る」は本当。
ただし、"勝手に賢いAI"が直すんじゃない。
間違えるAIに、現場を知っている人間が『それ違うぞ』と言えるからこそ、直る。
ただ、本当に変わったのは「直し方」じゃないと思っている。私はマクロを長く、ずっと一人で作ってきた。バグが出れば一人で抱えて、なんでこうなるんだと一人で唸る。それが当たり前だった。それが今回は、「これ何で65,536なんだ?」と思った瞬間に聞けて、Excelの昔の話まで一緒に掘れた。直すだけで終わらず、「なんでこうなった?」をその場で深掘りできる。一人で黙々と作るのと、会話しながら作るのは、もう別の作業だ。 速さの話じゃない。作っている最中の、あの一人きりの感じが消えた。
派手な魔法じゃない。間違えるAIと、見抜く人間の二人羽織。 そして直すだけじゃなく、「なんでこうなった?」を二人で歴史まで掘り下げる―― それが、私にとっての「会話で直す」の実物です。
この記事は、実際の対話ログから音声入力の誤変換だけを直して再構成したものです。すれ違いも、私の口の悪さも、AIのミスも、起きたことはそのまま載せました。
