• ベストアンサー

【Excel VBA】セル内に改行を挿入したい

セル内で左から数えて10文字毎に改行(折り返し)させたいのですが、 どのようにコーディングすればよろしいでしょうか? 例) セルA1の値が "あいうえおかきくけこさしすせそたちつてとなにぬねの" の場合、 "あいうえおかきくけこ さしすせそたちつてと なにぬねの" としたいです。 ※セルの値は、CSVから自動取得して貼り付ける仕様になっています。  またセルの書式設定は、"折り返して全体を表示する"に事前に設定します よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 「セル内で左から数えて10文字毎に改行(折り返し)させたいのです」 「セルの書式設定は、"折り返して全体を表示する"に事前に設定します」 この二つの条件では厳密には矛盾があります。「折り返して全体を……」という設定には、改行コードは入りません。また、全角と半角の違いがありますから、全角と半角は同じようにすることは出来ません。ここでは、全角という条件にさせていただきます。 私のマクロは、先頭行の列を一回設定したら、後は、行をAutoFit(左端の色の付いたところの行の境目をダブルクリック) をすればよいだけです。列のAutoFit をしたら崩れる可能性があります。改行コードを入れたら、それも文字ですから、おそらくはずれるはずです。 これは、たぶん、アプリが持つフォントとセルの関係で、VBAでは、正しく取れない部分がある難しい種類の問題だと思います。私の技術では、今のところ、統一係数を導き出すことが出来ません。たぶん、システム上の係数はあるはずだと思います。列の幅は、8.38 という表示でしたら、半角で8.38 文字表示できるということですから、2バイト文字だったら、それを半分にすればよいと考えがちですから、セル自体に、調整スペースらしきものがあるようです。 それに、フォントの種類もあるはずです、一応、こちらでは、MSゴシック等幅フォントで試していますが、プロポーショナルでは試しておりません。うまく行かないようでしたら、解決するには、「係数」を、もう一度算出しないと出来ません。 Const dKT As String = "15,15.5,17.5,20,20.5,23,25.5" フォントが順に8,9,10,11,12,13,14 までの対応になっていますが、しかし、これは、スタイル側のフォントが、10~12までですから、それ以外は、調整しなおさないといけません。(デフォルトは、11です) 後、なるべくなら質問の条件をひっくり返さないようにしてください。今の条件のままでしたら、調整は可能です。 '--------------------------------------------- Sub TestAutoFit()   Dim iFnt As Double 'スタイルフォント   Dim acFnt As Double 'アクティブセルフォント   Dim arKt As Variant   Dim w As Double   Dim strText As String   'フォント定数 8~14 まで   Const dKT As String = "15,15.5,17.5,20,20.5,23,25.5"   Const iNUM As Integer = 10 '全角文字数      arKt = Split(dKT, ",")      iFnt = ThisWorkbook.Styles("Normal").Font.Size   If iFnt < 10 Or iFnt > 13 Then    MsgBox "設定できるのは、標準スタイル・フォント10~12までで、それ以外では、" & _     "特別設定が必要です。", vbInformation    Exit Sub   End If   With ActiveCell   strText = .Value   If Len(.Value) = 0 Then     MsgBox "セルが空で、実行できません。", vbInformation     Exit Sub   ElseIf LenB(StrConv(strText, vbFromUnicode)) = Len(strText) Then     MsgBox "半角が入っていると、現在のマクロでは調整できません。", vbInformation     Exit Sub   End If      If .WrapText = False Then     .WrapText = True   End If    acFnt = .Font.Size   'スタイル・フォントは、8~14 まで。   If acFnt > 7 And acFnt < 15 Then     .ColumnWidth = arKt(acFnt - 8)        End If     .EntireRow.AutoFit   End With End Sub

motsu2006
質問者

お礼

すみません、質問の内容をひっくり返してしまいまして、、、。私のつたない質問文章で回答者様を混乱させないように簡潔にまとめるために変更したことが、逆に皆様を混乱させてしまったかもしれません、、、。 はい、列幅は固定、フォントも指定されている状況です。 係数等、私にはちょっと難解な技術を含む問題になるんですね、、、。 このご回答は今後仕事でVBAを書き続けるであろう私にとって後々非常に有意義なものであると感じました。今はすべてを理解できずにいますが、ページを保存して永久保存させていただきたく思います。 ご回答、ありがとうございました。

その他の回答 (4)

  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.5

今更なんですが…。 #2さんのご回答で解決しているものと思って投稿を控えていたのですが、 改めて読んでみると、どうも私の書いていたコードとは少し異なる動作をするようなので、 屋上屋を架すようですが、一応参考までに。 ●動作の概要  A1セルの値を、10文字毎に、改行コード(LF)で区切って、A1セルにセットする ●動作上の相違点(#2さんのご回答との比較)  ・文字列の最後には改行をつけない。  ・文字列が10N+1文字(1,11,21…)の場合に最後の文字を消さない。 なお、私のコードでは主処理の部分をFunctionプロシージャとして切り出しています。 実際の運用はA1セルやアクティブセルに限るわけではないでしょうし、 決まって10文字毎に区切るとも限らないので。 '=======================↓ ココカラ ↓======================= Sub Sample090615()  Range("A1").Value = Insdiv(Range("A1").Value, 10, vbLf) End Sub '-------------------- Function Insdiv( _  ByVal orgStr As String, _  ByVal divCnt As Long, _  ByVal divChr As String _  ) As String  Dim rstStr  As String  Dim i    As Long  If divCnt < 1 Then Insdiv = orgStr: Exit Function  i = 1  Do   rstStr = rstStr & Mid(orgStr, i, divCnt) & divChr   i = i + divCnt  Loop While i <= Len(orgStr)  Insdiv = Left(rstStr, Len(rstStr) - Len(divChr)) End Function '=======================↑ ココマデ ↑======================= ご参考まで。

motsu2006
質問者

お礼

はい、対象のセルは列は固定ですが行は不定です。 文字列の最後には改行を付けない、そうです! 応用させていただきます、ご回答ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

参考 改行箇所で、Chr(10)を入れる。その位置の問題だけ。 Sub test01() x = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ" Range("A1") = x y = Range("A1") s = Mid(y, 1, 10) i = 11 p1: s = s & Chr(10) & Mid(y, i, 10) i = i + 10 If i < Len(y) Then GoTo p1 Range("A1") = s End Sub === (1)セルの書式設定は、"折り返して全体を表示する"に事前に設定します (2)MSP明朝のようなプロポーショナルフォントは設定しないほうがよい。上記で最後の「ほ」が改行されたように見えておかしいなと思ったら、Pフォントが原因だった。 (3)実際はA1セルだけではないので、A列について最終行まで全行繰り返してください。コードはありふれているので略。 またGOTOを使わないループに直してください。

motsu2006
質問者

お礼

非常に解り易かったです。 さっそく活用させていただきました。 他の皆様の回答にもありましたが、フォントも影響するんですね。 ご回答、ありがとうございました!

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

次のようにも、 Sub test() Dim s As String, n As Integer, s2 As String, n1 As Integer, l As Integer s = ActiveCell n = Len(s) s2 = "" n1 = 1 l = 10 While n1 < n s1 = Mid(s, n1, l) & Chr(10) s2 = s2 & s1 n1 = n1 + l Wend ActiveCell = s2 End Sub

motsu2006
質問者

お礼

なるほど!と言ってもすべてを理解できたわけではないのですが、、、。こういうやり方もあるんですね。 ご回答、ありがとうございました!

noname#99913
noname#99913
回答No.1

文字のあるセルにカーソルを移動し、次のコードを実行してください。 Sub cut() moji = ActiveCell.Value mojisuu = Len(moji) If mojisuu > 10 Then ActiveCell.Value = "" For i = 1 To Int(mojisuu / 10) ActiveCell.Value = ActiveCell.Value & Mid(moji, i + (i - 1) * 9, 10) If Mid(moji, i + 1 + i * 9, 10) <> "" Then ActiveCell.Value = ActiveCell.Value & Chr(10) End If Next i ActiveCell.Value = ActiveCell.Value & Mid(moji, i + (i - 1) * 9, 10) End If End Sub

motsu2006
質問者

お礼

ご回答いただいた内容を検証しながら応用させていただきます。 お礼コメントが遅くなり大変失礼しました。本当にありがとうございます。

関連するQ&A

  • Excelのセル内改行について

    Excelのセル内に改行を含むデータが入力されています。 Excelでコピー&ペーストを行えば問題ないのですが、 メモ帳にペーストすると改行が ↑ と表示されてしまい、 1行になってしまいます。 メモ帳にペーストしてもセル内で改行されているように 改行したままで貼り付けを行うことは可能でしょうか? Sheet1:A1 あいうえおかきくけこ さしすせそ たちつてとなにぬねのはひふへほ メモ帳:貼り付け あいうえおかきくけこ↑さしすせそ↑たちつてとなにぬねのはひふへほ

  • EXCELでのスペースと改行について

    結合したセル内に文章を入力する際、2行以上にわたると、途中で入力したスペースから勝手に改行されてしまいます。EXCEL2003ではそのようなことが起こらなかったのですが、スペースを入れても改行されない方法を教えてください。 セルの書式設定は、 横位置:左詰め、または標準 縦位置:上詰め 「折り返して全体を表示する」「セルを結合する」にチェック。 Windowsの設定で、スペースは常に半角にしています。 ■がスペースと仮定すると、 あいうえおかきくけこ さしすせそたちつてと のような2行以上の文章にスペースを入れると、 あいう■ えおかきくけそさしすせそ・・・ のようになります。 また、1行に2つ以上のスペースを入れると、 あいう■えおかき■ くけそさしすせそ・・・ のように、一番最後のスペースで改行されます。 昔にEXCEL2003で作成していた文章も、同様の書式に変えられ、スペースが入っているところで勝手に改行されており、とても見にくく(醜く)なっています。 色々ネット上で調べ、「検索にはCtrlとJを押す、置換にスペースを入力」、というやり方を見つけましたが、試してみたところ、「置換対象のデータが見つかりません。・・・」というポップアップが出、うまくいきませんでした。 どなたか、ぜひご教示下さい。よろしくお願いします。

  • Excel VBA で 書式設定(セル内の一部のみ)

    こんにちは。教えてください。 1つのセル内に、 あいうえお1か きくけこ2 さしすせそ3たち。 つてと45.67 などと、いくつかのセル内改行を含み、文字数がばらばらのデータが入っています。 その1行目(上記の例で言うと、「あいうえお1か」)のみ、フォント赤色の書式設定を、マクロで行いたいのですが、できますでしょうか? ご回答よろしくお願いいたします。

  • 書式設定(セル内の一部のみ)

    こんにちは。 1つのセル内に、 あいうえお1か きくけこ2 さしすせそ3たち つてと45.67 などと、いくつかのセル内改行を含み、文字数がばらばらのデータが入っています。 その1行目(上記の例で言うと、「あいうえお1か」)のみ、フォント赤色の書式設定をすることはできますでしょうか? ご回答よろしくお願いいたします。

  • Perlでの改行コードについて

    <textarea>に入力された値をPOSTで渡し、ポスグレに書き込み、それをHTML上で表示する処理をしているのですが。 textareaで改行を入力した場合に、 DB内に改行が登録されません。 例: *textareaのwrapはsoftに設定してあります。 あいうえおかきくけこ さしすせそ と入力すると。 DBには 「あいうえおかきくけこ さしすせそ」 と登録され 表示では「あいうえおかきくけこさしすせそ」と表示されます。 ソースでみると 「あいうえおかきくけこ さしすせそ」と表示されています。 改行コードの置換がされていないのだと思い INSERT前に s/\r\n/<BR>/g; s/\r/<BR>/g; s/\n/<BR>/g; を使い置換をすると DBには何も登録されません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • セル内で改行された文字列を1行ずつ他のセルに移す

    excelで、こんなことできますか? book1で、セル内に下のような改行した文字列があり、それを入力したら、 book2に、文字列を1行ずつ他のセルに取り出したいのですが…できますか? book1 (セルは折り返して全体を表示する) book2 (仕上げの画面) A         A あいうえお                    1 あいうえお 1 かきくけこ                    2 かきくけこ さしすせそ                    3 さしすせそ → 4 たちつてと 2 たちつてと                    5 なにぬねの なにぬねの                     6 はひふえほ 3 はひふへほ 教えていただけると助かります。(ただしマクロはよくわからないのですが…)

  • Excelです。すみません助けてください!

    表があり、その下の文章が数行、そしてその下に表があり、文章、、、。 といったシートを作成しています。 分かりにくいですね、このような感じです。↓↓ -------------------------------------- 11111 5555 あいうえおかきくけこ。 33333 4444 55555 5555 さしすせそたちつてと。 なにぬねのはひふへほまみむめも。 --------------------------------------- ・・それで、数値のところのセルの幅は大体一定なのですが、文章の部分は長いものも、複数行に渡るものもあり一定ではありません。 「11111」のセル幅を広くせず、なおかつ、「あいうえおかきくけこ。」のセルを複数列に渡って結合を行わず、きれいに印刷する方法はありますか? 「折り返さずに表示」にた場合、文章が長すぎると印刷範囲からはみ出てしまいます。 altとenterで改行を挿入するなら、セルの結合が必要です。 データが大量にあるので、セルの結合はなるべく行いたくありません。 いい方法をご存知の方よろしくお願いします!! (分かりにくい文章ですみません。補足要求ありましたらお願いします)

  • Excel セルの書式設定 折り返し、改行

    御世話になります。 Excel 2010、2013です。 セルの行高さを広げて文章を作成に利用しています。 「セルの書式設定>配置>折り返して全体表示する」を設定しています。 折り返しした時、または Alt+Enterで改行した時に、 改行幅を広げる設定はあるでしょうか? よろしくお願いします。

  • エクセルVBAのChr(10)の挿入と削除

    宜しくおねがいします 現在結合されたセルがありそのセル内に他のプログラムから 下記の値が挿入されるようになっています。 あいうえお かきくけこ さしすせそ たちつてと (Chr(10)の改行) (Chr(10)の改行) (Chr(10)の改行) (Chr(10)の改行) 他のプログラムから送られてくる値は”あ行”の1行だけだったり ”ま行”までの7行あったりとその都度変わってきます。 文字数も”あ”の1文字だけだったり”あああいいいうううえええおおお”と 文字数も変わります。 しかし下の4行分の”Chr(10)の改行”の数は変わりません。 やりたいことは↓ コマンドボタンを二つ作り、ボタンを押すたびに下にあるChr(10)の改行を 挿入したり削除したりしたいのですがどのようにすればよいのでしょうか? 追加ボタンを2回押すとChr(10)の改行が6行分になり そこから削除ボタンを3回押すとChr(10)の改行が3行分になる・・・という感じです。 試しにマクロの記録で セルを選択して改行を削除 をしてみたのですが思うような動きをしてくれません。 なぜChr(10)なのかとかいうのは聞かないでください・・・ そこから説明すると長くなるので。

  • Excel VBA で 一括書式設定(セル内の一部のみ)

    こんにちは。教えてください。 1つのセル内に、 あいうえお1か き! くけこ2 さしすせそ3たち。 つてと45.67? というように、いくつかのセル内改行を含み、文字数がばらばらのデータが入っています。そういうセルが、一行にいくつも並んでいます(途中に空白もあります)。 それらの1行目(上記の例で言うと、「あいうえお1か」)のみ、フォント赤色の書式設定を、マクロで行いたいのです。 そこで、以下のマクロを実行すると、選択セルがひとつだけのときは問題ないのですが、複数のセルを選択すると実行時エラー(型が一致しません)が出てしまいます。 Sub 一行目赤() With Selection.Characters(Start:=1, Length:=InStr(Selection.Value, Chr(10)) - 1).Font .ColorIndex = 3 End With End Sub 選択セルのすべてに対し、一括で書式設定できるようにするにはどうしたらよいでしょうか?ご回答よろしくお願いいたします。

専門家に質問してみよう