• 締切済み

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

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

noname#252700
noname#252700

みんなの回答

  • 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% (363/1775)
回答No.3

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

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答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
  • ベストアンサー率65% (1620/2460)
回答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

  • CSV 1つのセルに改行されてるデータを加工2

    お世話になります。 エクセル、VB開発者の皆様からご解答を頂戴しました。ありがとうございました。 ひとつひとつ確めさせていただきます。本当にありがとうございます。 補足をというお声もありましたので、 データが本当に3行に改行されているかを確認してみました。 添付画像の住所の表示方法は、折り返しで表示を解除してあります。 上段に、セルの内容を見えるようにしました。3行になっています。 これを、全データに対して、一度に行える、マクロ、BV、または関数での 達人者の方からのお知恵を、スキルをお借りできればと切に思っております。 どうぞよろしくお願い致します。 *住所1、住所2、住所3は、私が挿入した列で、CSVに落としたときには、ないものです。

  • csvファイルでの出力について

    C言語初心者です。 プログラミングにおいて質問なのですが、csvファイルを読み込み、 そのデータを用いて計算し、csvファイルで出力するという問題なのですが、C言語においてcsvファイル形式で出力するにはどのような方法がありますか? 補足:ラベル行に全角文字を入力しないといけません。

  • CSVから読み込んだデータの保持とソート

    お世話になっています。VB.NET+CSVに関する質問です。 現在VB.NETで、CSVから読み込んだレコードをある項目を基準に並び替え、一覧にして画面に表示するというプログラムを作っています。 こういう場合のCSVから読み込んだデータの保持の方法と、その並び替えの方法にはどういうやり方がありますか? いくつかのパターンがあると思いますが、教えてください。 以下はCSVの情報です。 ・1行が1件のレコード ・項目1を昇順で並び替える ・CSV項目:項目1(半角英数字)項目2(タブ)項目3(半角・全角文字) ・CSV件数:1000行以下

  • TEXTBOXの改行について

    1. TEXTBOXは2行分とってある。 全角60文字の入力を認め、1行は30文字である。 2. TEXTBOXに改行の入力は認めない(MULTILINEだっけかをFALSEにする) という条件で、30文字入力したら、自動で2行目に入力させたい。 って事をさせたいのだが、どうしていいか分かりません おしえてください。

  • Excelのセル内の行数を制限する

    現在、Excelでセルの文字制限を行いたいと思っているのですが。 行数の制限はできるのでしょうか? 文字制限で96文字以内というのはできたのですが 行数は何か方法があるのでしょうか? 全角でも半角でも6行以上の入力をできないようにしたいのです。 全角8文字x6行(48文字) 半角16文字x6行(96文字) と表示制限を行いたいのです。

  • PHPでCSVファイルを編集したい

    PHPを触りだして間もない者です。 PHPでCSVファイルを編集したいのですが、上手くいきません。 CSVファイルの中身は{商品番号,名前,住所,年齢}が数行入力されています。 具体的にはPHPで引数の商品番号を基にCSVファイルで編集する行数を決定して、その行の一部項目を変更したいのですが、良い方法はありますでしょうか?

    • 締切済み
    • PHP
  • Visual C++によるcsvファイルの読み込みについて

    Visual C++を使い始めたばかりの初心者です。 恐縮ながら、Visual C++でのcsvファイルの処理方法についておたずねさせていただければと存じます。 通常のスクリプト言語では、1行読んできて、"," で split をしてやることで、csvファイルを処理できるのですが、Visual C++ではどのようにするのが効率がいいのでしょうか? csvファイルを簡単に取り扱うことができるようなクラスライブラリが提供されているものなのでしょうか?それとも、1文字1文字、コンマを判定していくのが普通なのでしょうか? よろしくお願いいたします。

  • csvファイル検索

    フォームから検索文字を入力してもらい 4列、2000行ほどのcsvファイル内を検索し、ヒットしたらその行を出力するというものを作りたいと考えています。 csv  ------------------------- 1|自転車 バイク 2056,タイヤ,ペダル,ハンドル  |  ------------------------- 2|バイク 2001,タイヤ,ペダル,ハンドル      |  ------------------------- 3|自転車 バイク 2001,タイヤ,ペダル,ハンドル  |  ------------------------- 4|自転車 バイク 5601,タイヤ,ペダル,ハンドル  |  ------------------------- といった行があったとして、フォームに "自転車 56"と入力した際、 1行目3行目4行目の文字列を表示したいのですが、その際 1行目と4行目は2つヒットしているので3行目より上に表示させたいのです。 yahooなどの検索サイトのor検索のようなものです。(スペース区切り) 正規表現でやればいいのか?と思い手をつけてみたのですがどうも違うようですし、もしかしたらPHPで作ろうというのが間違っているのかもしれませんが、何か方法及び参考になるurlがありましたら教えてください。 よろしくお願いします。 windows2000 php4-4.3.8-18です。

    • 締切済み
    • PHP
  • 困っています!! ExcelをCSVファイルにしたあと。

    ご存知の方にとっては恥ずかしいくらいの質問かもしれませんが、どうか教えて下さい! win xp、Office2000を使用しています。 Excelでデータの編集が終わったあとに、ファイル形式をCSVで保存するよう言われ、入力後に「ファイルの名前を付けて保存」→ファイルの種類で「CSV」を選択して保存を致しました。 その際、ファイル名は「英小文字のみ.csv」にしています。 保存後、確認の為に再度そのファイルを開いたところ、 1、文字幅に合わせて大きさを変えた列幅が基準値に戻ってしまっている。 2、「文字列」を使用して、ゼロから始まる数字を打ち込んだ列がゼロを表示しない(01>1)、数字を全角で打ち込んでいるのに半角に戻ってしまう(15>15)。 という状態になってしまいます。 テキストエディタで確認したところ、きちんとカンマで区切られてはいるのですが、上記の2に関しては、半角になったままだったりと、入力した状態での表示ではありませんでした。 保存する際に、 「英小文字のみ.csv」はCSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。 というメッセージが出ます。 Excelに関しては、まったくといっていいほど初心者です。苦手で逃げていた自分が悪いのですが…。 今回CSVというファイル形式も初めて知りました…。 NETで調べたりしてみたのですが、どうしてもわかりません。 CSVにしたあとに、通常1のようになってしまうものなのでしょうか? また、入力したままの状態が表示されるようにするには、どうしたらよいのでしょうか? ご存知の方がいらっしゃいましたら、ぜひお知恵を貸してください! よろしくお願い致します!

  • Excelの範囲指定セルににcsvファイルのデータを貼り付け

    Excelファイルの任意のセルにCSVファイルのデータを貼り付けたいと思っています。 各ワークシートにCSVファイルのデータを読み込むマクロを書いて実行していたのですが、ファイルが増えてしまったのでもっと簡単に処理ができたら、と思い相談させていただきます。 Visual C# 2008の勉強を始めて間もないので初歩的な質問かと思いますが、宜しくお願い致します。 希望する処理の流れは 1.「Excelファイル選択」ボタンを押すと、指定のフォルダ内のxlsファイルをリストボックスに表示 2.Excelファイル選択 3.「CSVファイル選択」ボタンを押すと、指定のフォルダ内のcsvファイルをリストボックスに表示 4.Excelファイルに対応するCSVファイル選択 5.「データ読込」ボタンでテキストファイルのデータをExcelファイルの指定のセルに貼り付け 6.Excelファイルを保存して終了 1.と3.のリストボックスへのファイル表示はできているのですが、選択したExcelファイルにcsvファイルのデータの貼り付けの方法がわかりません… それぞれのファイルを変数に格納して、更にcsvファイルのデータを配列変数に流して、繰り返し処理で貼り付けていくのかな?と想像しているのですが… http://support.microsoft.com/kb/302096/ja 上記のページを参考にしたのですが、外部ファイルのデータを指定のセルに入力するにはどうしたらよいのかわかりませんでした。 ・Excelファイルの指定のセルはB12~H1011までの7列1000行です。 ・csvファイルは1000行に満たないこともあります。 ・入力するデータ型は整数と文字列です。 PC環境 Windows XP SP3 Excel 2007 Visual C# 2008 要領を得ない説明で申し訳ありませんが、どうぞ宜しくお願い致します。

専門家に質問してみよう