Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
ファイル削除のマクロについて教えてください
投稿日時: 20/08/06 22:06:12
投稿者: あーすC

初めて投稿させていただきます、ExcelVBA初心者です。
仕事でVBAを使用することになったのですが、まだまだ知識が足りず作業が進まないため
こちらでご相談させていただきました。
 
ドライブ内のファイルとそのフォルダをまとめたExcelの元データを使用して、
先頭行にフラグが立っているファイルをフォルダから削除するマクロを作成しています。
 
◆元データ(例)
 削除      ファイル名    フォルダ
        あ.xlsx      D:\2020\aaa
        い.csv       D:\2019\bbb
  1      う.xlsx      D:\2018\aaa
        え.xlsx     D:\2020\bbb
  1      お.csv      D:\2017\aaa
 
ファイルを削除するKillステートメントと、For〜Nextステートメントを使用して
以下のようなマクロを考えたのですが…
 
Dim i As Long
Dim LstRows As Long
 
LstRows = Cells(Rows.Count, 1).End(xlUp).Row
 
For i = 2 To LstRows
 
    If Cells(i, 1) = 1 Then
     Kill Cells(i,3) & \ & Cells(i,2) ←
    End If
 
Next i
 
KillステートメントはKill以降にパス名の記述が必要なため、上記マクロがうまく作動しませんでした。Excelシート上のフォルダ・ファイル名の情報を利用して、ファイルを削除するマクロを組む方法はありますでしょうか?
 
初歩的な質問で申し訳ございません。
 
お手数おかけいたしますが、どうぞよろしくお願いいたします。
 
 
 
 
 
 

回答
投稿日時: 20/08/06 22:19:02
投稿者: takesi

一度変数に収めてから、Kill してみてください。
 

Dim FilePath As String
FilePath = Cells(i,3) & \ & Cells(i,2)
Kill FilePath

 
 
今回は関係ないかもしれませんが、
FileCopyやKillは、VBAと非同期? 
実行完了と次の処理に注意が必要です。

回答
投稿日時: 20/08/06 22:51:32
投稿者: WinArrow
投稿者のウェブサイトに移動

マクロがうまく作動しませんでした
 
具体的にどのような状態(状況)なんですか?

回答
投稿日時: 20/08/06 22:54:57
投稿者: WinArrow
投稿者のウェブサイトに移動

問題個所らしき・・発見
 
>LstRows = Cells(Rows.Count, 1).End(xlUp).Row
A列の最終行を取得しているが、
最終行に「1」が入っている可能性を考えると、
B列の最終行を取得して法がよいのでは?

回答
投稿日時: 20/08/06 22:59:39
投稿者: WinArrow
投稿者のウェブサイトに移動

アドバイス
 
Kill ステートメントは、存在しないファイルはエラーになるので
 
If Dir(Cells(i, 3).Value & "\" & Cells(i, 2).Value) <> "" Then
    Kill Cells(i, 3).Value & "\" & Cells(i, 2).Value
End If
の方が無難
 
更に、分かりやすいコードのために
Cells(i, "C").Value & "\" & Cells(i, "B").Value
をお勧めします。

投稿日時: 20/08/07 08:23:52
投稿者: あーすC

>takesi様
 
変数に収めることで無事マクロ実行することができました!
大変勉強になりました…!
お忙しい中、本当にありがとうございました。
 

投稿日時: 20/08/07 08:28:27
投稿者: あーすC

>WinArrow様
 
アドバイスはじめご回答いただきありがとうございました!
Cellsの列指定のおかげでより分かりやすいコードになりました。
Dirも、大変参考になりました…!
このあと詳しく調べて、コードに取り入れたいと思います。
 
この度は迅速なご回答、本当にありがとうございました。