こんにちは、Ryoです。
Excelで複数セルに跨って文章が入力されている場合も多いかと思いますが、稀にかなりの長文が入力されていたりすることもあって、それを複数セルに分割する場合に文章選択して切り取ってコピーして・・・を繰り返すのは大変煩わしいことです。
VBAでは文字列を複数のセルに割り振ることが出来ますから、はみ出した文字を下のセルに分割させられますので、今回はその方法について書いてみたいと思います。
1.サンプル概要
先ずは何はともあれ実行前後を見ていただければイメージが掴めると思います。
サンプルでは本記事の冒頭の文章をセルA1に貼り付けたものです。
セルA1をダブルクリックした際の全文はこんな感じですね。
セルA1がデフォルトサイズだと小さすぎるので、分割する都合上列幅を53.50にしてからサンプルコードを実行すると。。。
このようにセル幅からはみ出した文字列を下のセルに分割してくれます。
では次にサンプルコードです。
2.サンプルコード
Sub Sample1() Dim i As Integer Cells(1, 1).Select i = 1 '警告メッセージを非表示にする Application.DisplayAlerts = False Do While ActiveCell <> "" With Cells(i, 1) .Select .Justify 'はみ出た文字列を下のセルに分割 End With i = i + 1 Loop '警告メッセージの非表示を解除 Application.DisplayAlerts = True End Sub
先ず文字列を分割するにはJustifyメソッドを使います。
オブジェクト.Justify
この形ですね。
Justifyを使うと、対象のセルに対しはみ出している文字列を下のセルに分割してくれます。
ただし、その下のセルが空欄か否かに関わらず「セル上書き」確認メッセージが表示されますので、サンプルではApplication.DisplayAlertsを使って非表示にしています。
サンプルではセルA1を選択し、警告メッセージを非表示指定します。
その後、Do While~Loopでアクティブセルが空欄じゃない限り繰り返す処理として、
セルA1の文字列を分割しA2に割り振る
↓
セルA2の文字列を分割しA3に割り振る
↓
・
・
・
↓
選択したセルが空白なら分割完了としてループ処理終了という形です。
Withを使っているのはCells(i,1)記述を繰り返すのが面倒ということだけですので、
Withを使わない場合は、こうなります。
Do While ActiveCell <> "" Cells(i,1).Select Cells(i,1).Justify i = i + 1 Loop
後はApplication.DisplayAlertsの非表示を解除(True)しておけばOKです。
3.まとめ
オブジェクト.Justifyだけ覚えておけば良いので簡単ですね。
後は処理したい内容に合わせて記述すればサンプルの様に分割して表示させられますので、知っておくと必要に迫られた際に便利なものだと思いますので、機会あればぜひ!
以上がセルからはみ出した文字列を下のセルに割り振る方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo