VBA justifyメソッドの関連質問です。
参考質問として以下がありますが、
http://oshiete1.goo.ne.jp/qa2267501.html
適当な列幅の一つのセルにある長い文章を、
連続する下方の複数のセルに適切に分割したいのですが、
Application.DisplayAlerts = False
Selection.Justify
Application.DisplayAlerts = True
残念ながらこの処理では、
分割前のセルにある[Alt]&[Enter]による改行が無視されます。
これをなんとか解決して、
改行を生かしながら複数セルに分割整形したいのです。
お知恵を拝借できれば幸いです。
ぜひ、よろしくお願いいたします。
(XP/Excel2003)
No.1
- 回答日時:
Justifyメソッドを実行しても「セル内改行」はそのまま残りますよ
上書きされたセルの書式を「折り返して全体を表示する」にしたら、ちゃんとセル内改行されませんか?
この回答への補足
説明不足でした。申し訳ありません。
分割前のテキスト内の改行コード(LF)は
分割後も残りますが、
次セルへの分割契機にはなっていません。
次セルへの分割契機は、
あくまでセル幅の文字数になります。
つまり、改行コード(LF)は無視されます。
改行コードがあれば無条件に次セルに移動してほしいのです。
(A1)バレー部キャプテンとして、(LF)
市大会準優勝。(LF)
リーダーとしての統率力、責任感があるため、(LF)
同級生や下級生から慕われている。
これを Justify すると
(A1)バレー部キャプテンとして、(LF)
市大会準優勝。(LF)
リー
(A2)ダーとしての統率力、責任感があるため、(LF)
同級生
(A3)や下級生から慕われている。
となります。
期待する結果は、
(A1)バレー部キャプテンとして、
(A2)市大会準優勝。
(A3)リーダーとしての統率力、責任感があるため、
(A4)同級生や下級生から慕われている。
となって欲しいのです。
InStrでちまちまやるしかないでしょうか?
No.2
- 回答日時:
質問の意味を捉えてないかもしれないが
例データ B列 内容は文例
(内容でたらめの文章ですみません。P付きFontは使わないとして)
多さにかけては他店に負けません。こんばんわ月夜ですね
aaaaaaaaaaaaa
近くの近藤さん早く早く今すぐ早く事務所に帰ってください。
木村さんの名前は何でしたかね。xxでしたか。早く書いてください。もう終ります。
(一部半角文字混じらせている)
ーーーー
コード
Sub test01()
Cells(1, "E").ColumnWidth = 26 '半角文字数分で幅設定
d = Range("B65536").End(xlUp).Row
k = 1
For i = 1 To d
s = Cells(i, "B")
s = StrConv(s, vbWide)
st = 1
'--
While Len(s) - st + 1 > 13
Cells(k, "E") = Mid(s, st, 13)
k = k + 1
st = st + 13
Wend
Cells(k, "E") = Mid(s, st, Len(s) - st + 1)
k = k + 1
Next i
End Sub
結果
全角する
13文字で次セルに折り返す(実体は13字ずつ切り刻んでセット)
で
E列
多さにかけては他店に負けま
せん。こんばんわ月夜ですね
aaaaaaaaaaaaa
近くの近藤さん早く早く今す
ぐ早く事務所に帰ってくださ
い。
木村さんの名前は何でしたか
ね。xxでしたか。早く書い
てください。もう終ります。
この回答への補足
言葉足らずでご迷惑をおかけしてます。
長い文章を入力するとき、複数セル(実は印刷用なんですが)に直接
行うと、文章訂正などが発生した場合、どうしても、セルを跨いで
詰めたり送ったりしなければなりません。
だから、一つの同一列幅のセルに入力するのが、
訂正などを考えると比較的楽ではないかと考えました。
Justify が使えるといいのですが、
[Alt]&[Enter]が入ると期待した分割ができません。
で、悩んでいます。
一般人さんありがとうございました。
この場合は、フォントの種類やサイズが固定されます。
使うにはちょっと難しいかと考えます。
表示領域が4行しかありませんので、
長文の場合はフォントサイズを小さくしたり、
プロポーショナルにしたり、自由に取り扱えるよう
仕上げたいと考えています。
いずれにして大変ありがとうございました。
No.3ベストアンサー
- 回答日時:
#01です。
選択セルの文字列をChr$(10)を生かしてJustifyするマクロを作ってみました。お試し下さい
Sub Macro1()
Dim str() As String
Dim idx, col As Integer
If TypeName(Selection) = "Range" Then
col = Selection.Column
str = Split(Selection.Value, Chr(10))
On Error GoTo end0
Application.DisplayAlerts = False
For idx = 0 To UBound(str)
Selection.Value = str(idx)
Selection.Justify
Cells(65536, col).End(xlUp).Offset(1, 0).Select
Next idx
End If
end0:
Application.DisplayAlerts = True
End Sub
zap35さん、爽やかなコードありがとうございます。
InStrを使って、Chr(10)の前後を分割し、
前をJustify、後ろをさらに分割し同処理を繰り返す。
Chr(10)が存在しなかった時点で終了というアルゴリズムを
書いたのですが、
Splitで配列に格納した方が早かったですね。
空セル探しは下からの上方サーチじゃなく、
上から順に行くのが現実的かと思いますので、
参考にさせていただきながら、
作り込みたいと思います。
大変ありがとうございました。
勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定列最終行までのスペースを改行するVBAについて 2 2022/06/01 19:50
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Excel(エクセル) EXCEL関数(数式)を教えてください 2 2022/06/08 18:32
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 【エクセル】文中に別シートのセルの内容を自動入力したい 6 2022/11/17 11:30
- Excel(エクセル) 列の複数ある空白セルを飛ばして、セルに並べて表示したい 3 2023/02/12 16:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 12:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
セル内の一部の文字だけをハイ...
-
Excel countif関数で取り消し線...
-
Excelでcsvやtxtで保存する時に...
-
マウスポインターが白十字のまま
-
エクセルで画像を透過させて画...
-
エクセルで右隣のセルより優先...
-
エクセルの入力規則プルダウン...
-
Excel入力で勝手にエンター押さ...
-
エクセルで1つのセルにスクロ...
-
エクセルでセルを上下に結合し...
-
エクセルのセル外改行は可能で...
-
エクセル2013で英単語を折り返...
-
エクセルで文字を打つと下に、...
-
エクセルファイルに _x000D_ と...
-
全セルの末尾に改行(Alt+Enter...
-
セルは大きくさせず、中の文字...
-
エクセルの2つのセルを内容も消...
-
エクセルの白黒の反転で困って...
-
Excel 隣のセルに文字を表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルの白黒の反転で困って...
-
セルは大きくさせず、中の文字...
-
マウスポインターが白十字のまま
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで画像を透過させて画...
-
エクセルで1つのセルにスクロ...
-
エクセルでセルを上下に結合し...
-
エクセルの2つのセルを内容も消...
-
エクセルで特定の列のセルだけ...
-
セルを結合しても、文字をセル...
-
エクセルの入力規則プルダウン...
-
VBA:結合されたセルに対する「...
-
エクセルで右隣のセルより優先...
-
Excel入力で勝手にエンター押さ...
-
エクセル 折り返して全体を表...
-
エクセル2013で英単語を折り返...
おすすめ情報