• ベストアンサー

文章の整形について

VBA justifyメソッドの関連質問です。 参考質問として以下がありますが、 http://oshiete1.goo.ne.jp/qa2267501.html 適当な列幅の一つのセルにある長い文章を、 連続する下方の複数のセルに適切に分割したいのですが、 Application.DisplayAlerts = False Selection.Justify Application.DisplayAlerts = True 残念ながらこの処理では、 分割前のセルにある[Alt]&[Enter]による改行が無視されます。 これをなんとか解決して、 改行を生かしながら複数セルに分割整形したいのです。 お知恵を拝借できれば幸いです。 ぜひ、よろしくお願いいたします。 (XP/Excel2003)

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答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

Dor_001
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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でしたか。早く書い てください。もう終ります。

Dor_001
質問者

お礼

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

Dor_001
質問者

補足

言葉足らずでご迷惑をおかけしてます。 長い文章を入力するとき、複数セル(実は印刷用なんですが)に直接 行うと、文章訂正などが発生した場合、どうしても、セルを跨いで 詰めたり送ったりしなければなりません。 だから、一つの同一列幅のセルに入力するのが、 訂正などを考えると比較的楽ではないかと考えました。 Justify が使えるといいのですが、 [Alt]&[Enter]が入ると期待した分割ができません。 で、悩んでいます。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

Justifyメソッドを実行しても「セル内改行」はそのまま残りますよ 上書きされたセルの書式を「折り返して全体を表示する」にしたら、ちゃんとセル内改行されませんか?

Dor_001
質問者

補足

説明不足でした。申し訳ありません。 分割前のテキスト内の改行コード(LF)は 分割後も残りますが、 次セルへの分割契機にはなっていません。 次セルへの分割契機は、 あくまでセル幅の文字数になります。 つまり、改行コード(LF)は無視されます。 改行コードがあれば無条件に次セルに移動してほしいのです。 (A1)バレー部キャプテンとして、(LF)    市大会準優勝。(LF)    リーダーとしての統率力、責任感があるため、(LF)    同級生や下級生から慕われている。 これを Justify すると (A1)バレー部キャプテンとして、(LF)    市大会準優勝。(LF)    リー (A2)ダーとしての統率力、責任感があるため、(LF)    同級生 (A3)や下級生から慕われている。 となります。 期待する結果は、 (A1)バレー部キャプテンとして、 (A2)市大会準優勝。 (A3)リーダーとしての統率力、責任感があるため、 (A4)同級生や下級生から慕われている。 となって欲しいのです。 InStrでちまちまやるしかないでしょうか?

関連するQ&A

  • Excel 特定のセルだけEnterでセル内改行

    タイトル通りのことなのですが、VBA等を駆使してできないか悩んでいます Excelのセル内改行は通常Alt+Enterなのですが、 使っているシートの一つのセルだけ複数行入れるような大きな所があります。 他のセルでは問題ないのですがここの入力時では、 いつもAltを押しながらでないと改行できない煩わしさが募りまして、 「このセル内に限り」Enterキーだけで改行できるようにしたいのです。 条件としてはあくまでこのセルのみで、形を崩さずにできることが望ましいです。 この入力セルは他シートから参照されているため 複数行のセルに分割したり、テキストボックスに置き換えることは難しいです 色々探した挙句、Application.MoveAfterReturn など VBAを駆使して考えてみたのですが 手詰まりになってしまいました。 何かできる方法はありますでしょうか?

  • 【Excel 2003】 折り返しとセル内での改行

    こんにちは。 類似の質問を見つけられなかったので投稿させていただきます。 以下の方法をご教授ください。 「折り返してセルの全体を表示される」のチェックを外した際に alt + Enter での改行(等)が無視されてしまうことを防ぎたい。 これは以下の手順で再現します。 (1) 「折り返してセルの全体を表示される」ボックスのチェックが 無い 状態でセルの列幅を越える文字数を入力します。 → この時点では、右隣のセルまで文字は侵入していますが、表示されます。 (2) 次に、(1)で書いた文字列の最後尾で alt + Enter を入力し、セル内改行を行います。 (3) そのセル内の2行目に再度セルの列幅を越える文字数を入力します。そしてそのセルの編集を終えます。(Enter押下) → すると自動的に「折り返してセルの全体を表示される」が適用されるようで(これも納得はいかないのですが。。)、強引にセルの列幅に合わせられる形で全体が表示されます。 (4) しかたないので、改めて上記で編集してきたセルの書式設定から 「折り返してセルの全体を表示される」ボックスのチェックを外します。 → すると今度は、alt + Enter の改行が無かったかのように1行で表示されます。 ※ 但し、数式表示ウィンドウ(fx)では問題なく改行された状態で表示されます。 この問題の解決方法をご教授願います。 なおこの事象は、改行を含むテキストデータのコピー&ペーストでも同様に発生します。 宜しく御願いします。

  • excelでの改行制御

    例えば、123456-789abcdefg をセルに入力し、「折り返して表示」の状態で、セル幅が例えば9とaの間で切れるくらいの幅である場合でも、"-"のところで改行され、 123456- 789abcdefg と表示されます。 これは、"-"が英文における単語の改行時のつなぎ文字であることから、自動的に"-"があるところで改行表示される設定になっているからだと思うのですが、 これをあえて、列幅どおりに 123456-789 abcdefg と表示させるようにすることはできないものでしょうか。 ALT+ENTERを使えばできるのですが、このようなデータを大量に入力し、かつ、セル幅が定まっていない場合、セルごとに改行位置を修正していくのは避けたいので、ALT+ENTERは使わないで表示させる方法があれば教えてください。

  • 全セルの末尾に改行(Alt+Enter)を入れたい

    エクセル2003を使用しています。 セルを複数選択し、全セルの末尾に改行(Alt+Enter)を入れたいのですが方法はありますか。 ※「改行を一度に削除したい」という質問はよくありますが、その逆となります。

  • Excel セル内の改行を一括解除する方法

    Excelにてセルに文章を打ち込み、改行をしたい場合 Alt + Enter で改行ができます。 改行した文章が入力されているセルがシート上に複数あったとし、 その改行を一括(一気)に解除する事はできませんか? 1つのセルづつではなく、一括でやる方法があれば教えてください!!

  • エクセルの改行を一括削除したい

    エクセルの改行を一括削除したい エクセル2002を利用しています。 複数のセルに、改行(Alt+Enter)で文章が入力されているのですが、 この改行をまとめて削除する方法はないでしょうか?

  • 任意のセルに貼り付けをするマクロのアドバイスを

    マクロの初心者です。エクセル2010を使用しています。 以下のようなマクロをいろいろ検索し参考にして作りましたが、 シート1でコピーし、シート2の任意のセルに貼り付けをして、そのままシート2で終了するには、どうすればよいでしょうか。 現在では、シート2のセルに貼り付け、その他の処理を終えると、シート1のコピー元に戻って終了してしまいます。 そして、このマクロを個人用マクロとして、すべてのブックで使用するのは可能でしょうか。 その場合はどうすればよいのでしょうか。 アドバイスをよろしくお願いします。 Sub 値と横連結() Application.DisplayAlerts = False With Application.InputBox _ ("貼付先セルをクリック") Selection.Copy .PasteSpecial paste:=xlPasteAll, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False .PasteSpecial paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False With Selection If Selection.Count = 1 Then Exit Sub .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With With Selection.Font .Name = "MS Pゴシック" .Size = 8 End With Selection.Borders.LineStyle = xlContinuous Selection.Borders.Color = -10375249 Selection.Merge True Application.DisplayAlerts = True End With End Sub

  • ExcelVBA 列の幅に収まらない文字列を下へ

    お世話になります。 セル書式の折り返し・縮小・結合を使用しないで、 列の幅に収まらない文字列を下の行のセルへ表示させる方法を模索しています。 Application.DisplayAlerts = False Range("A1").Justify で出来るらしいと書物を頼りに実施していますが、下の行のセルへ表示出来ません。 他の方法も含めて、実現方法はあるでしょうか? よろしくお願いします。

  • エクセルの使い方

    ・複数行を横に複数列ドラッグして、縦にだけセルを結合する方法 ・セル内で文字の変換後に左を押すとセルが移動してしまい、カーソルが動かない。どうすればこのようなことは起こらないか ・セル内でAlt+Enterで改行したら、こちらの望まないところで勝手に改行された。一旦、中の文字を全て消しても、そのセルでは勝手に改行は継続される。このようなことが起こらないようにするにはどうするのか。

  • open oficeのエクセル

    セル内で改行しようとAlt+Enterを押しましたが、改行されません どうやるのですか?

専門家に質問してみよう