エクセルVBAでCSV読み込みについて質問します。
エクセルVBAでCSV読み込みについて質問します。
外部データの取り込みマクロを自動記録で作成しましたが、
csvファイル名が決まってしまうで、他のCSVファイルに展開できません。
できれば、マクロ実行(ファイル選択)ボタンを押すとウィンドウが出てきて、
任意の場所にあるCSVファイルを選択できるようにできないでしょうか?
マクロは、書き込むエクセルブックが開いている状態からスタートし、シート名は共通です。
自動記録で完成したマクロは以下の通りです。
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:¥Documents and Settings¥USER¥My Documents¥VBA¥マクロ¥取り込み¥TEST1.csv" _
’”¥”が誤変換されるので、直接入力しました。
, Destination:=Range("M6"))
, Destination:=Range("M6")) _
, Destination:=Range("M6"))
.Name = "290TEST1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
'以下、続くので省略しました。
End Sub
どなたか、お助けお願いします。
お礼
>ファイル1の「お」のときの比較対象であるファイル2はEOFになってしまってます。 これと似た感じでしょう。 このアドバイスを元に、Debug.Printをあちらこちらに入れて見直しをした結果 原因がわかりました! やはりnew.csvは値が表示されているのに old.csvは値が空白で表示され、2件目以降を読み込むことなく new.csvが先にEOFになっていました。 new.csvが先にEOFにならないことを前提にロジックやテストデータを作っていますので テストデータがおかしいのでは?と思い、テキストエディタで開いて見てみました。 今まで出力結果をExcelで開いて確認していたのでわからなかったのですが old.csv更新時、空白行が最後に付加されて出力されていました。 FStrOld_data = FStrOld_data & ID,名前,キャリア,点数,所属 & Chr(10) と編集してから一括で出力していたので余計な空白行が付加されたようです。 そして、所属,IDの昇順でデータを読んでいるのでold.csvの1件目の値が空白で表示されたようです。 FStrOld_data = FStrOld_data & Chr(10) & ID,名前,キャリア,点数,所属 と変えることで正常に処理されるようになりました。 長くて読みずらいロジックを全部載せることができたら もっと早く解決できたのではないかと思います。 時間を割いて回答をくださいまして 本当にありがとうございました。