アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA justifyメソッドの関連質問です。
参考質問として以下がありますが、
http://oshiete1.goo.ne.jp/qa2267501.html

適当な列幅の一つのセルにある長い文章を、
連続する下方の複数のセルに適切に分割したいのですが、

Application.DisplayAlerts = False
Selection.Justify
Application.DisplayAlerts = True

残念ながらこの処理では、
分割前のセルにある[Alt]&[Enter]による改行が無視されます。
これをなんとか解決して、
改行を生かしながら複数セルに分割整形したいのです。
お知恵を拝借できれば幸いです。
ぜひ、よろしくお願いいたします。
(XP/Excel2003)

A 回答 (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
    • good
    • 0
この回答へのお礼

zap35さん、爽やかなコードありがとうございます。
InStrを使って、Chr(10)の前後を分割し、
前をJustify、後ろをさらに分割し同処理を繰り返す。
Chr(10)が存在しなかった時点で終了というアルゴリズムを
書いたのですが、
Splitで配列に格納した方が早かったですね。
空セル探しは下からの上方サーチじゃなく、
上から順に行くのが現実的かと思いますので、
参考にさせていただきながら、
作り込みたいと思います。
大変ありがとうございました。
勉強になりました。

お礼日時:2008/03/25 11:50

質問の意味を捉えてないかもしれないが


例データ 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]が入ると期待した分割ができません。
で、悩んでいます。

補足日時:2008/03/24 21:54
    • good
    • 0
この回答へのお礼

一般人さんありがとうございました。
この場合は、フォントの種類やサイズが固定されます。
使うにはちょっと難しいかと考えます。
表示領域が4行しかありませんので、
長文の場合はフォントサイズを小さくしたり、
プロポーショナルにしたり、自由に取り扱えるよう
仕上げたいと考えています。

いずれにして大変ありがとうございました。

お礼日時:2008/03/25 09:44

Justifyメソッドを実行しても「セル内改行」はそのまま残りますよ



上書きされたセルの書式を「折り返して全体を表示する」にしたら、ちゃんとセル内改行されませんか?

この回答への補足

説明不足でした。申し訳ありません。
分割前のテキスト内の改行コード(LF)は
分割後も残りますが、
次セルへの分割契機にはなっていません。
次セルへの分割契機は、
あくまでセル幅の文字数になります。
つまり、改行コード(LF)は無視されます。

改行コードがあれば無条件に次セルに移動してほしいのです。

(A1)バレー部キャプテンとして、(LF)
   市大会準優勝。(LF)
   リーダーとしての統率力、責任感があるため、(LF)
   同級生や下級生から慕われている。

これを Justify すると

(A1)バレー部キャプテンとして、(LF)
   市大会準優勝。(LF)
   リー

(A2)ダーとしての統率力、責任感があるため、(LF)
   同級生

(A3)や下級生から慕われている。

となります。
期待する結果は、

(A1)バレー部キャプテンとして、
(A2)市大会準優勝。
(A3)リーダーとしての統率力、責任感があるため、
(A4)同級生や下級生から慕われている。

となって欲しいのです。

InStrでちまちまやるしかないでしょうか?

補足日時:2008/03/24 21:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!