文章が長い。どうにかしたい
Excelで文章を書くときに、どうしても長くなってしまうことがあります。セルの横幅を超えることはむしろ普通です。
セルに入力できる文字数の制限は32767文字と、結構な文字数を入力できるのですが、そこまででは無いにしても1つのセルにそんな長文を入れても、横に長くなりほとんどの場合は読みにくいです。
セルの書式設定で「折り返して全体を表示する」にチェックを付けることで横幅を超えることはなくなりますが、代わりに行の高さが高くなり、関係ない列の行の高さも一緒に高くなり、資料として読みづらくなることもあります。
そういう場合には、句点「。」や読点「、」で文章を区切り、それ以降の文章を下のセルに移動して文章を分割してしまうのも一つの手です。
セル内の句点と読点で下のセルに分割するコード
以下の関数は、アクティブセルの文章を句点「。」または読点「、」までで区切り、それ以降の文章は下のセルを追加して書き込みます。
例えば、「今日は、天気が、雨です。でも、明日は、晴れです。」という句点と読点が合わせて6個ある文章の場合、以下のように句点と読点でそのセルの文章を止めて、以降の文章は次の行を追加してそちらに移動します。
今日は、
天気が、
雨です。
でも、
明日は、
晴れです。
文章の最後の句点、読点は改行しません。
なお、アクティブセルの下に文章が既にあっても消したりしません。アクティブセルのすぐ下に新規行(空行)を追加してそこを利用するため、元々下の行にあった文章は1行下にずれるだけで文章自体には影響はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Sub LineBreak() Dim r As Range '// 処理対象セル Dim s As String '// セル文字列 Dim c As String '// セル文字列の指定位置の1文字 Dim i As Integer '// Mid()でのセル文字列の1文字を指定するためのカウンタ '// アクティブセルのRangeオブジェクトを取得 Set r = ActiveCell '// セル文字列を取得 s = r.Value '// カウンタを初期化 i = 1 '// 最終文字まで文字数ループ Do '// 最終文字の場合(最終文字が句点・読点の場合は処理しない) If i >= Len(s) Then Exit Do End If '// 1文字取得 c = Mid(s, i, 1) '// 句点か読点の場合 If c = "。" Or c = "、" Then '// 下に1行追加 r.Offset(1, 0).EntireRow.Insert '// 元のセルの文章を句点読点までの文章に書き換える r.Value = Left(s, i) '// 下のセルに句点読点以降の文章を書き込む r.Offset(1, 0).Value = Mid(s, i + 1, Len(s)) '// 処理対象セルを追加した下のセルに変更(行追加後のセル文字列を処理対象とするため) Set r = r.Offset(1, 0) '// セル文字列を更新 s = r.Value '// 句点読点位置カウンタを初期化 i = 0 End If '// 句点読点位置カウンタを加算 i = i + 1 Loop End Sub |
使い方
使い方は、セルを選択して、上記関数を実行するだけです。
ソースコードでは27行目のIf文で句点と読点を改行の対象としていますが、例えば句点「。」だけを改行にしたい場合は「If c = “。” Then」とします。
また、句点や読点だけでなく他の文字を改行に含めたいや、まったく別の文字を改行の対象としたい場合も同様にIf文を変更することで対応できます。