• 締切済み

カンマ区切り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/7941)
回答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