🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel VBA の WrapText — 長いテキストを折り返して収め、行を一緒に伸ばす

|

Excel VBA の WrapText — 長いテキストを折り返して収め、行を一緒に伸ばす

TL;DRWrapText = 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 はセル単位のプロパティです。単一のセルで読めば TrueFalse が返ります。一部の セル が折り返し、一部は折り返さない範囲で読むと、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 は単一の TrueFalse を返せず、代わりに Null を返します。はっきりした答えが欲し いなら単一のセルで読むか、範囲全体が一様かを調べるには IsNull(rng.WrapText) をテストします。列全体に 一度で WrapText を設定すれば、一貫した状態に保てます。

検証環境

検証環境: Excel 365 (Windows 11), VBA 7.1 — 最終確認 2026-09-10。

関連ガイド: VBA AutoFit · VBA ウィンドウ枠の固定 · VBA 列幅と行の高さ · VBA セルの結合 · VBA Font