外部ファイルを参照してセル値を取得した後、外部ファイルを別フォルダに移動させます。
OS:Windows10
バージョン:Microsoft Excel 2016

機能イメージ

結果イメージ
外部ファイルから値を取得して本ファイルに書き込みます。

ファイル移動結果(bkフォルダに移動)

以下ソース


Sub GetXls()

  Dim strXLS As String
  Dim i As Integer
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim xls As New Excel.Application

  ’外部ファイルの取得先
  Const Path As String = “D:\test\”
  ’外部ファイルの移動先
  Const bkPath As String = “D:\test\bk\”

  ’拡張子が.xlsxを取得
  strXLS = Dir(Path & “*.xlsx”)
  i = 1

  ’フォルダに.xlsxファイルがなくなるまでループ
  Do While strXLS <> “”

    ’取得したファイル名とパスをセット
    Set wb = xls.Workbooks.Open(Path & strXLS)
    ’外部ファイルの参照シートを指定
    Set ws = wb.Worksheets(1)

    ’セルに値があるまでループ
    Do While ws.Cells(i, 1).Value <> “” Or ws.Cells(i, 1).Value <> Null
      Cells(i, 1) = ws.Cells(i, 1).Value
      i = i + 1
    Loop

    ’参照した外部ファイルを非表示ににする
    xls.Visible = False
    ’参照した外部ファイルを閉じる
    xls.Workbooks.Close
    ’外部ファイルbkフォルダに移動
    Name Path & strXLS As bkPath & strXLS

    ’次の外部ファイルを取得します
    strXLS = Dir()
  Loop
‘オブジェクトのメモリを解放
Set wb = Nothing

End Sub


ソース解説


Dir(Path & “*.xlsx”)
拡張子が.xlsxのファイルを取得します。


xls.Workbooks.Open(Path & strXLS)
セル値を取得する為、外部ファイルを開きます。


wb.Worksheets(1)
外部ファイルの参照シートの番号を指定します。


Name Path & strXLS As bkPath & strXLS
Path & strXLSは移動前のフォルダとファイル名を設定
bkPath & strXLS移動先のフォルダとファイル名を設定


strXLS = Dir()
Dir(Path & “*.xlsx”)で設定したフォルダから次の外部ファイルを取得します。

strXLS = Dir()で「パス名が無効です」と表示される事がありました。
strXLS = Dir()がダメならDir(Path & “*.xlsx”)と書き換えてみてください。
フォルダにファイルがある限り無限ループしますが、Name Path & strXLS As bkPath & strXLSでファイルを移動させているので無限ループは回避できると思います。


補足


xls.Visible = False
xls.Workbooks.Close
上記の処理を入れた理由はファイルを移動させる際に「パス名が無効です」を回避する為に入れました。