dポイントプレゼントキャンペーン実施中!

Sub CSV旅行計画()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long, k As Long
Dim lngQuote As Long
Dim strCell As String

varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択")

If varFileName = False Then
Exit Sub
End If

intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'CSVファイルをオープン

i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
j = 0
ingQuote = 0
strCell = ""
For k = 1 To Len(strRec)
Select Case Mid(strRec, k, 1)
Case "," '「"」が偶数なら区切り、奇数ならただの文字
If lngQuote Mod 2 = 0 Then
Call PutCell(i, j, strCell, lngQuote)
Else
strCell = strCell & Mid(strRec, k, 1)
End If
Case """" '「"」のカウントをとる
lngQuote = lngQuote + 1
strCell = strCell & Mid(strRec, k, 1)
Case Else
strCell = strCell & Mid(strRec, k, 1)
End Select
Next
'最終列の処理
Call PutCell(i, j, strCell, lngQuote)
Loop
Close #intFree
End Sub

Sub PutCell(ByRef i As Long, ByRef j As Long, ByRef strCell As String, ByRef lngQuote As Long)
j = j + 1
'「""」を「"」で置換
strCell = Replace(strCell, """""", """")
'前後の「"」を削除
If Left(strCell, 1) = """" And Right(strCell, 1) = """" Then
strCell = Mid(strCell, 2, Len(strCell) - 2)
End If
Cells(i, j) = strCell
strCell = ""
lngQuote = 0
End Sub

こちらのCSVファイル読み込みVBAを実行すると読み込めるパターンと読み込めない400エラーパターンがあります。何がいけないのでしょうかご教示ください。

質問者からの補足コメント

  • CSVデータはbatで取得してきたCSVになります。

      補足日時:2021/06/04 16:52

A 回答 (5件)

No3です。



>CSVデータはbatで取得してきたCSVになります。
作成方法等ではなくフォーマットの問題です。

試しに、エラーの出るファイルを直接エクセルで開いたら、やはり読み込めませんか??

読み込めないのならば、諦めて解釈ツールを作成するしかないと思いますけれど、読み込めるのであれば、面倒なことはせずに「エクセルに読んでもらう」方がはるかに簡単でしょう。
・・・ということを書いたつもりです。
    • good
    • 0
この回答へのお礼

参考になりました。
解析ツールななどで試してみます。

お礼日時:2021/06/04 17:45

>CSVデータはbatで取得してきたCSVになります。


その内容を見たいのですが、提示していただけませんでしょうか。
公開すると都合の悪い部分は、適当に内容を変えて提示してください。
    • good
    • 0

こんにちは



直接の回答ではないので、ごめんなさい。

面倒そうな処理なので、読み解く気がしないので・・・
扱っているCSVは、エクセルで直接読み込むことができないような、特殊なパターンを用いているのでしょうか?

もしも、エクセルでも解釈できるようなCSVファイルであるなら、わざわざ一行ずつ(一文字ずつ)処理するようなことをしなくても、一旦、エクセルに読み込ませておいてから、値を利用する方が遥かに簡単になると想像できます。
ご提示のコードの、ほとんどの部分が不要になりますし。

もしも、独自ルールのCSVデータであるのなら、それは独自に処理せざるを得ませんけれど。
(独自ルールの場合は、「CSV」とは言わないような気もしますが…)
    • good
    • 0

読み込めるCSVのサンプルとエラーになるCSVのサンプルを提示していただけませんでしょうか。

    • good
    • 0

とりあえず気付いたところだけ!


>Case """" '「"」のカウントをとる
1文字(1キャラクター)づつ取り出しているようですが、これに該当することはあるのでしょうか?
要は
lngQuote = lngQuote + 1
が思惑通りに機能していないのではないですか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!