自分のコードに赤面したこと、ありますか?
ある日、チームメンバーのVBAコードを見たときのことです。
整ったインデント、わかりやすい変数名、コメントの置き方にうっとり。
「美しい…コードって、芸術なんだ…」
完全に見惚れてしまいました。
ところがその後、自分の書いたマクロを見返してみて絶句。
全角スペースは迷子、無名の変数たちが暴れ回り、Selectの大行列が画面を占拠。
「えっ、これ書いたの…私?」
あまりの読みづらさに、時空がゆがむかと思いました。
まさかExcelのVBAで“自分の黒歴史”を召喚する日が来るとは…。
でも、そんな私でも少しずつ改善してきた今なら言えます。
コードの読みやすさ・速さ・柔軟さは、あとからいくらでも育てられます。
この記事では、かつての私と同じように「なんとなく書いてきたけど、このままでいいのかな」と感じているVBAユーザーさんに向けて、“読みにくい・遅い・動きにくいコード”を卒業する改善パターン集をまとめました。
心の中で「あるある」とつぶやきながら、ゆるっと読み進めてもらえたら嬉しいです!
読みにくいコードあるあるとその正体
VBAを始めたばかりの頃、私はこう思っていました。
「動けばOKでしょ?」
……はい、未来の自分が苦しむとは、露とも思わずに。
書いてるときは最高にノッてるので、変数名は“aaa”でも“temp1”でも気にしない。
コメントも書かず、処理の流れは“脳内メモリ”にだけ保存。
何度も登場する長ったらしい Worksheets(“報告用”).Range(“B2”) を、毎回手打ち。
結果、自分のコードなのに3日後にはまったく読めません。
タイムカプセルから出てきた謎の儀式、みたいな気持ちになります。
なぜコードは“読みにくくなる”のか?
読みにくさの正体は、だいたいこんなクセから生まれます:
- 同じ参照を何度も書いていて、視線が混乱する
- 変数の名前が意味不明(例:a、aaa、結果1)
- コメントが一切ない or あっても内容がふんわりすぎる
- インデントがズレていて構造が見えない
これらが1つでも当てはまると、処理の意図が見えにくくなり、保守も応用もつらくなってきます。
読みやすいコードは未来の自分への思いやり
美しいコードって、ただ整ってるだけじゃなくて、「なぜそう書いたのか」が自然と伝わるんですよね。
「この変数って、集計結果なんだな」とか、「ここで集計範囲を限定してるんだな」とか。
それがわかると、読む側も安心するし、書いた自分もちょっと誇らしくなるんです。
この章では、そんな「読みやすさ」のために、まず直したいクセやパターンをBefore→After形式で紹介していきます。
コードにちょっとだけ優しくなると、未来のあなたがきっと感謝してくれますよ。
【読みにくい編】コードのクセに気づいたら、卒業のチャンスです
さて、ここからは具体的な「読みにくいコードあるある」を、Before→After形式で見ていきます。
最初に言っておきたいのは、「みんな通る道なので安心してください」ということ。
私も最初は、変数名に“x”と“y”を連発し、書き上げたコードを未来の自分に託して爆誕した「誰も読めないマクロ」を量産しておりました。
ではさっそくいきましょう!
パターン①|同じ参照を何度も書く呪文コード
Worksheets("月次").Range("B2").Value = "合計"
Worksheets("月次").Range("B3").Value = "件数"
Worksheets("月次").Range("B4").Value = "平均"
──“Worksheets(“月次”)”の呪文、3連続唱えられてますね。
改善案:With構文でスッキリまとめる
With Worksheets("月次")
.Range("B2").Value = "合計"
.Range("B3").Value = "件数"
.Range("B4").Value = "平均"
End With
見た目がシュッとしましたし、「この3行、同じシートを操作してるんだな」とひと目でわかります。
読み手にとっての親切さ=やさしさです。
パターン②|変数名が“謎解き”レベル
Dim a As Double
Dim b As Double
a = Cells(2, 3).Value
b = a * 1.1
読んでる側:「a…って、なに? bって誰?」
改善案:意味が分かる名前にしてあげる
Dim 基本金額 As Double
Dim 税込金額 As Double
基本金額 = Cells(2, 3).Value
税込金額 = 基本金額 * 1.1
何をしているのかが“パッと”わかるので、未来の自分にもやさしい!
変数名は「短く」よりも「意味が通じること」が大事です。
パターン③|コメントがない、または“謎ポエム”
' やるべきことをやる
i = i + 1
改善案:処理の意図を“ひとこと”で伝える
' 行数カウントを1行進める
i = i + 1
“コードを説明する”のではなく、“なぜそれをしているか”を添えるとベスト。
パターン④|インデントが崩壊していて構造が見えない
If 条件 Then
MsgBox "OK"
Else
MsgBox "NG"
End If
コードの階層が分からないと、読み手は地図なしで迷子になります。
改善案:インデントでコードに“地図”をつける
If 条件 Then
MsgBox "OK"
Else
MsgBox "NG"
End If
VBAエディターにも自動整形ツールがあるので、こまめに整えておくのがおすすめです!
まとめ:読みにくさの9割は“気づけば直せるクセ”
ここで紹介した内容は、機能とは直接関係ないけど、読んだ瞬間の印象が大違いになります。
「なんかこのコード、安心する」 そんな第一印象を与えるマクロって、それだけで価値があります。
次の章では、“読みやすい”を超えて“速くなる”ための改善パターンを見ていきましょう。
自作マクロにちょっとだけ魔法をかける時間です。
【遅い編】ありがちな“時間を無駄にする”書き方
読みやすいコードになってきたら、次は「速さ」もほしくなってくるものです。
私の場合、「自分のコードのせいで仕事が進まない」と気づいたときのダメージは大きかったです。
特に処理ボタンを押してからExcelが固まり、しばらく“ぐるぐるマークととアイコンタクト”してると、精神にも悪影響が…。
でも、よくよく見直すと「無駄が多かった」だけなんですよね。
この章では、処理速度をグンと上げるための“ありがちなNGパターンと改善策”をご紹介します!
パターン①|1セルずつ丁寧すぎるループ処理
For i = 1 To 10000
Cells(i, 1).Value = Cells(i, 1).Value * 2
Next i
一見まじめで一生懸命。でも、これではExcelとVBAの間で1万回おつかいに出てる状態です。何度も処理結果をやり取りしていると、当然ながらめちゃくちゃ遅い…。
改善策:配列にまとめて処理しよう!
Dim data As Variant
Dim i As Long
data = Range("A1:A10000").Value
For i = 1 To UBound(data, 1)
data(i, 1) = data(i, 1) * 2
Next i
Range("A1:A10000").Value = data
“一括で読み込んで一括で返す”ことで、処理時間は数十秒→数秒に。体感速度が劇的に変わります!
パターン②|画面描画(ScreenUpdating)が常にオン
' 処理だけ書いてるつもりだけど
Cells(1, 1).Value = "スタート"
For i = 1 To 10000
Cells(i, 2).Value = i
Next i
実はVBAは、書き込みのたびに画面を律儀に更新しようとしてくれます。
えらい。でも、今は無駄に親切すぎる…。
改善策:最初に止めて、最後に戻す!
Application.ScreenUpdating = False
' 処理いろいろ
' …
Application.ScreenUpdating = True
これだけで、目に見えてスピードアップするケースもあります!
パターン③|計算モードが自動のまま
数式が多いシートでは、セルの変更ごとに全体の再計算が走ります。
マクロ中にこれが発生すると、Excelが「計算…してるからちょっと待って」状態に。
改善策:処理中だけ手動モードに切り替え
Application.Calculation = xlCalculationManual
' 処理いろいろ
Application.Calculation = xlCalculationAutomatic
手動モードにすることで、「あとでまとめて計算していいよ〜」というスタンスに。
速さがかなり違ってきます。
パターン④|やたらとSelect・Activateを使う
Range("A1").Select
Selection.Value = "開始"
初心者の頃は「とりあえず選択してから操作する」流れが安心感ありましたが、これが処理の大きな足かせになります。
改善策:直接指定で即書き込み!
Range("A1").Value = "開始"
たったこれだけでも、処理の無駄なラウンドトリップを減らせます。
“寄り道せずに目的地へ”が高速化の基本です。
まとめ:スピードは書き方で生まれる!
処理が遅い=VBAが遅い、ではありません。
ムダなループ、無駄な更新、無駄な選択が蓄積して、Excelが疲弊してるだけなんです。
この章で紹介した改善策をひとつでも取り入れると、「えっ、もう終わったの?」という快適さが待ってます。
次章では、“速い”だけじゃなく“壊れにくく・使いまわしやすい”コードを書くためのテクニックをご紹介します!
【動きにくい編】すぐ壊れる・応用できないコードは卒業しよう
「このマクロ、ちょっと内容変えて使いたいな」と思って開いてみたら──
「なにこのシート名直打ち!ファイルパス固定!変数名なに!?…怖っ!!」 → そっと閉じました。
過去の自分と向き合う勇気が必要な瞬間です。
ここでは、「修正しようとしただけなのに、全体が崩壊しそうなマクロ」の特徴を紹介します。
小さな書き方のクセを見直すだけで、再利用しやすく・壊れにくいコードにグッと近づきます!
パターン①|ファイル名・シート名のハードコーディング
Workbooks("月報2024年6月.xlsx").Worksheets("まとめ").Range("A1").Value = "完了"
これ、1文字でも間違ったらアウトです。
しかも名前が変わるたびにコードを書き換える地獄…まるで“マクロの人質”。
改善案:変数 or ループで柔軟に!
Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
Set ws = wb.Sheets("まとめ")
ws.Range("A1").Value = "完了"
ファイルをまたぐ場合は Workbooks.Open などで、エラー対策と存在確認を加えるのも大事ですね。
パターン②|コピペ前提の“ベタ書き”構造
Range("A2").Value = Sheets("入力1").Range("B2").Value
Range("A3").Value = Sheets("入力2").Range("B2").Value
Range("A4").Value = Sheets("入力3").Range("B2").Value
──この感じ、見覚えある人も多いのでは?
3つ以上の入力Xが出てきた時点で、腕が疲れます。
改善案:ループや配列でスケーラブルに!
Dim i As Integer
For i = 1 To 3
Sheets("集計").Cells(i + 1, 1).Value = Sheets("入力" & i).Range("B2").Value
Next i
これで10シートでも100シートでも対応できます!
未来のコピー&ペースト地獄から解放されましょう。
パターン③|変数の宣言がなかったり、型が曖昧
i = 1
total = Cells(i, 1)
- totalってString?Double?いつ宣言された?
- 未宣言の変数がいると、タイポでも気づかずエラーにならないという恐怖が。
改善案:Option Explicit + 変数の型宣言は基本のキ!
Option Explicit
Dim i As Long
Dim total As Double
「ちょっと面倒だな…」と思うかもしれませんが、型を明示するだけで思わぬバグを防げます。
パターン④|“一発動作しか想定してない”コード構造
' ファイルパスを入力してね♪
filePath = InputBox("ファイルのパスを入力してください")
Workbooks.Open filePath
やってることは間違ってないですが、「入力ミス」「キャンセル」「ファイルが存在しない」など、想定外が来たらすぐエラーで落ちる構造です。
改善案:事前チェック&存在確認を入れて安心設計
If filePath = "" Then
MsgBox "処理を中止しました。"
Exit Sub
End If
If Dir(filePath) = "" Then
MsgBox "指定したファイルが見つかりませんでした。"
Exit Sub
End If
こういった“落ちない仕組み”を組み込んでおくと、本番運用にも強いコードになります。
パターン⑤|処理の流れが長くて1か所にまとまってない
' 処理A(10行)
' 処理B(15行)
' 処理C(20行)
' 処理D(……あれ、どこだっけ)
コードが1本の“のれん”みたいになっていると、部分的な再利用や修正が地獄になります。
改善案:処理ごとに「Sub」や「Function」に分けて再利用性UP!
Sub 全体の流れ()
Call データ読み込み
Call 集計処理
Call 出力処理
End Sub
こうしておけば、「今回は集計だけしたい」などの応用も自由自在。 大規模化しても迷子にならないコードに成長します!
仕上げに|動きやすさ=“怖くないコード”
動きにくいコードの特徴は、「触るのが怖い」「ちょっと変えると壊れそう」と思わせてしまうことです。
でも、ここまで見直せば構造がシンプルで壊れにくい“安心マクロ”に進化しています。
「このコード、私じゃなくても読めるし直せるな〜」と思えたら、それはもう大きな成長の証です。
まとめ|美しいコードは未来の自分へのラブレター
この記事をここまで読んでくださったあなたなら、きっともう気づいているはずです。
「動けばOK」だったはずのコードが、 「速くて読みやすくて、しかも他の人にも使ってもらえるかも?」と思えるようになること。
それって、ちょっとだけ誇らしくありませんか?
書きっぱなしから、読み返したくなるコードへ
- 1行ずつ処理していたところを配列で一括処理に
- 呪文のような同一参照を With構文で整理
- 変数名やコメントで意図が“読める”ように
- ちょっとした書き方のクセを見直して、“速くて強いコード”に
最初は「クセ」として染みついていたものでも、気づいて改善すれば一気に見違えます。
かっこいいコード”は、実はとっても実用的
見た目が整ったコードは、ただの自己満足ではありません。
- 他の人が見ても分かりやすい
- バグの原因を早く見つけられる
- 数か月後に自分が読んでもちゃんと理解できる
- 改修・応用がラクになる(コピペ地獄も回避!)
つまり、「美しいコード=思いやりのある道具」なんですよね。
コード改善は“旅”みたいなもの
最初に書いたコードは拙くても、 手直しして、見直して、ちょっとずつ「わかりやすく・動きやすく」なっていく。
そのたびに、「あ、あのときより私、成長してるな」と実感できる瞬間があります。
コードって、書いた分だけちゃんと経験値になるんですね。
そして何より、今日の改善は、明日の自分を助けてくれます。
これからは“どう書くか”を楽しんでみよう
マクロはただの業務ツールじゃなく、 「自分だけの仕組みをつくれる、小さなプログラム言語」です。
きれいに書く、速く書く、柔軟に書く。
そのすべては、あなた自身の考え方や工夫が反映された“作品”。
そう思えば、少しだけコードを書くのが楽しくなるかもしれませんね。
最後に|“過去の自分に助けられる日”が来る
私自身、かつての「なんとか動けばいいコード」を書いていた時期があります。
でも少しずつ書き方を見直し始めてから、「未来の自分が読む前提」で組み立てるようになって、 気がついたらマクロを書くのがちょっと楽しくなっていました。
美しいコードは、未来のあなたを助けてくれます。
そしてきっと、誰かの業務や仕事の“余白”も増やしてくれるはずです。
あなたが次に書くVBAコードが、「読めて、速くて、気持ちいい」1本になりますように!

「読みにくい」「遅い」「なんか壊れそう」── そんな過去のマクロにひとつずつ向き合ってきた体験を、この記事に詰め込みました。
もしあなたにも、 「あ~、これ自分のことかも…」と感じたところがあれば、 それはすでに“改善できる目”を持っている証拠だと思います。
今日の小さなコード改善が、 明日のあなたやチームの業務を、ちょっとだけ軽やかにしてくれますように。
そしていつか、自分の書いたマクロに 「うん、いい仕事してるな」って言える日が来ますように。
コメント