「アフィリエイト広告を利用しています」

Excel VBAで折り返し表示を5行ごとに別セルへ分割する方法を解説

スポンサードリンク
スポンサードリンク

Excelで長文を扱っていると、1つのセルに入力された内容を表示上の5行ごとに分けたい場面があります。

セル内改行だけであれば比較的対応しやすいものの、「折り返して全体を表示する」が有効になっているセルでは、見た目では複数行に分かれていても内部には改行コードが存在しないため、思うように分割できず困ることがあります。

文字数で区切る方法では表示位置がずれてしまうこともあり、データ量や文字数が毎回変わる場合ほど、どの方法を選べばよいのか迷いやすくなります。

表示状態を利用した考え方を理解しておけば、見た目を基準にした分割処理を作りやすくなり、帳票や一覧表のレイアウトも整えやすくなります。

仕組みを知っておくだけでも、文字列操作だけでは対応できない理由が分かり、状況に合った方法を選びやすくなるでしょう。

この記事でわかること

  • セル内改行と自動折り返しの違い
  • 表示上の5行ごとに分割する考え方
  • セルの高さを利用したVBAの仕組み
  • 処理がうまくいかない場合の確認ポイント
スポンサーリンク

【楽天お買い物マラソン】17日(日)1:59まで開催中!

楽天お買い物マラソンは
もらえるポイントが最大11倍になる
ビックイベント!

ポイントアップや割引クーポン
期間限定イベントなど
普段よりもお得に買い物できるチャンスです。

24時間限定で半額以下になる商品も!
忘れないようにチェックしてくださいね!

楽天24時間限定タイムセール商品をチェックする▶▶
\17日まで限定!100~2000円OFFクーポンも配布中/

最大2000円OFFのクーポン受け取りページはこちら▶▶

Excelで折り返し表示を5行ごとに分割したいケースとは

1つのセルに長い文章が入っていて、途中に手動の改行が含まれているうえ、列幅によって自動的な折り返しも発生している場合、見た目では複数行に分かれていても内部の文字列は1つにつながっているため、単純な文字数や改行コードだけでは思った位置で分割できません。

とくに、表示上の5行ごとにA1、B1、C1のように横方向へ分けたい場合は、文字列そのものではなく、セルの幅や高さを含めた表示状態を基準に考える必要があります。

元データの長さや行数が毎回変わる場合でも、どこで区切るかを固定文字数ではなく表示結果から判定できれば、データ内容に左右されにくい処理へ近づけられます。

セル内改行と折り返し表示の違い

Excelでは、セル内で見た目が2行以上になっていても、その原因が手動改行なのか、自動折り返しなのかによって内部の扱いが異なります。

Alt+Enterなどで入れたセル内改行には改行コードが含まれているため、VBAのSplit関数などを使えば、その位置を目印に文字列を分けることができます。

一方で「折り返して全体を表示する」によって自動的に次の行へ送られた部分には、文字列の中へ新しい改行コードが追加されるわけではありません。

見た目では改行されていても、内部では同じ1行の文字列として続いているため、改行コードだけを探しても表示上の行数までは判別できません。

さらに、自動折り返しの位置は列幅、フォント、文字サイズ、全角文字や半角文字の混在などによって変わるため、「9文字ごとに1行」といった固定ルールで処理すると、別のデータでは区切り位置がずれることがあります。

表示上の行数で区切りたい理由

帳票や印刷用データ、一覧表などでは、文字数ではなくセルに実際に表示されている行数を基準に分割したい場面があります。

たとえば、1つのセルに12行分の内容が表示されているなら、最初の5行、次の5行、残りの2行というように分ければ、各セルの見た目をそろえやすくなります。

このとき文字数だけで区切ると、短い文字が多い行と長い文字が多い行で結果が変わり、5行のつもりが4行になったり、反対に6行になったりすることがあります。

表示上の5行という基準を守るには、文字数ではなくセルが実際に何行分の高さになっているかを見る方法が扱いやすいです。

元データの内容が毎回変わる場合でも、同じ列幅と同じ書式を使うのであれば、セルの高さを利用して分割位置を判断する方法は応用しやすくなります。

通常のSplit関数だけでは対応できない理由

VBAで文字列を分割するときによく使われるSplit関数は、指定した区切り文字を基準にデータを分ける仕組みなので、セル内に実際の改行コードが入っている部分には対応できます。

しかし、自動折り返しで生じた表示上の改行には区切り文字が存在しないため、Split関数から見ると、その場所は普通の文字列の途中にすぎません。

そのため、手動改行だけを含むデータならSplitで5行ずつまとめられても、自動折り返しが混ざると、画面上の行数と処理上の行数が一致しなくなります。

折り返し表示を含めて5行単位で分けたい場合は、Splitだけに頼らず、RowHeightやAutoFitなどを利用して表示結果を確かめながら区切る方法が必要になります。

この違いを理解しておくと、なぜ単純な改行分割ではうまくいかないのかが分かりやすくなり、セル幅や書式が変わった場合にも処理を調整しやすくなります。

表示状態を基準に5行ごとへ分ける考え方

自動で折り返された行まで含めて一定の行数で区切りたい場合は、文字列の内容だけを見ても正しい位置は判断できません。

同じ文章でも列幅やフォントが変わるだけで折り返し位置が変化するため、表示結果を基準にした処理へ切り替えることが重要です。

そのため、VBAでは文字列を直接分析するのではなく、セルがどのように表示されているかを利用しながら区切る方法がよく採用されています。

表示されている行数を直接取得する仕組みは用意されていない

Excelには、セルが現在何行で表示されているのかを取得する専用のプロパティは用意されていません。

そのため、「表示上5行になったら次のセルへ移す」といった処理を一度に実現できる命令も存在しません。

改行コードだけを数えれば済む場面とは異なり、自動折り返しは表示時に計算される仕組みのため、VBAからその結果だけを直接取得することはできません。

この仕様を理解しておくと、文字列操作だけでは対応できない理由が見えてきます。

実際には、表示結果を間接的に確認しながら区切り位置を探していく方法が現実的な選択肢になります。

セルの高さを利用して区切り位置を見つける

実用例として多く採用されているのが、セルの高さを利用する方法です。

最初に5行分の高さを取得しておき、その後は文字を少しずつ追加しながらセルの高さを確認していくことで、表示が5行を超えた位置を区切りの目安として利用できます。

この方法であれば、文字数が毎回異なるデータでも、実際の表示結果に合わせて分割位置を調整できます。

列幅やフォントが変わらない環境であれば、見た目に近い形で5行単位へ分割できる可能性が高くなります。

処理速度だけを見ると文字列操作より少し時間はかかりますが、表示状態を重視する場面では扱いやすい方法です。

文字数ではなく表示結果を基準にするメリット

固定文字数で区切る方法は処理が速く、コードも短くまとめられますが、折り返し位置が変わるデータでは期待どおりの表示にならないことがあります。

一方で表示状態を基準にすると、文章の長さや全角文字と半角文字の混在などによる影響を受けにくくなり、実際の画面表示へ近い結果を得やすくなります。

印刷レイアウトを整えたい場合や、複数の担当者が同じ様式を利用するファイルでは、この違いが仕上がりへ大きく影響します。

処理の目的が「文字列を分けること」ではなく「表示をそろえること」であるなら、表示結果を基準に考える方法が適しています。

まずはどの情報を基準に区切りたいのかを整理してから処理方法を選ぶことで、あとから修正する手間も少なくなります。

折り返し表示を5行ごとに分割するVBAの実装例

表示状態を基準に分割する考え方が分かったら、次は実際の処理の流れを確認しておくとイメージしやすくなります。

処理の内容自体はそれほど複雑ではありませんが、セルの表示状態を確認しながら少しずつ文字列を追加していくため、一般的な文字列操作とは考え方が異なります。

一度仕組みを理解しておけば、区切る行数を変更したい場合や、縦方向ではなく横方向へ出力したい場合にも応用しやすくなります。

処理全体の流れを把握する

最初に対象となるセルの内容を取得し、その文字列を一時的な作業用セルへ少しずつ追加しながら、表示状態を確認していく流れになります。

あらかじめ5行分の高さを取得しておき、その高さを超えたタイミングを区切り位置として判断すれば、表示上の5行単位で分割できます。

区切り位置が見つかったら、その部分までをA1へ書き戻し、残りの文字列について同じ処理を繰り返しながらB1、C1と順番に配置していきます。

一文字ずつ判定を繰り返す方法は処理時間こそ多少長くなりますが、表示結果を優先したい場面では安定した動作が期待できます。

元データの長さが毎回異なっていても、表示状態だけを基準に処理を進められるため、固定文字数で区切る方法より柔軟に利用できます。

確認しておきたい処理のポイント

この方法を利用するときは、列幅やフォント、文字サイズなどの表示条件を途中で変更しないことが大切です。

表示条件が変わると折り返し位置も変化するため、同じ文字列であっても区切り位置がずれてしまう可能性があります。

また、AutoFitを利用して高さを取得する場合は、作業用セルにも元データと同じ書式を設定しておくことで、より実際の表示へ近い判定ができます。

処理対象のセルと作業用セルで書式を統一しておくことが、期待どおりの結果を得るための重要なポイントになります。

処理速度を重視して文字数だけで区切る方法へ変更すると、自動折り返しを含むデータでは表示が崩れる可能性があるため、目的に応じて使い分けることが重要です。

思ったとおりに分割できないときの確認項目

期待した位置で区切られない場合は、まず列幅が途中で変更されていないか確認してみてください。

同じコードでも列幅が異なるだけで折り返し位置が変わるため、表示結果も変化します。

次に確認したいのがセルの書式です。

フォントの種類やサイズ、文字の拡大縮小、インデント、セル内余白などが異なると、表示される行数も変わる場合があります。

さらに、手動改行と自動折り返しが混在しているデータでは、途中に空行が含まれていることもあるため、区切り位置が想定と異なるように見えることがあります。

処理そのものよりも表示条件の違いが原因になっているケースは少なくありません。

まずは元データと作業用セルの表示条件をそろえ、そのうえで高さの取得結果を確認すると、原因を見つけやすくなります。

より便利に活用するための応用テクニック

表示状態を基準に分割する方法を理解すると、ほかのデータ処理へ応用できる場面も増えてきます。

利用しているExcelのバージョンやデータの特徴によって適した方法は異なるため、それぞれの特長を知っておくと無駄な作業を減らしやすくなります。

処理速度だけを重視するのか、それとも表示結果を優先するのかを整理しておくことが、扱いやすいマクロを作成する近道になります。

Microsoft 365の関数だけで対応できる場面もある

Microsoft 365や新しいバージョンのExcelでは、TEXTSPLITやWRAPCOLSなどの関数を組み合わせることで、セル内改行を基準にした分割を数式だけで行える場合があります。

手動で入力された改行だけを対象にするのであれば、VBAを作成しなくても目的を達成できるケースがあります。

ただし、自動で折り返された表示位置は文字列の中へ保存されているわけではないため、数式だけでは画面に表示されている行数を判定できません。

表示上の5行単位で区切りたい場合は、VBAによる表示状態の判定が必要になるケースが多くなります。

列幅やフォントが変わると結果も変わる

自動折り返しは、列幅やフォントサイズ、フォントの種類などを基準に表示位置が決まります。

そのため、マクロを作成したときと実際に利用する環境で表示条件が異なると、区切られる位置が変化することがあります。

複数の担当者で同じファイルを利用する場合は、列幅や書式をあらかじめ統一しておくことで、表示の違いによるずれを抑えやすくなります。

見た目を基準に処理するマクロほど、表示条件を統一して運用することが大切です。

テンプレートを用意して書式を固定しておけば、毎回設定を確認する手間も少なくなります。

大量データを処理するときの工夫

対象となるセルが数件程度であれば、一文字ずつ判定する方法でも十分実用的です。

一方で数千件以上のデータを連続して処理する場合は、画面更新や自動計算を一時的に停止してから実行すると、処理時間を短縮できることがあります。

また、処理が終わったあとに画面更新や計算設定を元へ戻すようにしておけば、通常の操作へ影響する心配も少なくなります。

表示状態を確認する処理はどうしても時間がかかるため、不要な再描画を減らす工夫も効果的です。

実際の運用では、処理速度だけでなく保守のしやすさも意識してコードを整理しておくと、あとから修正や機能追加を行う場合にも対応しやすくなります。

まとめ

セル内改行だけで構成されたデータであれば文字列を分割するだけでも対応できますが、自動で折り返された表示まで含めて一定の行数で区切りたい場合は、表示結果を基準に考えることが重要になります。

表示されている行数を直接取得する機能は用意されていないため、セルの高さを利用しながら判定する方法が実用的な選択肢になります。

列幅やフォントなどの表示条件を統一しておくことで、安定した結果を得やすくなります。

この記事のポイントをまとめます。

  • セル内改行と自動折り返しは内部の扱いが異なる。
  • 自動折り返しには改行コードが保存されない。
  • Split関数だけでは表示上の行数で区切ることは難しい。
  • 表示状態を基準にする場合はセルの高さを利用する方法が実用的。
  • 5行分の高さを基準にすると表示結果へ近い位置で区切りやすい。
  • 列幅やフォントが変わると折り返し位置も変化する。
  • 作業用セルの書式は元データとそろえておくことが大切。
  • Microsoft 365の関数だけで対応できるのはセル内改行が中心。
  • 大量データでは画面更新や再計算を制御すると効率が向上しやすい。
  • 表示を重視するのか処理速度を優先するのかを整理すると最適な方法を選びやすい。

表示上の行数を基準にした処理は、一見すると文字列を分割するだけのように思えますが、実際にはセルの表示方法まで考慮する必要があります。

そのため、固定文字数や改行コードだけで対応しようとすると、期待した位置で区切れないことも少なくありません。

表示状態を利用した方法は多少処理時間がかかるものの、見た目をそろえたい帳票や一覧表では扱いやすい方法です。

利用するExcelのバージョンやデータの特徴に合わせて、数式だけで対応できる場面とVBAが必要になる場面を使い分けることで、保守しやすく再利用もしやすい仕組みを作りやすくなります。

スポンサードリンク
スポンサードリンク
生活
シェアする
hensyuuをフォローする
タイトルとURLをコピーしました