CSVデータのカンマを取る方法を教えてください

このQ&Aのポイント
  • EXCELのマクロを使用して会計システムに取込むCSVデータ作成時に、ヘッダーとトレーラーにカンマが入ってしまう問題が発生しました。
  • ヘッダーは3列、ディテールは20列、トレーラーは5列のCSVデータを作成し、ヘッダーとトレーラーのカンマを取り除きたいです。マクロを使ってカンマを取る方法を教えてください。
  • CSVデータのヘッダーとトレーラーに余分なカンマが含まれているため、データを正しく取込むことができません。ヘッダーとトレーラーのカンマを取り除く方法をお教えください。
回答を見る
  • ベストアンサー

CSVデータについての質問です。

現在、EXCELのマクロを使用して会計システムに取込むCSVデータを作成しております。 データフォーマットを見るとディテール(細かなデータ)をヘッダーとトレーラーで挟み込む形になっています。 ヘッダーは3列、ディテールは20列、トレーラーは5列です。 これらをCSV形式で作成し、メモ帳を開くと以下のようになります。 <例> 1,200,090,624,2,,,,,,,,,,,,,,,(←ヘッダー) 2,1,2415,2415,0,1,2009,802,1915,,0,0,1,1,,1,1915,1915,111,200908 2,1,3125,3125,0,1,2009,802,2225,,0,0,1,1,,1,2225,2225,111,200908 2,1,3233,3233,0,1,2009,802,1563,,0,0,1,1,,1,1563,1563,111,200908 8,84,435053,0,0,,,,,,,,,,,,,,,(←トレーラー) このように20列に満たない分、ヘッダーとトレーラーに,(カンマ)が入ってしまい、この部分に,(カンマ)があるとデータを取込めません。 この部分のカンマを取るマクロがあれば教えていただきたいのですが。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.5

#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 でできます。

kintta02
質問者

補足

rukuku様 ご丁寧な回答ありがとうございます。早速、何度か試みてみたのですが、データが消えてしまいうまくいきませんでした。 ヘッダーとトレーラーの末尾に存在する連続するカンマだけいらない(末尾以外のカンマはいります)のですが、他に方法があればご教示ください。よろしくお願いします。

その他の回答 (6)

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.7

>早速、何度か試みてみたのですが、データが消えてしまいうまくいきませんでした。 正確な状況が分かりませんが、説明不足の部分もありましたので補足します。 このマクロでは、ブックやシートの指定を省略しています。 従って、元のデータとして使われるのは、マクロを起動した時点でのアクティブなブックのアクティブなシートです。 別のブックやシートがアクティブになっている状態で起動した場合には思い通りの結果になりません。 >ヘッダーとトレーラーの末尾に存在する連続するカンマだけいらない(末尾以外のカンマはいります)のですが それを行っているのが、 data = Left(data, Len(data) - 1) '最後のコンマを取り除く です。最後のカンマ(正確には最後の1字)を取り除いています。

  • Cmi
  • ベストアンサー率36% (132/364)
回答No.6

>早速、何度か試みてみたのですが、データが消えてしまいうまくいきませんでした。 rukukuさんは例を挙げてくださっていますので、ある程度の変更は必要です。 iは2からスタートだと1行目が消えてしまうかも? >ヘッダーとトレーラーの末尾に存在する連続するカンマだけいらない この例では、全行の末尾カンマを取り除きますが、If文などで条件を指定して、ヘッダーとトレーラーのみカンマ削除の処理を行うようにすれば良いとおもいます。

kintta02
質問者

補足

式を変更してみました。 マクロの式で連続するカンマを取り除くとひとつの数字になってしまいました。 <例>のヘッダーですと、“1,200,090,624,2,,,,,”が“12000906242”というように。 カンマをひとつ残すようにすると“1,200,090,624,2,”となるのですが、やはり最後のカンマはいりません。 異なるカラム数にデータを作りたいのですが、うまくいきません。

回答No.4

要は、連続するカンマ17個と連続するカンマ15個を消去できればいいということではないかと思います。 それならフリーソフトを使って全ファイルの一括置換をすればいいのでは? ここにいくつかあります。 http://freesoft-100.com/pasokon/replace.html

参考URL:
http://freesoft-100.com/pasokon/replace.html
kintta02
質問者

補足

回答ありがとうございました。 早速、試してみました。CSVをTXTに変換してできましたが、置換後の文字列が空白を指定できないこと、フリーソフトを起動させてからカンマを取り除くのは手間がかかることから、できればマクロでできないかと考えている次第でございます。 でも面白いソフトがあるものですね。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.3

こんばんは 単純に、「ファイル→名前をつけて保存→csv形式を選択」という方法では、ご質問のようになります。マクロから行っても同じです。 しかし、マクロを使えば、1行ずつテキストファイルに書き込んでいくことも可能です。この方法ならば、行によって列数が違っても対応できます。詳細の説明を用意するには少々時間がかかるので、お待ちください。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

全てのデータを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" ってなかんじでいかがですか?

kintta02
質問者

補足

回答ありがとうございます。 データ数、データ内容共に変動するため、残念ながらひとつひとつプログラムすることができません。

  • Cmi
  • ベストアンサー率36% (132/364)
回答No.1

CSV形式というのはそういうものだと思いますので、 CSV形式で扱っている以上、こうなるものだと思います。 会計システムというのは市販のものなのでしょうか? CSV形式を読込めていない、会計システム側が問題のような気がしますが。

kintta02
質問者

補足

回答ありがとうございます。 CSV形式でもできます。 今までオフコンでデータを加工しておりましたが、オフコン廃止に伴いマクロでデータを作ることになりました。 オフコン経由で作られたデータではヘッダーとトレーラーのカンマ(,)は取れています。

関連するQ&A

  • 助けてください!CSVファイル作成

    こちらのエクセル97で作成した表データを取引先よりデータをCSV形式で定期的に送って欲しい旨要請されました。 単に保存形式をCSVにすればいいのだと思い、OKしたのですが・・・・・。 なんと、先方が言うには、一つの表はワンレコードにしなさいとのこと。どういう意味かきいたら、要はカンマ区切りの1列のデータにしろと言うことのようです。 ところがこちらの表は何行にも別れているため(表ですから当然ですが)1行に直すと256列をかなり超えてしまうのです。ということはエクセルの1行にはおさまらなくなり、エクセルシートをCVS形式で保存するというやり方では出来ません。こういう場合、いったいどうすればいいのでしょうか?

  • csv形式のテキストファイルをexcelでCSV化するマクロについて

    今、ひとつのフォルダに大量にCSV形式で保存されているテキストファイルを excelのマクロを使って、ひとつのexcelにCSV形式(.xls)で保存するものを作成している のですが、今までマクロを使ったことがないため、まったく歯が立ちません。 もう少し詳しく書くと、テキストファイルの中身は、 01,54521,18:01:02,110230 というようになってます。 これを、excelのマクロを使い、カンマ区切りで取り込むような感じです。 すみませんが、回答お願いいたします。

  • ExcelのCSV形式について

    ExcelデータをCSV形式で保存するとき文字列はダブルコーテーション、数字列はそのままでカンマ区切りしたいです。確か123のCSV形式はそうなってたと思います。お手数ですが御回答、宜しくお願い致します。

  • CSV出力について

    csvファイルについて質問です。 新しく購入したパソコンでCSVファイルを作成しようとしたら メモ形式でしか表示されません>< 過去に使用していたパソコンでは拡張子をCSVにするだけで カンマ区切りのデータはダブルクリックして開いたら自動的にCSVファイルとして表示されていました。 現状は右クリックでプログラムから開くでエクセルを選ばないといけません。 自動で認識してくれるようにするにはどこで設定したらいいですか?

  • CSVファイルのフォーマット

    CSVファイルの標準的な定められたフォーマットって存在するんでしょうか? 例えば、データとして、 ・改行が入っている ・カンマ(,)が入っている とかの場合、 excelで作成したcsvファイルは、ダブルコクォートで挟まれているようです。 そして、その中に"がある場合は””と二つ重ねているようです。 コレが標準的なフォーマットなんでしょうか?

  • ExcelファイルをCSV 形式で保存するには?

    ExcelファイルをCSV 形式 (Windows、カンマ区切り) (*.csv)にして書類を提出するように言われたのですが、その方法について教えてください。 データの内容は会社の詳細で、1社につき100項目のデータがあり、それが50社あります。その場合、1社目のデータをA列に、2社目のデータをB列にというように入力すればよいのでしょうか? Excel の [名前を付けて保存] ([ファイル] メニュー) を使って、CSV (カンマ区切り) (*.csv)ファイルで保存すると、各項目がカンマで区切られるのでしょうか? 1レコード目と2レコード目はどういった区切りになるのでしょうか? またファイル形式はCSV 形式でと言うことですが、提出するファイル名の拡張子を.txtとしないといけないのですが、それはどうすればいいのでしょうか?

  • EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込も

    EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込もうとした場合、csvデータの同一セル内に改行データがあると、ずれて表示されてしまいます。 改行を取り除くのはclean関数があることは知っていますが、マクロを利用して、EXCELのデータ→外部データの取り込みの選択だけで取り込む方法はないでしょうか?ご教示ください。

  • csvファイルのヘッダとカンマの関係

    ヘッダ付きのCSVデータがあります。 テキストファイルとしてエディタで開くとカンマ区切りでした。 エクセルで開くと、うまくヘッダに沿ってデータを確認できます。 そのセルの値の中には、"カンマ"が含まれています。 なぜエクセルは、カンマ区切りのデータで値にもカンマが存在しているのにヘッダに沿って表示できるのでしょうか? また、このデータをデータベースに登録する時に、 カンマ数で、エラーしました。エクセルのように、 ヘッダに沿ってデータをコピーする方法を教えてください。

    • ベストアンサー
    • MySQL
  • csvカンマ区切りデータに=""を入力したい

    csvカンマ区切りデータに、例えば、 ="00",="123",="456" といった感じで入力したいのです。 大元のcsvカンマ区切りデータで、 00,123,456 が入っているので、これをExcelを使ってText変換や書式設定で文字列にして みたのですが、csvデータとしては=""としては保存されていないのです。 どなたか、こういった型変換に詳しいかたご連絡をお待ちしています。

  • CSVデータをエクセルのセルに入れたい・・・

    よろしくお願いします。 CSVデータを当方ではエクセルで開いてます。 カンマ区切りごとのデータがエクセルのセルに1つずつ入力されてるので 不用データを行や列ごと削除できるので便利に使っていました。 が、他のPCでデータを同じように加工しようとしたところ、最初のセルに全て連続して入っているという状態で、上記のような作業が出来ませんでした。 5台のPCともXPでエクセル2003です。 テキスト形式・タブ区切り・カンマ区切りなどなど専門的なことが良く判っていないため、説明もうまくできませんが、PCの設定なのか?セルに1つづつ分ける方法があるのか?何でわたしのだけ? ?? 引継ぎが出来ず困っておりますのでどなたかお願いします。教えてください!!

専門家に質問してみよう