[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『csvファイルの読み込みについて』(wagona)
恐れ入ります。
「マクロの記録」の機能を使用して、csvファイルを読み込んで所定のセルに貼り付けるようにしたのですが、csvファイルを毎回、「data.csv」とリネームしないといけないため、読み込むcsvファイルを選択するようにしたいと思っております。
どのように変えればいいのか、調べてもどうしてもわからずで、、ご教授いただけないでしょうか。
よろしくお願いいたします。
Sub Macro1()
'
' Macro1 Macro
'
'
With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\Users\?E?\Desktop\data.csv", Destination:=Range("$R$4")) .Name = "csv" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlOverwriteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 2 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With ActiveWindow.SmallScroll Down:=-45 End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
GetOpenFilename
https://www.moug.net/tech/exvba/0060013.html
http://officetanaka.net/excel/vba/file/file02.htm
フィールド(カラム)数はおんなじなんですかね? 違えば、↓を何とかしないとまずいと思います。
>Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) (BJ) 2019/02/03(日) 21:18
ご返答、ありがとうございます!
csvファイルは、とあるソフトからエクスポートするものでファイル名は異なりますが、フィールド(カラム)数は同じです。
以下のようなコードかなと思うのですが、、、
Dim OpenFileName As String OpenFileName = Application.GetOpenFilename(FileFilter:="csvファイル,*.csv") If OpenFileName <> "False" Then Workbooks.Open OpenFileName Else MsgBox "キャンセルされました" End If
これを入れるとして、自分が投稿したコードのどこに入れて、どれを残すべきかがわからずです(涙
例えば、Range("$R$4")をどこに入れるとか・・・。
ほんと無知で申し訳ありません。
(wagona) 2019/02/03(日) 22:19
こんな感じでしょうか? ↓のサイトを参考しました。 https://www.tipsfound.com/vba/18014 QueryTables.Addって知らなかったんで、勉強になります(^^)
Option Explicit
Sub test()
Dim OpenFileName As String
OpenFileName = Application.GetOpenFilename(FileFilter:="csvファイル,*.csv") If OpenFileName <> "False" Then With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;" & OpenFileName, Destination:=Range("$R$4"))'ここでOpenFileNameで受け取ったパスをConnectionに渡して(?)います .Name = "csv" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlOverwriteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 2 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With Else MsgBox "キャンセルされました" End If
End Sub
(虎) 2019/02/04(月) 09:32
必要に応じてやるといいかも?
クエリーテーブル削除
For i = 1 To ActiveSheet.QueryTables.Count ActiveSheet.QueryTables(i).Delete Next (BJ) 2019/02/04(月) 15:29
返信が非常に遅くなり、大変申し訳ございません・・・。
おかげさまで、なんとかイメージ通りのものがほぼ完成しました!
本当に、ありがとうございました!!
(wagona) 2019/02/07(木) 01:22
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
でよいのであれば、(すべて標準でよいのであれば)丸ごと省略するのも手じゃないですかね。
↑省略すればとりあえず列数問題は悩まなくてよいはずです。(今回は平気みたいですが)
あと、たぶんBJさんと同じことを言ってることになるとおもうんですが、取り込んだ時点でCSVとの接続を切ってよいはずですから、
〜 .Delete End With
みたいに、取り込んだ時に切断してもいいかも。
勘違いだったらごめんなさい。
(もこな2) 2019/02/07(木) 04:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.