• 締切済み

CSV 1つのセルに改行されてるデータを加工したい

度々、お世話になります。 添付画像のA1からI1まで項目があります。 CSVファイルに落とすと、住所のところが3行表示になります。 これを自分で追加した列、住所1、住所2、住所3へ 分解した形でデータとして持ちたいのです。 住所の1行目も2行目も3行目も、文字数は、お客様が入力することなので 何文字という定めはつけられません。 (お客様が入力するときは、全角で14文字位が限度かと思います。) いろいろとネットに公開されている方法を、全て試しましたが うまく結果が得られませんでしたので、質問致しました。 今までは、住所のところだけ手入力しなおして、送り状作成をしていましたが、 作業効率がもう限界的になっております。 どなたか、達人の方、どうかお力をお貸し下さい。 よろしくお願いいたします。

みんなの回答

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.5

ExcelのVBAだと、いちいち、マクロ部分をコピーしないといけないので、外部から実行できる「VBScript」でプログラムを組みました(従って、Windows限定です)。 以下のプログラムを、メモ帳やテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」部分は何でも構いませんが、「.vbs」は、必ず半角で「.vbs」でなければなりません。 出来たファイルとcsvファイルが欲しいExcelファイルを同じフォルダに放り込んで「~.vbs」をダブルクリックするだけです(シングルクリック→「Enter」の方が確実)。 放り込むExcelファイルは複数でも構いませんが、逆に関係のないExcelファイルを同じフォルダに入れてはいけません。 処理してしまいます。 結果、「D」列の「住所」が「E」~「F」列に振り分けられ(もちろん、「D」列の住所は1行でも2行でも問題ありませんが、3行までです。4行以上あった場合は、「G」列以降に振り分けてしまいますので、注意してください)、最後に元のExcelと同じ名前の「csv」ファイルを作ります(出来た「csv」ファイルは、「D」列の「住所」部分は空白になっています)。 これを、Excelのファイルがあるだけ、実行します。 処理がすべてすむと、「Finished!」と画面に表示しますので、「OK」ボタンをクリックしてください。 Option Explicit Dim a, b, i, j, v, w, x, y, z Set v = CreateObject("Scripting.FileSystemObject") Set w = v.GetFolder(".") Set x = CreateObject("Excel.Application") x.Application.DisplayAlerts = False x.Visible = False For Each a In w.Files b = LCase(v.GetExtensionName(a.Name)) If b = "xls" or b = "xlsx" Then Set y = x.Workbooks.Open(w & "\" & a.Name) Set z = y.Worksheets(1) For i = 2 to z.Range("A1").End(-4121).Row Dim c c = Split(z.Cells(i, 4).Value, vbLF) For j = 0 to UBound(c) z.Cells(i, 4).Value = "" z.Cells(i, j + 5).Value = c(j) Next Erase c Next y.SaveAs w & "\" & v.GetBaseName(a.Name) & ".csv", 6 y.Close Set z = Nothing Set y = Nothing End If Next x.Quit Set x = Nothing Set w = Nothing Set v = Nothing MsgBox("Finished!")

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.4

こんばんは セル内で改行されたデータなら、ご自分で3列追加する際に、2列だけ追加して、 住所の列を選択して、 データタブの区切り位置で、 カンマやタブなどの区切り文字によって~が選択された状態で次へ、 その他にチェックを入れて、 その他の文字の入力エリアでカーソルが点滅している状態で、 Ctrl+j とキー入力し次へ、 完了すると改行で区切られ3列に分割されます。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.3

》 CSVファイルに落とすと、住所のところが3行表示になります 「3行表示」になる原因は、セル内改行を2箇処施しているからで、セル内改行をせずにそのセルを“折り返して全体を表示する”に書式設定することをお奨めします。 何か問題があるなら、その内容を具体的に教えてください。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>添付画像のA1からI1まで項目があります。 下記のようなことですか? A1="名前"、B1="郵便番号"、C1="都道府県"、D1="住所"、E1="住所1"、F1="住所2"、G1="住所3"、・・・・ A2="□× ○△子"、B2="555-5555"、C2="京都府"、D2=[処理対象]、E2:G2=[処理結果]、・・・・ 関数で処理する場合は改行『CHAR(10)』が処理対象の文字列に2つ入っているのであれば次の数式で良いと思います。 E2=LEFT(D2,FIND(CHAR(10),D2)-1) F2=MID(D2,FIND(CHAR(10),D2)+1,FIND(CHAR(10),SUBSTITUTE(D2,E2&CHAR(10),""))-1) G2=SUBSTITUTE(D2,E2&CHAR(10)&F2&CHAR(10),"") 処理対象の文字列が2行のデータもあるときは代案を提示しますので補足してください。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

折り返して表示されているのではなく実際に改行されているのでしたら 住所データがD2だとして Sub Example() Dim t As Variant t = Split(Range("D2"), vbLf) ''vbCrLfとかvbCrでも試してください Range("E2").Value = t(0) Range("F2").Value = t(1) Range("G2").Value = t(2) End Sub

関連するQ&A