エクセルVBAの改行早見表や書式設定!厳選便利ワザ5選!

初心者

エクセルVBA改行ってどうやるの?手作業で改行したくない!

Dr.オフィス

VBAの改行はとっても簡単だよ!

エクセルVBAの改行は、改行したい場面によって使うものが異なります。

この記事を読むことで、エクセルVBAで改行したい場面に応じて、どの改行コードを使えばよいのか迷わなくなります。

エクセルVBAの改行ポイント
  1. セル内で改行したい場合はvbLf
  2. MsgBoxで改行したい場合はvbCrLf
  3. VBAでコードを途中で改行したい場合は _半角スペースとアンダーバーで改行

改行コードは一見難しく見えますが、大きく分けると3種類しかありません。

特に、セル内改行を自動化すれば、大量のデータや繰り返し作業でも同じルールで処理できるため、簡単に効率化ができるのでお勧めです。

また、改行以外にもマクロには便利な機能がたくさんありますので、以下の記事も併せてご参照ください。

エクセルのマクロ機能をマスター!初心者向け徹底理解ガイド

※本記事は『OS:Windows11』画像は『Excelのバージョン:Microsoft365』を用いて解説をしています。

\ Officeドクター読者限定・無料Q&A /

この記事の内容でわからないことや、今すぐ解決したいOfficeのお悩みはありませんか?
Officeドクターの中の人が、公式LINEで直接ご質問にお答えします!
下のボタンをタップして、表示された入力欄からそのまま送信してくださいね。

目次

エクセルVBAの改行は用途別に使い分けよう

エクセルVBAで改行するときは、改行を入れたい場所によって使うコードや記号が変わります。

エクセルVBAの改行には、大きく分けて以下の3つがあります。

  1. セル内に改行を入れる
  2. MsgBoxのメッセージを改行する
  3. VBAコードそのものを途中で改行する

この3つを整理することで、改行がスムーズに行えます。

用途別にどのコードを使えばよいのか、一緒に確認していきましょう。

エクセルVBAの用途別改行の早見表

エクセルVBAで改行したい場合は、以下の表を目安にしてください。

やりたいこと使うコード・記号
セル内で改行したいvbLf
MsgBoxで改行したいvbCrLf
VBAコードを途中で改行したい _半角スペースとアンダーバー
Dr.オフィス

MsgBoxとは、Windowsで使われるメッセージ表示のことだよ!

セル内やMsgBoxに表示される文字列を改行したい場合は、vbLfvbCrLfの改行コードを使います。

VBAコードを見やすくするためにコードを途中で改行したい場合は、改行コードではなく半角スペースとアンダーバーを使いましょう。

セル内改行のサンプルコード

セル内に改行を入れたい場合は、改行コードvbLfを使います。

Lfはラインフィードの頭文字をとったもので、カーソルを次の行へ送ることを意味します。

セル内改行のサンプルコードは以下のとおりです。

Public Sub セル内で改行する()

Range("A1").Value = "12345" & vbLf & "67890"

End Sub

このマクロを実行すると、次のようにセル内改行ができます。

セル内で改行されている
セル内で改行されている

vbLfは、セル内でAltEnterを押して改行する動きがVBAコードになったものです。

vbCrLfでも改行することができますが、上記の理由により、手作業の改行とマクロで実行した改行が混在した場合は、シート上にvbLfvbCrLfが混在することとなります。

後からセルの内容を改行位置で分割するときにずれが生じる恐れがあるため、セル内改行の場合は最初からvbLfに統一しておくと安心です。

なお、vbLfChr(10) と書くこともできます。

ただし、初めてエクセルVBAを扱う場合は、vbLfのほうが処理内容をイメージしやすいのでお勧めします。

MsgBoxで改行する場合のコード

MsgBox内の改行は、改行コードvbCrLfを使います。

vbCrLfはWindowsの標準コードです。

Crとはカーソルを文頭に戻すキャリッジリターンの頭文字、Lfはラインフィードの頭文字であり、vbCrLfは改行をCr+Lfで表しています。

Windowsのメッセージ表示であるMsgBoxでは、vbCrLfを使うのが基本です。

vbLfでも改行されることはありますが、初心者はvbCrLfで覚えることをお勧めします。

MsgBoxで改行するサンプルコードは以下のとおりです。

Public Sub メッセージボックスで改行する()

    MsgBox "12345" & vbCrLf & "67890"
    
End Sub

このマクロを実行すると、以下のように表示されます。

メッセージボックス内で改行
メッセージボックス内で改行

MsgBoxの文章が長くなる場合など、適度に改行することで、ユーザーが分かりやすいメッセージを作れます。

MsgBoxの改行の便利技や詳しい使い方について解説した記事があるので、そちらも参考にしてください。

エクセルVBAのコードを改行する方法

エクセルVBAコードが長くなった場合など、途中で改行することで見やすいコードを書くことができます。

VBAコードそのものを途中で改行したい場合は、 _半角スペースとアンダーバーを使います。

例えば以下のように記述します。

Public Sub コードの途中で改行する()

Range("A1").Value = "123" & vbLf & _
                    "456" & vbLf & _
                    "789" & vbLf & _
                    "0"
End Sub
コードの内容は同じ
コードの内容は同じ

こちらの例は上下とも同じ内容ですが、改行でコードが区切られている下のコードのほうが見やすいことが分かります。

この例では短いコードですが、さらに長いコードの場合は、1行ですべて書こうとすると横に長くなり、あとから見返したときに読みにくいです。

また、If文で複数条件を扱うときも、改行したほうが見やすい場合があります。

処理の内容を見やすくするために、コード内の改行を活用することをお勧めします。

エクセルVBAで改行できない・改行を消したいときの対処法

エクセルVBAで改行コードを入れても、思ったように改行されて見えないことがあります。

また、改行を消したいのにうまく消せないことも少なくありません。

ここでは、実務でありがちな「エクセルVBAでセル内改行がうまく扱えないときの対処法」を紹介します。

改行されて見えない場合はWrapTextを確認

エクセルVBAでセル内の改行をしたのに、見た目では改行されていないように見えることがあります。

その場合は、改行コードが入っていないのではなく、セルの折り返し表示設定が無効になっている可能性があります。

確実に改行を表示したい場合は、折り返し表示を有効にするコードを追加しましょう。

サンプルコードは以下のとおりです。

Public Sub セル内で改行して折り返しを有効化()

Range("A1").Value = "12345" & vbLf & "67890"

Range("A1").WrapText = True

End Sub

.WrapText = Trueで折り返し表示を有効にしています。

動きがイメージできない場合は、.WrapText = TrueをあえてFalseにしてマクロを実行してみましょう。

セル表示と数式バーの表示が異なる
セル表示と数式バーの表示が異なる

あえて.WrapText = Falseとした場合、セルの折り返し表示が無効となり、改行したのに見た目では改行されていない状態になります。

実務でコードを書く場合は、重複する箇所をWithでまとめて見やすいコードにしましょう。

また、行の高さが不十分である場合も、改行後の文字が見えにくくなることがあります。

行の高さを.EntireRow.AutoFitで自動調整できますので、必要に応じてコードに追加しましょう。

サンプルコードは以下のとおりです。

Public Sub セル内で改行して折り返しを有効化2()

With Range("A1")
    .Value = "12345" & vbLf & "67890"
    .WrapText = True
    .EntireRow.AutoFit
End With

End Sub

まずはWrapTextを確認し、必要に応じて行の高さを調整してみてください。

改行コードを削除するにはReplaceを使おう

セル内の改行を削除したい場合は、エクセルVBAのReplaceを使います。

Replaceとは、指定した文字列を別の文字列に置き換えるコードです。

Replaceで改行コードを空文字に置き換えれば、改行を削除できます。

例えば、A1セルに入力された内容のうち、改行を削除したものをB1セルに表示させる場合は、以下のようにコードを書きます。

Public Sub 改行コードを削除()

Dim text As String
    
    text = Range("A1").Value
    
    text = Replace(text, vbLf, "")
    
    Range("B1").Value = text

End Sub

このコードを実行すると、B1セルに以下のように表示されます。

改行が削除された状態でB1に表示された
改行が削除された状態でB1に表示された

実務では顧客リストの住所や、申込フォームの備考欄などのデータを整理する場合によく使われます。

実際には改行コードを空文字に置き換えるのではなく、「半角スペース」や「&」に置き換えて1行に整えるケースが多いです。

なお、改行コードがvbLfではなくvbCrLfを使っている場合は、text = Replace(text, vbLf, "")では置き換えができません。

その場合はvbLfvbCrLfに変えて置き換えましょう。

vbLfChr(10) は同じ文字として扱われます。

どちらも文字コード10の改行文字を表しているからです。

そのため、以下の2つのコードは、見た目の文字は異なりますが結果は同じとなります。

text = Replace(text, vbLf, "")
text = Replace(text, Chr(10), "")

同様に、vbCrLf Chr(13) & Chr(10) に相当します。

改行コードが混在している場合は統一してから処理しよう

エクセルVBAでは改行コードが複数種類あります。

そのため、担当者が変わったり、過去に複数人がマクロを修正していたりすると、同じコードの中でvbLfvbCrLfが混在していることがあります。

この状態で改行コードを別の文字に置き換えるReplaceを使っても、セルによって結果がバラバラになってしまいます。

例えば以下のコードの結果を確認してみましょう。

Public Sub 改行コードを削除した結果がバラバラになる例()

Dim text As String
Dim i As Integer

Range("A1").Value = "あいう" & vbLf & "えお"

Range("A2").Value = "かきく" & vbCrLf & "けこ"

Range("A3").Value = "さしす" & vbLf & "せそ"

For i = 1 To 3
    
    text = Range("A" & i).Value
    
    text = Replace(text, vbLf, "")
    
    Range("B" & i).Value = text

Next i

End Sub

こちらは、A2セルに入力する改行コードがvbCrLf、A1とA3はvbLfとなっている状態で、繰り返し処理を使ってvbLfを空白文字に置き換え、B1~B3セルに結果を表示させています。

このコードを実行すると、結果は以下になります。

B2の改行が残っている
B2の改行が残っている

B2セルはvbCrLfが空白文字に置き換えられないため、改行が残された状態で表示されています。

その場合は、先に改行コードを統一してから処理をすると、マクロが扱いやすくなります。

text = Replace(text, vbCrLf, vbLf)を追加し、vbCrLfはすべてvbLfに置き換えたうえで空白文字に置き換えましょう。

Public Sub 改行コードを削除した結果がバラバラになる例を改善()

Dim text As String
Dim i As Integer

Range("A1").Value = "あいう" & vbLf & "えお"

Range("A2").Value = "かきく" & vbCrLf & "けこ"

Range("A3").Value = "さしす" & vbLf & "せそ"

For i = 1 To 3
    
    text = Range("A" & i).Value
    
    text = Replace(text, vbCrLf, vbLf)  '★追加
    
    text = Replace(text, vbLf, "")
    
    Range("B" & i).Value = text

Next i

End Sub

このコードを実行した結果は以下となります。

改行がなくなった
改行がなくなった

B2セルの改行コードがなくなったことを確認しましょう。

このように、改行コードが混在していると、コード自体は間違っていなくても、結果が想定どおりにならないことがあります。

特に、他の人が作ったマクロを引き継いだ場合は、vbLfvbCrLfが混在している可能性があるものとして、改行コードを統一する手順を追加しましょう。

マクロで効率よく印刷しよう!PDF出力もOK!

ただいま、記事を作成中です。

エクセルVBAで書式設定を自動化する方法

ただいま、記事を作成中です。

パスワード解除をエクセルVBAで扱うには?

ただいま、記事を作成中です。

VBAを使ってエクセルに罫線を引こう!

ただいま、記事を作成中です。

エクセルVBAの改行に関するQ&A

VBAの改行コードは何を使えばいいですか?

セル内で改行したい場合は、基本的に vbLf を使うことをお勧めします。

また、Windowsの場合、MsgBoxで表示するメッセージを改行したい場合は、vbCrLf を使うのが一般的です。

VBAのコード自体を途中で改行する場合は、 _半角スペースとアンダーバーを改行前の位置に挿入します。

CSVやテキストファイルの改行コードで注意することはありますか?

CSVやテキストファイルを扱う場合は、改行コードが vbLfvbCrLf のどちらが使われているか確認する必要があります。

先に改行コードをvbLf に統一してから処理すると安心です。

なお、エクセルVBAでCSVファイルを扱う際、改行コードが文字化けの原因となることがあります。

詳しい対処法は以下の記事をご確認ください。

エクセルVBAの改行は出力先に合わせて使い分けよう!

エクセルVBAで改行を行うときの基本と、そのほかVBAで知っておきたい便利技について解説しました。

エクセルVBAの改行は、「改行を入れる場所によってコードを使い分けること」「他の人が作ったマクロは改行コードが混在している場合があるので、コードを統一してから処理をすること」が特に大事です。

それではおさらいです。

おさらい
  1. セル内で改行したい場合はvbLfを使う
  2. MsgBoxで改行したい場合はvbCrLfを使う
  3. VBAでコードを途中で改行したい場合は _半角スペースとアンダーバーを使う

エクセルVBAの改行は、やりたいことが決まっていればあとはコードを選ぶだけです。

使い分けに迷ったときは、いつでもこの記事を見返していただければ幸いです。

エクセルVBAでは、改行のほかにも日々の作業を効率化できる便利な機能があります。

意外と分からない「マクロ機能」を以下の記事で理解して、より効率的なマクロを作成しましょう!

エクセルのマクロ機能をマスター!初心者向け徹底理解ガイド

よかったらシェアしてね!
  • URLをコピーしました!
目次