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エラーパターンがあります。何がいけないのでしょうかご教示ください。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>CSVデータはbatで取得してきたCSVになります。
その内容を見たいのですが、提示していただけませんでしょうか。
公開すると都合の悪い部分は、適当に内容を変えて提示してください。
No.3
- 回答日時:
こんにちは
直接の回答ではないので、ごめんなさい。
面倒そうな処理なので、読み解く気がしないので・・・
扱っているCSVは、エクセルで直接読み込むことができないような、特殊なパターンを用いているのでしょうか?
もしも、エクセルでも解釈できるようなCSVファイルであるなら、わざわざ一行ずつ(一文字ずつ)処理するようなことをしなくても、一旦、エクセルに読み込ませておいてから、値を利用する方が遥かに簡単になると想像できます。
ご提示のコードの、ほとんどの部分が不要になりますし。
もしも、独自ルールのCSVデータであるのなら、それは独自に処理せざるを得ませんけれど。
(独自ルールの場合は、「CSV」とは言わないような気もしますが…)
No.1
- 回答日時:
とりあえず気付いたところだけ!
>Case """" '「"」のカウントをとる
1文字(1キャラクター)づつ取り出しているようですが、これに該当することはあるのでしょうか?
要は
lngQuote = lngQuote + 1
が思惑通りに機能していないのではないですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでセルに入力したパ...
-
excelに貼り付けた数値が勝手に...
-
Teraマクロで日付ディレクトリ...
-
EXCELファイルが開けない(-_-;)
-
エクセル 一括リンクの解除
-
VLOOKUP関数とネットワークに置...
-
検索結果をテキスト吐き出し
-
EXCELのVBAで画像を選んだ順に...
-
ファイルを並び替えるときの「...
-
EXCELのハイパーリンクの編集を...
-
Excel VBAで自動的にハイパーリ...
-
ファイル名を置き換えるやり方...
-
複数のHTMLファイルの中身にお...
-
エディタで効率的な切り出し方法
-
エクセル:フォルダ内のファイ...
-
エクセルを選択して開き印刷す...
-
VB6.0で、APIのファイルを開く...
-
EXCELで複数のファイルから抽出
-
ローマ字→カタカナへ変換(エク...
-
スクロールしてもボタンを常に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでセルに入力したパ...
-
excelに貼り付けた数値が勝手に...
-
【マクロ】シート名を取得する...
-
Teraマクロで日付ディレクトリ...
-
EXCELのVBAで画像を選んだ順に...
-
VLOOKUP関数とネットワークに置...
-
ファイルを並び替えるときの「...
-
エクセル 一括リンクの解除
-
EXCELのマクロを使って、テキス...
-
EXCELで複数のファイルから抽出
-
excel INDIRECT 他ファイル参照
-
エクセルからスキャナVBAで連動...
-
ハイパーリンクで前回値をひき...
-
エクセルファイルから指定した...
-
CSVで文字化けしてしまうのを直...
-
PDF ファイルが開けません。
-
Excelでリンクを使用すると#N/A...
-
=CELL("filename")で取得したフ...
-
エクセル:フォルダ内のファイ...
-
Excelvbaで同一フォルダー内の...
おすすめ情報
CSVデータはbatで取得してきたCSVになります。