• 締切済み

EXCELのCSV取り込み

お世話になります。 EXCELのCSV取り込みで悩んでおります。 生データ date=2018-04-13 time=16:00 type=ok country="japan" date=2018-04-13 time=16:10 type=ok country="united states" date=2018-04-13 time=16:20 type=ng country="china" こういうタイプのデータをCSVで取り込む際に、 区切り文字をスペースで取り込むと、 united とstates が別のセルになってしまい思うようになりませんでした。 理想の形としては、項目ごとに date time type country 2018-04-13 16:00 ok "japan" 2018-04-13 16:10 ok"united states" 2018-04-13 16:20 ng "china" このように、項目毎イコール以下という形で取り込みたいのですが、 良い方法はないでしょうか。 最悪””でくくられている部分は分割しないというスペース区切りのセルわけでもいいのですが…。 お力添えお願いいたします。

みんなの回答

  • SI299792
  • ベストアンサー率47% (789/1649)
回答No.6

一番簡単な方法は、 【カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ】を選び【次へ】をクリック。 区切り文字で【その他】にチェックを入れ[=] を入力【完了】を選択。 後から、timeなどを消す必要がありますが、 =LEFT(B1,LEN(B1)-5) のような式で簡単に消せます。 データを見ている限り、マクロまで作る必要はないと思います。

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

こんなのはCSVファイルではない。 ーー EUC(EndUserComputing)のために、会社のシステム部署が作ったのかもしれないが、その人が、その後のユーザーのレベルのことを、よくわかってないのではないか。 項目(=列)見出し的な内容を=の前に入れているのだろうが、CSVでも1レコード目を見出しとみなすかどうかは、指定できる場合=システム(例SQLでの処理など)も多い。 ーー 本件の、例データでは「スペース区切り」というべきではないか。 しかし、スペース区切りとすると、「United State」などの国名の中のスペースは障害(処理が複雑)にになる。 ーー こういうのは、1回限りの処理でなければ、VBAを使って処理するべきだろう。 VBAでは、例えば Sub test02() Open "C:\Users\XXX\Documents\テストデータ1.txt" For Input As #1 ’上記ファイル名のフルパスは適宜実際に合わせて修正のこと i = 1 While Not EOF(1) Input #1, r '--- MsgBox r t = Split(r, " ") '--- For j = 0 To UBound(t) p = InStr(t(j), "=") t(j) = Replace(t(j), """", "") Cells(i, j + 1) = Mid(t(j), p + 1, Len(t(j)) - p) Next j '--- i = i + 1 Wend Close #1 End Sub のような簡単なプログラムでできる。 ーー 結果 A-E列 2018/4/13 16:00 ok japan 2018/4/13 16:10 ok united states 2018/4/13 16:20 ng china united statesがD,E列に分かれる。 ーー ここまでは、エクセルの操作 データー区切り位置 でもできるだろう。 ーー これを克服しようとして、3日ほど、VBAで考えたが2-3行の習性で済む、良策が思い浮かばない。 複雑なことになる。 これを (1)VBAプログラムで修正する OR (2)少数行なら、手作業で修正する でカバーしてはどうか。 ーー 参考 country列でダブルコーテーション” "の中の1半角スペースのあるセルは、 If r Like "*country=* *"  then で見つかるようだ。

yuhki_m
質問者

お礼

お世話になります。ご連絡が遅くなりました。 >CSVではない 確かにその通りです。 誰が作ったか分からない仕組みのデータ処理ほどつらいものは無いです。 一度挑戦してみたいともいます。 ありがとうございました。

  • msMike
  • ベストアンサー率20% (368/1813)
回答No.4

添付図が参考になりますか? 判読困難御容赦 m(*_._*)m

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

》 こういうタイプのデータをCSVで取り込む際に 「CSV」とは Comma Separated Value (カンマ区切り)の意味なので、 カンマを含まないタイプのデータは CSV とは称されないはずですが、貴方はなぜ「CSVで取り込む」と仰ったのですか?

  • szk9998
  • ベストアンサー率45% (1027/2242)
回答No.2

そもそも論ですが、そのデータはCSVではないですし・・・ CSVとはカンマ区切りのテキストファイル形式データです エクセルはテキストファイルのスペース区切りとして何とか データ化をしてみた、その結果ということでしょう。 一番いいのはデータを直すこと CSVならば、 date,time,type,country 2018-04-13,16:00,ok,"japan" 2018-04-13,16:10, ok,"united states" 2018-04-13,16:20, ng,"china" として、一行目を項目名として認識するように指示して あげるのが正しいCSVからの取り込み方法です あなたのやり方では、テキストファイルをスペースで区切っているとしか 認識できないので、ダブルクオーテーションで挟んでいようがいまいが、 ただのスペースとしか認識できないということでしょう ちなみに、 手元のOffice365バージョンでデータ→テキストまたはCSVから・・・で試してみたところ、ダブルクオーテーション内のスペースは区切り文字として認識しませんでした。ただ、項目名はそのままですが。

yuhki_m
質問者

お礼

お世話になります。 他の方もおっしゃるとおり、CSVではなく、 スペース区切りの何だかよく分からないテキストデータが正解だと思います。 データを直す・・・。 出力している側のアプリケーションを触れるだけの技術があれば良かったのですが、 お恥ずかしい話、 引継ぎを受けた上司同様に、テキストデータを目で追って、 スペース区切りでくずれたデータを手で直すしか知識が無く、 引き継いで以降、項目名以外でスペースが入っている文章(国名や担当者名)に関しては、 事前に、メモ帳の置き換え機能で、 United states をUnitedStatesなどに置き換えて処理していました。 Office365の取り込み機能は試したことが無いので、 今使ってる社内Officeも2007から2016か365に変わるはずですので、 一度試してみたいと思います。 ありがとうございました。

  • SI299792
  • ベストアンサー率47% (789/1649)
回答No.1

サンプルデータのように区切り位置が決まっているなら、 読み込む時に、 「スペースによって右または左に揃えられた固定長フィールドのデータ」 を指定します。 「次へ」を押すと、「フィールドの幅を指定してください。」が出ます。 statesの前にも区切りが出るので、ダブルクリックで消します。 理想の形にしたいのなら、=の後4か所をクリックします。 「次へ」を押すと、「区切ったあとのデータ形式を選択してください。」 =のある4か所を「削除する」にします。 但し、タイトルはできないので、行を挿入して自分で作る必要があります。 もし、区切り位置が決まっていないなら、数式を使って D列とE列を結合するか、マクロを作るしかないです。マクロならタイトル行を作ることもできます。

yuhki_m
質問者

お礼

お世話になります。 サンプルデータは4項目程度ですが、 実際の生データはもう少し長いデータになっており、 フィールド幅区切りだと、どうしてもずれが生じてしまいます。 引き継ぐ前も2~3日かけて処理を行い、 必要な項目を抽出して報告データにしているそうです。 これを機会にEXCELマクロやVBの勉強を行い、 自作でがんばってみるか、来年新人を採用して貰い、 この作業を引き継いでもらいます。 ありがとうございました。

関連するQ&A