TL;DR —
WrapText = Trueは、長いテキストが次のセルへあふれる代わりに、列幅の 内側 で複数行 に折り返されるよう Excel に指示します。セルの形を作り替えますが、行が 背高く なるのは、行の高さが まだ自動のときだけです。マクロ(や結合セル)が明示的なRowHeightを固定していると、テキストは見え ないまま折り返され、切れたままになります。折り返したテキストを実際に見せるには三段階の手順を踏みま す。固定した列幅を設定し、WrapTextをオンにし、それからRows.AutoFitを呼んで行を新しい形に伸ば します。
' 折り返しはセルの形を作り替える。見せるには行の高さが自由に伸びられること。
Columns("C").ColumnWidth = 40 ' 1) 折り返す相手となる固定幅を与える
Range("C2:C100").WrapText = True ' 2) 長いテキストを複数行に折り返す
Range("C2:C100").EntireRow.AutoFit ' 3) 折り返したテキストに合わせて行を伸ばす
' 元に戻す:
Range("C2:C100").WrapText = False
WrapText は、ホームタブの 「折り返して全体を表示する」 ボタンのコード上の双子です。これがないと、
長いラベルは右へ走り去り、隣のセルに何か入った瞬間に隠れてしまいます。あると、同じラベルは二、三行に
折りたたまれ、自分の列の中に収まります。そこまではボタンから明らかです。ボタンが隠しているもの——そし
てそれを自動化しようとするあらゆるマクロをつまずかせるもの——は、折り返しが 行の高さ と絡み合ってい
て、読める出力を得るにはその二つをセットで扱わなければならない、という点です。
この記事で学べること
- 考え方の軸——
WrapTextはセルの形を作り替えるのであって、テキストは変えない - 最も大事なルール——折り返しが行を伸ばすのは、高さが自動のときだけ
- 折り返したテキストを実際に見せる三段階の手順(幅、折り返し、AutoFit)
WrapTextとハードな改行(Chr(10)/ Alt+Enter)の違いWrapTextを読み戻す、そしてなぜ混在した範囲はNullを返すのか- どの列を折り返し、どの列はそのままにするか
考え方の軸:テキストを編集するのではなく、セルの形を作り替える
折り返しをオンにしても、セルの中の値には触れません。「North America regional summary」は前も後も同じ
文字列で、変わるのは Excel が どうレイアウトするか だけです。オフなら、文字列は隣がふさぐまで右へあ
ふれる一行で描かれます。オンなら、Excel はそれを列幅に収まる行へ折りたたみ、下へ積み上げます。
WrapText は、テキストが住む 箱の形 を——より狭く、より背高く——変えるものだと考えてください。テキス
ト自体ではありません。
その形の変化こそが要点で、初心者が見落とす一点を説明します。幅の広い箱は、すべての行を見せるために背 の高い行を必要とする、ということです。折り返しと行の高さは、同じ考えの二つの半分です。片方だけを変えて もう片方を無視したら、結果がまともに見えると期待することはできません。
最も大事なルール:折り返しが行を伸ばすのは高さが自由なときだけ
ほとんどの「WrapText を設定したのに折り返らない」という報告の裏には、この間違いがあります。WrapText = True
はテキストを内部で折りたたみますが、行が 背高く なってその余分な行を見せるのは、行の高さが 自動
のときだけです。もし何かがすでに高さを固定していると、Excel はその高さを保ち、折り返した行を視界の外
へ切り取ってしまいます。
Rows(2).RowHeight = 15 ' マクロが先に高さを固定した...
Range("C2").WrapText = True ' テキストは内部で折り返すが、行は 15pt のまま - 切れる
高さを固定しがちなものは二つです。RowHeight に数値を設定したマクロと——そしてこっそりやるほう——
結合セル です。Rows.AutoFit は結合セルを含む行のリサイズを拒むからです(AutoFit
を参照)。対処は、高さを自動のままにして AutoFit に測らせるか、どうしても結合セルが必要なら RowHeight
を自分で計算して設定することです。覚えておくべきルールはこうです。WrapText = True はセルの形を作り替
えますが、行を十分に背高くして見せるには、まだ何かがそれをしなければなりません。
実際に効く三段階の手順
折り返しと高さは結びついているので、読める出力を得るには順序のある三段階の動きが必要で——順序が肝心で す。
Columns("C").ColumnWidth = 40 ' 1) 固定幅 - テキストは折り返す相手を必要とする
Range("C2:C100").WrapText = True ' 2) 折り返しをオンにする
Range("C2:C100").EntireRow.AutoFit ' 3) 新しい折り返しの形に合わせて行を伸ばす
一段階目こそ、人が飛ばす部分です。行の AutoFit が高さを計算できるのは、列幅が確定してからです——テ
キストは、何行必要かを決める前に、自分が どれだけの幅 を許されているかを知らなければなりません。もし
列幅 と 行の高さの両方を AutoFit すると、二つが競合します。列を広げるとテキストは少ない行に収まり、
それが高さを変え、不安定な結果になります。だから先に幅を固定し(それを AutoFit しない)、次に折り返し、
それから高さを AutoFit します。この順序で三つをやれば、出力は毎回正しくなります。
WrapText とハードな改行
テキストが複数行になる道は二つあり、混同すると混乱を招きます。WrapText は ソフト な、幅に駆動され
る折り返しです。Excel は列幅にもとづいてどこで折るかを決め、列をリサイズすると折り位置が動きます。
ハード な改行は、あなたが自分で文字列に入れる文字——VBA では Chr(10)、手作業なら Alt+Enter——で、幅
に関係なくその正確な位置で改行を強制します。
Range("C2").Value = "Line one" & Chr(10) & "Line two" ' テキスト内のハードな改行
Range("C2").WrapText = True ' ハードな改行を「見せる」ために必要
落とし穴は、ハードな Chr(10) の改行でさえ、WrapText がオンのときにしか二行として 表示 されないこ
とです——さもないと Excel は小さな四角のグリフを見せるか、続けて表示してしまいます。だから二つは協力し
ます。特定の場所で改行したいとき(住所ブロック、値の上に置くラベル)は Chr(10) を使い、長い文章をた
だ収まるよう折りたたみたいときは素の WrapText に頼りましょう。
WrapText を読み戻す、そして混在範囲の Null
WrapText はセル単位のプロパティです。単一のセルで読めば True か False が返ります。一部の セル
が折り返し、一部は折り返さない範囲で読むと、Excel は一つの答えを出せないので Null を返します。
Debug.Print Range("C2").WrapText ' True または False
Debug.Print Range("C2:C100").WrapText ' 範囲が混在していれば Null
その Null はエラーではありません——範囲が不揃いだと Excel が教えているのです。範囲が 一様に 折り返
されているかを調べたいなら、まず IsNull(rng.WrapText) をチェックします。Null でない結果は、すべての
セルが一致していることを意味します。実際には読み戻すことはめったにありません——列全体に一度で 設定 す
れば、範囲は一様に保たれ、この問いそのものを避けられます。
どの列を折り返すか
折り返しが値打ちを発揮するのは テキスト の列です——説明、コメント、住所、長いラベル——折りたたむこと
で列を狭く保ち、シートを読みやすくします。数値 の列ではたいてい誤りです。折り返した数値は読みやすく
なるどころか読みにくくなり、数値がそれを必要とすることはめったにありません。効率のよい習慣は、
WrapText を列全体に一文で設定し(Columns("C").WrapText = True)、セルごとにループしないことです。そ
れからブロック全体の行を一度だけ AutoFit します。ループでセル単位に設定するのは、遅いうえに、先ほどの
混在範囲の Null のよくある発生源でもあります。列ごとに決め、一度で適用し、一度だけ AutoFit しましょ
う。
ExcelMaster の活用
Wrap Text は一行で済みそうに見えて、実は印刷されるまで誰も気づかない切れた出力を生む設定です——行の高
さが先に固定されていた、列幅が固定されていなかったので AutoFit が誤った形を測った、あるいはハードな
Chr(10) の改行が折り返しをオフにしていたせいで表示されなかった。
ExcelMaster には、結果をそのまま
言葉で伝えられます——「説明列を折り返して行を伸ばして」「このセルに住所を三行で入れて」——すると正しい
順序で手順を書きます。まず固定の列幅、次に列全体への WrapText、それから Rows.AutoFit、ハードな改行
を頼んだ場所には Chr(10) を置き、それが表示されるよう折り返しをオンにします。行が伸びるのを妨げる結
合セルには注意を促します。ブックとコードはあなたの手元に残ります。
よくある質問
VBA の WrapText が効かないのはなぜ?
テキストはほぼ確実に折り返されています——ただ 表示 されていないだけで、行の高さが固定されているから
です。行の高さが折り返した行を見せるよう伸びるのは、それが自動のときだけです。高さはそのままにして、
WrapText = True を設定したあとに Rows.AutoFit を呼び、テキストが折り返す相手を持てるよう、まず列に
固定幅があることを確かめます。セルが結合されている場合、行の AutoFit はまったくリサイズしません——
RowHeight を明示的に設定します。
VBA でテキストを折り返して行の高さを AutoFit するには?
三段階を順に踏みます。固定の列幅を設定し(Columns("C").ColumnWidth = 40)、折り返しをオンにし
(Range("C2:C100").WrapText = True)、それから行を AutoFit します(Range("C2:C100").EntireRow.AutoFit)。
まず幅を固定するのが肝心です——行の AutoFit が必要な高さを測れるのは、テキストが許された幅を知ってから
です。
VBA で折り返し表示をオフにするには?
プロパティを False に設定します——Range("C2:C100").WrapText = False。折り返したテキストに合わせて行
が伸びていた場合、行はひとりでに縮んで戻りません——あとでもう一度 Rows.AutoFit を呼ぶか、明示的な
RowHeight を設定して、一行分の高さに戻します。
WrapText と Chr(10) の改行の違いは?
WrapText はソフトな、幅に駆動される折り返しです——Excel が列幅にもとづいてどこで折るかを選び、リサイ
ズすると折り位置が動きます。Chr(10)(Alt+Enter と同じ)は、文字列の正確な位置に置くハードな改行です。
ハードな改行が複数行として 表示 されるのは WrapText も同時にオンのときだけなので、二つはたいてい一
緒に使われます。
Range.WrapText が Null を返すのはなぜ?
WrapText がセル単位のプロパティで、範囲が混在しているからです——一部のセルは折り返し、一部は折り返さ
ないので、Excel は単一の True か False を返せず、代わりに Null を返します。はっきりした答えが欲し
いなら単一のセルで読むか、範囲全体が一様かを調べるには IsNull(rng.WrapText) をテストします。列全体に
一度で WrapText を設定すれば、一貫した状態に保てます。
検証環境
検証環境: Excel 365 (Windows 11), VBA 7.1 — 最終確認 2026-09-10。
関連ガイド: VBA AutoFit · VBA ウィンドウ枠の固定 · VBA 列幅と行の高さ · VBA セルの結合 · VBA Font
