• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007VBA「区」のところで改行したい)

Excel2007VBA「区」のところで改行したい

このQ&Aのポイント
  • エクセルワークシートのB列にある任意の住所をD列に転記します。転記の際に「区」のところで改行したいと思いますが、自作のコードではその通りになりません。どのように書き換えたら良いでしょうか?
  • 質問の補足1:「住所1」には必ず「区」の文字が入ります
  • 質問の補足2:Mid関数の第2引数にInStr(Cells(i, 2), "区")を使っていますが、この引数に何を使えば良いのかが分かりません。添付の画像は自作のコードを使った結果、作成された住所で、意図通りの改行はできていません。

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

  • ベストアンサー
回答No.6

#2の補足に対する回答です。 > Cells(i,4)=Replace(Cells(i, 2), "区", "区" & vbLf, 1, 1) > こちらのご回答では第4引数まで > 加えられているのはどうしてでしょうか? Replace([元の文字列],[探す文字列],[置換する文字列],[何文字目から],[いくつ置換する]) です。3番目と4番目の引数に 1,1 とする事で、 「1文字目から検索し、1回だけ置換する」事になります。住所ではまず無いと思いますが・・・仮に「区」が含まれた町名があった場合、指定しないと2つ目の「区」も「区+セル内改行」に置換されてしまうんです。 それを避けるために指定しています。 まぁ考慮しなくても大丈夫でしたら、 > Cells(i,4)=Replace(Cells(i, 2), "区", "区" & vbLf) でもイケますよ(^^; Left,Mid,InStrを駆使するよりも、Replace命令の方がスマートでお勧めです。 ただ・・・Excel97以前のバージョンではReplace命令が無いので気をつけて下さい。 あと、vbLf は Chr(10) の定数です。

dradra33
質問者

お礼

Cor_moriyan様 再度のご回答ありがとうございます。 またお礼が遅くなり恐れ入ります。 Replace関数の使い方良く分かりました。 文字の切り取りに関してはLeft,Mid,InStr関数よりも Replace関数を使うようにします。

その他の回答 (5)

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

質問には、じっこうしてどんなエラーや、気に食わない結果が出たかを書いて質問すること。 ーー Sub Macro1() Dim i As Integer d = Range("B65536").End(xlUp).Row MsgBox d For i = 2 To d MsgBox InStr(Cells(i, "B"), "区") Cells(i, 4) = Left(Cells(i, 2), InStr(Cells(i, 2), "区")) _ & Chr(10) & Mid(Cells(i, 2), InStr(Cells(i, 2), "区") + 1, Len(Cells(i, 2)) - InStr(Cells(i, 2), "区")) Next i End Sub MID関数では、スタート位置と切り出す長さを指定する。 この関数の理解とコード上のくみこみが出来てない、エらーは自明のことではないか。 Msgbox ででも適宜入れて確認すれば情況はわかって、調べる手立てはわかるはず。 ーー もうひとつ「区」の無いセルは手当てがしてないがそれで良いのか。

dradra33
質問者

お礼

imogasi様 ご回答ありがとうございます。 >もうひとつ「区」の無いセルは手当てがしてないがそれで良いのか。 今回はB列のセルには必ず「区」があるので、 アドバイスしてくださったコード対応ができます。 ありがとうございました。

回答No.4

#2訂正です。 参考までに、Replace命令で行った一例です(^^; Cells(i,4)=Replace(Cells(i, 2), "区", "区" & vbLf, 1, 1)

dradra33
質問者

お礼

Cor_moriyan様 再度のご回答ありがとうございます。 NO.6をご覧くだされば幸いです。

dradra33
質問者

補足

たびたびの質問恐れ入ります。 No.2のご回答でも当初の質問に対する ご回答になっていると思います。 こちらのご回答では第4引数まで 加えられているのはどうしてでしょうか? よろしくお願いします

  • Tom-3
  • ベストアンサー率32% (42/130)
回答No.3

「区」がない行があっても正常に動作させるためには If InStr(Cells(i, 2), "区") > 0 Then Cells(i, 4) = Left(Cells(i, 2), InStr(Cells(i, 2), "区")) _ & Chr(10) & Mid(Cells(i, 2), InStr(Cells(i, 2), "区") + 1) Else Cells(i, 4) = Cells(i, 2) End If とすれば大丈夫だと思います。

dradra33
質問者

お礼

Tom-3様 ご回答ありがとうございます。 「区」がない場合は想定していませんでした。 アドバイスありがとうございます

回答No.2

参考までに、Replace命令で行った一例です(^^; Cells(i,4)=Replace(Cells(i, 2), "区", "区" & vbLf, 1)

dradra33
質問者

お礼

Cor_moriyan様 ご回答ありがとうございます。 Replace関数で処理できることも 分かりました。大変助かります。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 Cells(i, 4) = Left(Cells(i, 2), InStr(Cells(i, 2), "区")) _ & Chr(10) & Mid(Cells(i, 2), InStr(Cells(i, 2), "区") + 1)

dradra33
質問者

お礼

mu2011様 いつもご回答ありがとうございます。 アドバイス非常に分かりやすかったです。

関連するQ&A