• 締切済み

カンマ区切りCSVファイルをVBAで読み込みたい

こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

エクセルでお仕事 http://www.asahi-net.or.jp/~ef2o-inue/menu/menu05.html 一応参考(VBAの部分を見ておくこと) カンマ区切りといいつつもこれはカンマで区切りがわからない。 作成する側で作りなおすことを考えるのがまず先。 金額の「,」が出現したときは千円単位なので「,」の後に3桁続く。 金額の末尾で 10円単位以上しかないなら必ず「0,」。 100円単位以上しかないなら必ず「00,」。 金額の単位は100円単位以上しかない?。 金額の単位は1000円未満はあるのか?。 扱う金額がどういうものか、で多少のルールが浮かびあがります。 1 000 2 000 1 500 3 000 1 000 2 500 2 000 で「000」はあり得ないから直前のカンマは金額のカンマ。 1ケタ(1円単位)はあり得ないから「1」「500」の間のカンマも金額のカンマ。 「123,500」も「123」から判明、「100,500」がわからないパターンかどうか。 できるだけのことはやってあとから合体するという手もあります。 いずれもVBAで対応になるかと思います。 が、金額を扱うので不正は許されない。 データを扱いやすくするのがベターです。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

なんだかひどいデータですね。失敬。 ありゃ,OpenTextも効かないや。。 というワケでチカラワザで。 Sub macro1()  Dim buf As String  Dim a  Dim h As Range  Dim z  Worksheets.Add  Set h = Range("A1")  Open "C:\test\test.csv" For Input As #1  Do Until EOF(1)   Line Input #1, buf   a = Split(buf, " , ", compare:=vbTextCompare)   h.Resize(1, UBound(a) + 1) = a   Set h = h.Offset(1)  Loop  Close #1  For z = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column  Columns(z).TextToColumns Destination:=Cells(1, z), DataType:=xlDelimited, _   TextQualifier:=xlNone, ConsecutiveDelimiter:=True, Tab:=True, _   Semicolon:=False, Comma:=False, Space:=False, Other:=False, _   FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True  Next z End Sub

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

実際のデータもそうなっていますか? ([全角スペース+カンマ+全角スペース]で区切られています?) もしそうなら[全角スペース+カンマ+全角スペース]をTABに変換すれば良いように見えます。 Sub try()   '事前にVBEメニュー[ツール]-[参照設定]で   'Microsoft Forms 2.0 Object Libraryを参照設定する事   Dim buf As String   Dim n  As Long   Dim f      '読込みファイルを選択   f = Application.GetOpenFilename("csv,*.csv")   If VarType(f) = vbBoolean Then Exit Sub   '読込みファイルOpen   n = FreeFile   Open f For Input As #n   buf = StrConv(InputB(LOF(n), #n), vbUnicode)   Close #n   '置換   With CreateObject("VBScript.RegExp")     .Global = True     .Pattern = " , " '全角スペース+カンマ+全角スペース     buf = .Replace(buf, vbTab)   End With   'Clipboardにセット   With New DataObject     .SetText buf     .PutInClipboard   End With   '新規Sheetに貼付け   Sheets.Add.Paste End Sub 実際は "1,000",200,"1,000",500,"3,000".. このように桁区切りがある場合、ダブルクォートで囲まれてませんか? その場合はExcelで普通に開く事ができますし、 QueryTable([データ]-[外部データの取り込み])も使う事ができます。

関連するQ&A

  • カンマ区切りのcsvファイルを…

    カンマ区切りのcsvファイルをExcelで別々のセルに読み込むVBAのプログラムを作りたいんですが、なかなか調べても見つかりません。 プログラムもしくは参考になるサイト等あればお願いします。

  • EXCEL VBAでカンマ区切りCSVファイルに変換する方法

    EXCELで作成したシートをVBAでカンマ区切りCSVファイルに変換する方法を教えてください 下記のプログラムではXLSファイルで保存されますが、カンマ区切りCSVにする方法が分かりませんでした。 '保存先パス名 NetPath = "V:\AAAA\" ' セルA1 には、ファイル名記入 BkName = ThisWorkbook.Sheets("Sheet1").Range("A1").Text & ".XLS" 補足:マクロを実行した時に自動でネットワークドライブ(V:\AAAA)へ保存、ファイル名はSheet1のセルA1の文字をファイル名として 保存するようにしたいです。 宜しくお願い致します。

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

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

    • ベストアンサー
    • MySQL
  • エクセルのカンマ区切りのCSV出力

    エクセルのカンマ区切りのCSV出力について質問します。 CSVファイルとしてカンマ区切りで出力したいのですが、さらに各項目にダブルコーテーション(")をつけて出力したいのです。 例) 通常のCSV 01,02,03 やりたいCSV出力 "01","02","03" ご存知の方がいらっしゃいましたら回答お願いします。

  • EXCELで保存しているファイルをCSV(カンマ区切り)にしたい

    EXCELで作成されたファイル(1)(拡張子:xls)をCSV(カンマ区切り)のファイル(2)(拡張子:csv)にしたいのですが、方法として、(1)をEXCELで開き、CSV(カンマ区切り)で保存し、(2)を作成する方法しかないのでしょうか? 例えば、DOSのコピーコマンドなどで変更する方法や、エクスプローラー上で拡張子を変更する方法などなど。 できれば、画面を開いたり、閉じたりしたくない(自動で変換させたい) 宜しくお願い致します。

  • CSVカンマ区切りって知ってますか?

    WEB上で会員登録をしてもらった場合、会員データをHPで入力しますよね。そのデータを直接エクセルのデータ管理に飛ばしたいのですが・・その場合、データ形式をCSVカンマ区切りにしてFDで保存をしたいのです。 知りたい部分は、HPからダイレクトにエクセルにデータを飛ばす方法です。ご存知の方っ教えて下さい!困ってます・・・・

  • csvファイルを上書き保存でカンマ区切りされない

    csvファイルのセルに文字を入力して、「上書き保存」をすると ”XXXXX には、CSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。この形式でブックを保存しますか? ” というメッセージが出たので「はい」をクリックして上書き保存しました。 再度そのファイルを開いてみると、カンマ区切りされておらず、各セル内の文字が結合されていました。 そこで質問なのですが、 試しに上記の上書き保存をせず、右上の「ウィンドウを閉じるボタン(×ボタン)」をクリックして、 「保存しますか?」との問いに「はい」と答え、 次に”XXXXX には、CSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。この形式でブックを保存しますか? ” との問いに「はい」と答えた形で保存をすると、きちんとカンマ区切りされていました。 なぜ上記の方法では正常にカンマ区切りされなかったのでしょうか? どうぞよろしくお願いいたします。

  • CSVファイルをカンマ区切りのテキストファイルに直したい!

    CSVのエクセルファイルを文字化けすることなく、カンマ区切りのテキストファイルにしたいのですが、どうすればよろしいのでしょうか?

  • エクセル:桁区切り「カンマ」でセルが分割されて貼り付けされてしまう

    仕事で社内のシステムから売上の情報をコピーしてエクセルに貼り付けて処理をしようとしたところ、コピーした数字に「桁区切りのカンマ","」がある関係で、 たとえば 1,234,567 という数字が 1 と 234 と 567 とセルが分割されて貼り付けられてしまいます。 CSVファイルのカンマ区切りデータと同じように情報がカンマで分割されてしまっているようなのですが、貼り付けの際に分割されないようにするにはどうしたらよいでしょうか? ちなみに、これらデータはスペースで区切られているので一度テキストファイルに保存して、CSVを開くときの区切り文字の設定を「スペース」に設定すればうまく開くのはわかるのですが、コピーして即貼り付けのときにこのようになることを回避する方法はあるのでしょうか?マクロを組んでも構いません。 どうぞ、ご教授、宜しくお願いします。

  • csvカンマ区切りデータに=""を入力したい

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

専門家に質問してみよう