[[20230715135751]] 『最新csvファイルのVBAによる取り込みについて』(Node) ページの最後に飛ぶ

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

 

『最新csvファイルのVBAによる取り込みについて』(Node)

こんにちは。Excel初心者です。VBAの言語がわからないのでマクロの記録でcsvファイルをボタン一つでExcelで読み込もう!と試みましたが、同じ名前のファイルでも名前の後ろに_20230715_0912と日にち時間が入るためそのデータしか読み込めません!常に新しいcsvファイルをボタン一つで読み込むにはどうしたらいいのでしょうか、、、?
ちなみにVBAの式はこんな感じになってます。
日にち時間のところを消したらできるかな?と思ってやってみましたが全くダメでした!私では歯が立ちません。皆様方のご助言を賜りたく存じます。

Sub 取り込み()
'
' 取り込み Macro
'

'

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\user\Downloads\オンデマンド受講結果_20230715_083646.csv", Destination:= _
        Range("$B$3"))

        .Name = "オンデマンド受講結果_20230715_083646"
        .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 = 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)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows10 >


>VBAの式は
VBA ではコードと言います。
(?) 2023/07/15(土) 15:09:12

  >Sub 取り込み()
  >    With ActiveSheet.QueryTables.Add(Connection:= _
  >        "TEXT;C:\Users\user\Downloads\オンデマンド受講結果_20230715_083646.csv", Destination:= _
  >        Range("$B$3"))
  >        .Name = "オンデマンド受講結果_20230715_083646"

 そこの部分をこんな風に書き換える。
     ↓
 Sub 取り込み()
     Dim result As String, maxSofar As String

     result = Dir("C:\Users\user\Downloads\オンデマンド受講結果*.csv")

     Do While result <> ""
         If result > maxSofar Then
             maxSofar = result
         End If
         result = Dir()
     Loop

     With ActiveSheet.QueryTables.Add(Connection:= _
         "TEXT;" & maxSofar, Destination:=Range("$B$3"))
         .Name = maxSofar

     以下変更なし。

(半平太) 2023/07/15(土) 15:19:31


返信ありがとうございます!
早速実践してみたのですが、F8でひとつずつやってみたところ

 .Refresh BackgroundQuery:=False

のところで
「実行時エラー'1004';
外部データ範囲を更新するためのテキストファイルが見つかりません。テキストファイルが移動または名前が変更されていないことを確認し、再度実行してください。」
とメッセージボックスが出てきました。
テキストファイルを確認してみたところ、ファイル→ダウンロード→オンデマンド受講結果2023・・・とありました。

(Node) 2023/07/15(土) 15:46:52


 済みません。以下に変更してみてください。

 >     With ActiveSheet.QueryTables.Add(Connection:= _
 >         "TEXT;" & maxSofar, Destination:=Range("$B$3"))
 >         .Name = maxSofar
 >     以下変更なし。

     With ActiveSheet.QueryTables.Add(Connection:= _
         "TEXT;C:\Users\User\Downloads\" & maxSofar, Destination:=Range("$B$3"))
         .Name = maxSofar
 '        以下変更なし。

 あと別件ですが、

 >        .Refresh BackgroundQuery:=False
 >    End With
          ↓

         .Refresh BackgroundQuery:=False
     .Delete                               '←これを入れて、毎回Queryテーブルを削除した方がいいらしい
     End With                  (テーブルがどんどん溜まってしまうので)

(半平太) 2023/07/15(土) 17:48:30


おおおぉ!!
出来ました!すごい!何がどうなってるのかはさっぱりですが、完璧です!
ありがとうございます<m(__)m>助かりました!

(Node) 2023/07/15(土) 18:00:45


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.