外部ファイルを参照してセル値を取得した後、外部ファイルを別フォルダに移動させます。
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
上記の処理を入れた理由はファイルを移動させる際に「パス名が無効です」を回避する為に入れました。
最近のコメント