- ベストアンサー
CSVデータのカンマを取る方法を教えてください
- EXCELのマクロを使用して会計システムに取込むCSVデータ作成時に、ヘッダーとトレーラーにカンマが入ってしまう問題が発生しました。
- ヘッダーは3列、ディテールは20列、トレーラーは5列のCSVデータを作成し、ヘッダーとトレーラーのカンマを取り除きたいです。マクロを使ってカンマを取る方法を教えてください。
- CSVデータのヘッダーとトレーラーに余分なカンマが含まれているため、データを正しく取込むことができません。ヘッダーとトレーラーのカンマを取り除く方法をお教えください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#3のrukukuです。 実際のコードの例です。 この例は(実際に使用した例です)、各列のデータが文字列と数値が混ざっていますので適宜ダブルコーテーションをつけています。…変数、DCやDcCで行っています。 Cells(Rows.Count, "A").End(xlUp).Row はデータの行数が変化するため、最終行を拾うようにしています。 同様に、 Cells(i, Columns.Count).End(xlToLeft).Column で各行の最終列が分かります(iはこれから書き出しをしようとしている行番号です)。考え方として簡単なのは、この行数で判断して、ヘッダ、ディテール、トレーラーと処理を分けることです。 Open "C:\xxx\yyyy.csv" For Output As #1 C = "," DC = Chr(34) DcC = Chr(34) & "," For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row data = DC & Cells(i, "A") & DcC data = data & DC & Cells(i, "B") & DcC data = data & Cells(i, "C") & C data = data & Cells(i, "D") & C data = data & DC & Cells(i, "E") & DcC '…(中略) data = data & Cells(i, "W") & C data = data & Cells(i, "X") & C data = data & DC & Trim(Cells(i, "Y")) & DcC Print #1, data data = "" Next i Close #1 もしデータが数値だけでしたら、 Open "C:\xxx\yyyy.csv" For Output As #1 C = "," For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row For j=1 To Cells(i, Columns.Count).End(xlToLeft).Column data = data & Cells(i, j) & C Next j data = Left(data, Len(data) - 1) '最後のコンマを取り除く Print #1, data data = "" Next i Close #1 でできます。
その他の回答 (6)
- rukuku
- ベストアンサー率42% (401/933)
>早速、何度か試みてみたのですが、データが消えてしまいうまくいきませんでした。 正確な状況が分かりませんが、説明不足の部分もありましたので補足します。 このマクロでは、ブックやシートの指定を省略しています。 従って、元のデータとして使われるのは、マクロを起動した時点でのアクティブなブックのアクティブなシートです。 別のブックやシートがアクティブになっている状態で起動した場合には思い通りの結果になりません。 >ヘッダーとトレーラーの末尾に存在する連続するカンマだけいらない(末尾以外のカンマはいります)のですが それを行っているのが、 data = Left(data, Len(data) - 1) '最後のコンマを取り除く です。最後のカンマ(正確には最後の1字)を取り除いています。
- Cmi
- ベストアンサー率36% (132/364)
>早速、何度か試みてみたのですが、データが消えてしまいうまくいきませんでした。 rukukuさんは例を挙げてくださっていますので、ある程度の変更は必要です。 iは2からスタートだと1行目が消えてしまうかも? >ヘッダーとトレーラーの末尾に存在する連続するカンマだけいらない この例では、全行の末尾カンマを取り除きますが、If文などで条件を指定して、ヘッダーとトレーラーのみカンマ削除の処理を行うようにすれば良いとおもいます。
補足
式を変更してみました。 マクロの式で連続するカンマを取り除くとひとつの数字になってしまいました。 <例>のヘッダーですと、“1,200,090,624,2,,,,,”が“12000906242”というように。 カンマをひとつ残すようにすると“1,200,090,624,2,”となるのですが、やはり最後のカンマはいりません。 異なるカラム数にデータを作りたいのですが、うまくいきません。
- cistronezk
- ベストアンサー率38% (120/309)
要は、連続するカンマ17個と連続するカンマ15個を消去できればいいということではないかと思います。 それならフリーソフトを使って全ファイルの一括置換をすればいいのでは? ここにいくつかあります。 http://freesoft-100.com/pasokon/replace.html
補足
回答ありがとうございました。 早速、試してみました。CSVをTXTに変換してできましたが、置換後の文字列が空白を指定できないこと、フリーソフトを起動させてからカンマを取り除くのは手間がかかることから、できればマクロでできないかと考えている次第でございます。 でも面白いソフトがあるものですね。
- rukuku
- ベストアンサー率42% (401/933)
こんばんは 単純に、「ファイル→名前をつけて保存→csv形式を選択」という方法では、ご質問のようになります。マクロから行っても同じです。 しかし、マクロを使えば、1行ずつテキストファイルに書き込んでいくことも可能です。この方法ならば、行によって列数が違っても対応できます。詳細の説明を用意するには少々時間がかかるので、お待ちください。
- Sinogi
- ベストアンサー率27% (72/260)
全てのデータを1行づつ書き出したらどうでしょう? Const sFilePath = "C:\~\ファイル名.CSV" Open sFilePath For Output As #1 Print #1, "1,200,090,624,2" Print #1, "2,1,2415,2415,0,1,2009,802,1915,,0,0,1,1,,1,1915,1915,111,200908" ってなかんじでいかがですか?
補足
回答ありがとうございます。 データ数、データ内容共に変動するため、残念ながらひとつひとつプログラムすることができません。
- Cmi
- ベストアンサー率36% (132/364)
CSV形式というのはそういうものだと思いますので、 CSV形式で扱っている以上、こうなるものだと思います。 会計システムというのは市販のものなのでしょうか? CSV形式を読込めていない、会計システム側が問題のような気がしますが。
補足
回答ありがとうございます。 CSV形式でもできます。 今までオフコンでデータを加工しておりましたが、オフコン廃止に伴いマクロでデータを作ることになりました。 オフコン経由で作られたデータではヘッダーとトレーラーのカンマ(,)は取れています。
補足
rukuku様 ご丁寧な回答ありがとうございます。早速、何度か試みてみたのですが、データが消えてしまいうまくいきませんでした。 ヘッダーとトレーラーの末尾に存在する連続するカンマだけいらない(末尾以外のカンマはいります)のですが、他に方法があればご教示ください。よろしくお願いします。