[[20190203205952]] 『csvファイルの読み込みについて』(wagona) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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

BJ様

ご返答、ありがとうございます!

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

虎 様
BJ 様

返信が非常に遅くなり、大変申し訳ございません・・・。
おかげさまで、なんとかイメージ通りのものがほぼ完成しました!
本当に、ありがとうございました!!

(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.