Excel VBAでマクロを組んでいたある日、ふとした瞬間にコード入力が止まりました。 「え!? なんで途中から何も打てないの!?」と焦る私。実はそれ、VBAにおける1行1024文字制限が原因だったのです。
何が起きたのか?
関数式をセルに入力するマクロを書いていたとき、長い長い1行を書いていました。途中で入力できなくなり(キーボードで入力しても反応しない)ました。慌てて調べてみると、VBAの仕様として1行の文字数は最大1023文字までと定められていることが分かりました。(テキストエディタでカウントしたら1024文字な気がしたけど、そこは置いといて。公式では物理的文字数1023文字となっております。)
この仕様については、Microsoft公式のVBAリファレンスでも確認できます:
解決方法:行を分割して書くには「 _ 」がカギ
では、1023文字以上のコードはどうやって書けばいいの? そこで使えるのが行継続文字「 _ 」です!このアンダースコアを使えば、長い文字数の1行であっても、1行のコードを複数行に分割して記述することが可能になります。
例えば:
MsgBox "メッセージは長いので、" & _
"複数行に分けて書いてみます!" & _
"アンダースコアを使えばこんなふうに分の分割が可能です!"とか、値を計算して式に代入するものも分割できます。
total = 100 * 1.05 + _
200 * 1.08 + _
300 * 1.1補足 ※上記コード例は実際には1024文字には達していませんが、「分割して書く」イメージを分かりやすく伝えるための参考例として。
文字数制限を超えなくても使える!
上記例のように、普段使いにも個人的にはオススメです。 コードが1行で長すぎると、横スクロールが必要になり読みにくくなるという問題も発生します。見やすさのためにアンダースコアでコードの行を分割するのは非常に有効です!
さいごに
今回のトラブルをきっかけに、VBAの仕様やちょっとした工夫の大切さに改めて気づかされました。
- VBAには「1行=1023文字まで」という制限がある
- アンダースコア「 _ 」を使えば複数行に分割できて、制限を回避できる
- 制限を回避するだけでなく、コードの視認性・保守性を高めるためにも活用できる!
コードは「動けばそれでいい」ではなく、「後から見て分かりやすい」ことがとても重要。 ちょっとした工夫が、予期せぬトラブルの予防や作業効率アップにつながることを今回改めて学びました。
それでは、また!


