こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル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

どなたか、お助けお願いします。

投稿日時 - 2010-06-07 13:48:49

QNo.5951149

困ってます

質問者が選んだベストアンサー

一般的には、このようにすればよいです。
後は、GetOpenFilename をヘルプでみてください。
なお、.Name = "290TEST1" この部分はいらなかったような気がしますね。付けたことがありません。

'//
Dim FName As String
Dim ret As Variant
FName = Application.GetOpenFilename("CSVファイル (*.csv),*.csv", , "ファイルインポート")
If VarType(FName) = vbBoolean Or FName = "" Then Exit Sub 'キャンセルの場合
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FName, _
     Destination:=Range("M6"))
 '続く

投稿日時 - 2010-06-07 15:03:30

お礼

回答ありがとうございました。
教えていただいたマクロで無事に動作しました。
仰るとおり、Name = "290TEST1"は不要のようです。(自動記録で付いていたようです)

ただ、キャンセルしたときにマクロが止まってしまいます。
.Refresh BackgroundQuery:=False
(毎回、ここで止まります。)
おそらく、こちらのやり方が悪いのだとは思いますが。。。

いずれにしろ、大変助かりました。

投稿日時 - 2010-06-07 18:06:59

ANo.3

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>ただ、キャンセルしたときにマクロが止まってしまいます。
>.Refresh BackgroundQuery:=False

すみません。コードを間違えました。
× Dim FName As String
Dim FName As Variant

投稿日時 - 2010-06-07 18:27:05

お礼

問題なく動作しました。
コードが違うだけで動作も変わってくるんですね(当たり前なのでしょうが)
コードの意味すら分かりませんが、とにかく、
どうもありがとうございました!

投稿日時 - 2010-06-07 19:43:02

ANo.2

ファイル選択ダイアログを使う、このやり方を探すと良いです。そのまま検索すれば使い方を説明したサイトあります。『EXCELでお仕事』

1つ選択、複数選択、フォルダ選択、保存先選択、等いろいろな場面で使えるので回答結果をもらうだけに留めるのはもったいないです。習得しましょう。

投稿日時 - 2010-06-07 14:57:29

お礼

アドバイスありがとうございました。
早速「EXCELでお仕事」を見てみました。項目がたくさんあり中々大変そうです。
選択方法についてひとつづつ勉強したいと思います。

投稿日時 - 2010-06-07 16:54:34

ANo.1

マクロ実行(ファイル選択)ボタンを押すとウィンドウが出てくるようにする

そこにファイル名を入力していただく

変数でファイル名を受け取る

投稿日時 - 2010-06-07 13:50:47

補足

早々にありがとうございます。
ご指摘のように作成してみました。
(初心者で、コマンドの意味を理解していないのでデタラメになっていると思います)

Dim F_name As Variant

F_name = Application.GetOpenFilename

With ActiveSheet.QueryTables.Add(Connection:= _
F_name, Destination:=Range("M6"))

以下は同じですが、With ActiveSheet~の部分で引っかかってしまいます。
csvファイルの指定がマズいでしょうか?

投稿日時 - 2010-06-07 14:23:08

あなたにオススメの質問