• 締切済み

VBAでCSVをExcelに取り込む時に、途中の改行を取り除くには

VBAでCSVをExcelに取り込む時に、途中の改行を取り除くには はじめて質問させていただきます。 内容はhttp://okwave.jp/qa/q2793590.html のものに似ていまして、あるシステムが吐き出すCSVを、Excelで作ったリストの雛形にVBAで取り込むのですが、CSVの途中で改行されていたりするために上手くいきません。 元のCSV例 111,AAA,aaa,BBBB,bbbb 222,CCC,ccc,DDDD,dddd 333,EEE,eee ,FFFF,ffff 444,GGG,ggg,HHHH,hhhh ↓ 取り込んだリスト例  A | B | C | D | E ──┼──┼──┼──┼── 111 |AAA |aaa |BBBB|bbbb ──┼──┼──┼──┼── 222 |CCC |ccc |DDDD|dddd ──┼──┼──┼──┼── 333 |EEE |eee   |   | ──┼──┼──┼──┼──     |FFFF|ffff |   | ──┼──┼──┼──┼── 444 |GGG |ggg |HHHH|hhhh 当然の結果なのですが、これを例えばeeeの後ろの改行だけを削除して、333~ffffまで一レコードとして読み込ませたいのです。が、 最後の改行と途中の改行の区別をどうつけさせればいいのか、どの様にしたらいいのか見当がつきません。 とりえあず、 ・先頭(A列)には必ず数字が入る ・カンマの数(レコード数?)は固定 ・CSV中の余分な改行が入る時と入らない時がある このあたりが判定の手がかりになると思いますが、厚かましいお願いで恐縮ですが、ヒントになる様なコードをご教授いただけますでしょうか。 何分初心者なもので、情報不足な点ありましたらご指摘下さい。 よろしくお願い致します。

みんなの回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

Excelでやるより、そのCSVファイルをTeraPad等のテキストエディタで改行+「,」を「,」に置換してからExcelで開いた方が手っ取り早いように思います。 それじゃ駄目?

全文を見る
すると、全ての回答が全文表示されます。
  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

回答番号:No.3 です。失礼しました。orz >あるシステムが吐き出すCSVを >元のCSV例 >: >333,EEE,eee >,FFFF,ffff セル内改行と限らないから 333,EEE,"eee[改行コード]",FFFF,ffff とダブルクォートで囲まれてるわけじゃないんですね。 ひょっとして[改行コード]も vbLf か vbCrLf かで区別されてるかも判らない? すみません、勘違いしました。 取り敢えず私のレスは無視しておいてください。 #修行のタビに出ます...orz

全文を見る
すると、全ての回答が全文表示されます。
  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

データ量が膨大で、CSVファイルを開くのに時間がかかるという状況以外は Openメソッドで普通に開いてコピー処理したほうが簡単です。 開く時間を短縮したいという事であれば、事前にセル内改行を取り除く方法や、 Line Input読込み時に都度チェックする方法などあります。 前者の事例は ■EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込も... http://okwave.jp/qa/q5972724.html?order=asc #状況的にはOpenメソッドで充分な案件だったと反省...orz 後者は 『 CSVRead SplitCsv 』 をキーワードにgoogle検索すると ■ダブルクォートのCSVを読み込むには? http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200807/08070010.txt などhitします。参考にしてみてください。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

これでうまく行くかどうかデータの規則性の情況に拠るが Line Inputで1行分を変数に読み込む。 s殿変数に対し、カンマでSplit関数を使い配列に分ける。 要素数が、決まりの5個より少なければ、次のレコードも読んでつなげてみる。 6個以上になる場合があるようだと絶望。か何かルールを設定(6個以上を無視やセルに設定して人間が目視チェックなど) 無いとして、5個の場合は5列のセルにバリアント変数のデータを代入。 1レコードの中のカンマの数を数えることと同様のことをやっている。 Split利用は 例えば Sub test01() a = "aa,sdf,gh,j,k" s = Split(a, ",") Range("A1:E1") = s End Sub のRange("A1:E1") = s が(1行で)できることがメリット。

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

CSVを読むのは、テキストファイルとしてOPENしておいて、LINE INPUTですかね? LINE INPUTで読み取った際に受け取る変数を「次工程」にまわす前に、カンマの数を数える。 ・カンマの数が一致するなら、現在の読み取り結果を「次工程」にまわす ・カンマの数が不足するなら、さらにCSV次行を読み、初回の読み取り結果と連結して、カンマの数を数えるところに戻る。 ・カンマの数がオーバーするなら、データ異常で打ち切る。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAでCSV内にある改行を取る方法

    あるシステムが吐くcsvファイルの項目の中に改行が入っているものがあります。 例) 01,aaa,bbb(改行)bbb,ccc(改行) 02,ddd,eee,fff(改行) 03,ggg(改行)ggg,hhh,iii(改行) このCSVファイルをエクセルのマクロで読み込んでシートに展開したい のですが、項目中にある改行で別レコードを認識してしまいます。 結果) A B C D ---+---+---+--- 01 aaa bbb  bbb ccc 02 ddd eee fff 03 ggg ggg hhh iii これを以下のようにしたいのですが・・・ A B C D ---+------+------+---- 01 aaa bbbbbb ccc 02 ddd eee fff 03 gggggg hhh iii どうやればよいでしょうか? ご教授お願いいたします。

  • エクセル マクロVBAの VLOOKUPと条件分岐について

    エクセルのマクロVBAで質問です。 1つのシートに下記のような(1)(2)のデータと 同ブック内・別シートに(3)(4)のデータがあり (1)のデータ内を検索して、 別シート内の置換リスト(3)に値が存在すれば、 (4)の値を(2)に記載し、なければ、(1)の値をそのまま(2)に記載 するという内容にしたいのですが、どうもうまくいきません。 (1)    (2) AAAA ■■■←AAA BBBB ■■■←JJJ CCCC ■■■←CCC DDDD ■■■←GGG EEEE ■■■←UUU FFFF ■■■←FFF 置換リスト(同ブック内・別シート) (3)    (4) BBBB JJJ DDDD GGG EEEE UUU いい方法はないでしょうか。

  • CSVデータをツリー表示させたい

    業務で、WEBサイトにCSVデータを表示させたいと考えています。 CSVデータは、毎日更新されるもので、行数も日々変更されます。 項目の中に「レベル」という項目があり、この「レベル」の値を使って、 ツリー表示出来ないかと考えています。 希望としては、決められたフォルダに決められたファイル名で、 CSVデータを置けば、自動的にWEB上にツリー表示されるという ことです。 J-query等で、これを実現出来るプラグインが無いか探しているのですが、 なかなか希望に合うものが見つからず、困っています。 (CSVをWEB表示するものは見つかるのですが、ツリー表示出来る ものが見つかりません) 何か、良い方法があれば、ご教示頂けませんでしょうか? 例 コード  レベル 品名  規格 ・・・・    コード     レベル 品名  規格 ・・・・  1234    1   AAA   aaa       -1234       1    AAA   aaa 2345    2   BBB   bbb        ∟2345     2    BBB  bbb 3456    3   CCC   ccc          ∟3456   3    CCC  ccc 4567    3   DDD   ddd          ∟4567   3    DDD  ddd 5678    3   EEE   eee           ∟5678   3    EEE  eee 6789    4   FFF   fff             ∟6789  4    FFF   fff 7890    3   GGG  ggg           ∟7890   3    GGG  ggg

  • エクセルで

    教えてください。2つの表を1つにしたいのです。  あ.xls い.xls aaa 1個 bbb 2個 bbb 2個 ccc 1個 eee 3個    eee 1個 ggg 0個        ↓       う.xls aaa 1個 bbb 4個 ccc 1個 eee 4個 ggg 0個 このような結果を作るにはどうしたらいいでしょうか? 宜しくお願いします。

  • EXCEL VBA split関数について

    Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。

  • 改行のあるCSVファイルをExcelに読み込みたい

    CSVファイルをExcelにインポートしたいのですが CSVファイルのデータ内に改行が入っていたので、レイアウトが崩れて、 うまくExcelにインポートできない状態です。 改行を置き換えで取り除くと、すべて横並びになってしまいます。 1レコードは59項目と決まっているのですが、手作業で改行を入れるのは 数が多く難しそうです。 なんとかうまく取り込む方法はないでしょうか? プログラミングは全くわかっていない初心者ですが、 エクセルのVBAにコピペして実行することは可能です。。。 カテ違いだったらすみません><

  • Excelで改行が含まれたフィールドをcsvに変換する際改行を取る方法を教えてください

    ExcelをCSVファイルにする必要があり、レコードの形式を "aaa","bbb","ccc"改行コード にしたいいと考えております。(それぞれのフィールドに改行コードは不可) Excelファイル時に、改行を置換(Ctrl+JをNULLで置換)しCSVで保存しエディタで見ると改行が残っています。(CR-LFがCRに置換されているため) 使用しているエディタはEmエディタです。 Accessでインポートしたのちtxtでエクスポートしても結果は一緒でした。 フィールド内の改行だけを取る方法はありますでしょうか。

  • VBAでCSVファイルを分割したい

    VBAを利用して、あるCSVファイルを一定のレコード数ごとに新しいファイルにファイル分割したいです。 やりたいことは、以下のようなイメージです。 関連サイトなどを参考に自分なりに取り組んでみましたが、なかなかうまくいきません。 VBAでなくても実現できそうですが、ここまでやったので勉強のためにもVBAでやりたいです。 サンプルコードなど教えていただけるとうれしいです。 ヒントでも結構ですので、よろしくおねがいします。 (2レコードずつ分割する例) sample.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 aaa@aa.aa,123,あいうえ,111-111 bbb@bb.bb,456,かきくけ,222-222 ccc@cc.cc,789,さしすせ,333-333 ddd@dd.dd,012,たちつて,444-444 eee@ee.ee,345,なにぬね,555-555 fff@ff.ff,678,たちつて,666-666 ↓↓↓ ☆sample_1.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4   →各ファイルにヘッダも入れたいです。 aaa@aa.aa,123,あいうえ,111-111 bbb@bb.bb,456,かきくけ,222-222 ☆sample_2.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 ccc@cc.cc,789,さしすせ,333-333 ddd@dd.dd,012,たちつて,444-444 ☆sample_3.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 eee@ee.ee,345,なにぬね,555-555 fff@ff.ff,678,たちつて,666-666

  • Excel VBA サブディレクトリの取得について

    Excel VBA についての質問です。 私は、VBAの初心者です。 フォルダ選択ダイアログを開き、あるフォルダを選択させます。 選択したフォルダ配下のファイルとサブフォルダにあるファイル一覧とそのファイルのパス取得したいです。 【例】D:\TEMP\AAA フォルダを選択 D:\TEMP\AAA  D:\TEMP\AAA\BBB\CCC.txt D:\TEMP\AAA\BBB\DDD\EEE.txt D:\TEMP\AAA\BBB\DDD\FFF.txt GGG.txt が存在する。 まず、フォルダAAAまで選択されたら、 以下の結果がエクセルに出力したいです。 BBB         CCC.txt BBB\DDD        EEE.txt BBB\DDD        FFF.txt               GGG.txt うまく伝えないかもしれないですが、ご教授お願いいたします。

  • CREATE VIEWについて

    2つのテーブル(basecodeとaddcode)からVIEWを作りたいのですが、 そのVIEWについてご教授いただきたく。 <TABLE名:basecode> ---------------------- no name area code ---------------------- 1 aaaa 2 102 2 bbbb 4 103 3 cccc 4 203 4 gggg 3 303 5 eeee 3 101 6 ffff 5 104 7 hhhh 1 115 ---------------------- <TABLE名:addcode> ----------------------------------------- base anum bnum cnum dnum dmy no ----------------------------------------- bbbb 1 1 1 1 aaa 2 cccc 12 13 10 2 aaa 3 cccc 12 13 10 0 aaa 3 cccc 12 13 10 5 aaa 3 dddd 12 15 3 1 aaa 3 dddd 12 15 3 3 aaa 3 dddd 12 15 3 4 aaa 3 eeee 10 3 12 1 aaa 5 eeee 10 3 12 2 aaa 5 eeee 10 3 12 3 aaa 5 eeee 10 3 12 4 aaa 5 eeee 13 12 15 3 aaa 5 eeee 13 12 15 0 aaa 5 eeee 13 12 15 1 aaa 5 eeee 13 12 15 2 aaa 5 hhhh 4 3 11 0 aaa 7 hhhh 4 3 11 2 aaa 7 hhhh 4 3 13 2 aaa 7 kkkk 0 0 0 0 aaa 9 ----------------------------------------- VIEWの抽出は以下の通り。  basecodeのno  basecodeのname  basecodeのcode  addcodeのbase  addcodeのanum  addcodeのbnum  addcodeのcnum  addcodeのdnum VIEWの作成条件としては以下の通り。 <条件> TABLE名:basecodeとaddcodeのnoが存在し、かつ、 baseaddのnoが複数あり、baseが同じものは以下で判断  ・anumとbnumとcnumが同一であればその中のdnumが最小であるレコードを抽出  ・anumとbnumとcnumが異なれば別々に抽出 上記より、以下のように抽出したい。 <TABLE名:basecodeview> ----------------------------------------------- no name code base anum bnum cnum dnum ----------------------------------------------- 2 bbbb 103 bbbb 1 1 1 1 3 cccc 203 cccc 12 13 10 0 3 cccc 203 dddd 12 15 3 1 5 eeee 101 eeee 10 3 12 1 5 eeee 101 eeee 13 12 15 0 7 hhhh 115 hhhh 4 3 11 0 7 hhhh 115 hhhh 4 3 13 2 ----------------------------------------------- よろしくお願いします。