No.6ベストアンサー
- 回答日時:
No.2・5です。
>wB.Save
の前に
>wB.CheckCompatibility = False
の1行を追加したらどうなりますか?
※ 未検証なので、ダメならごめんなさい。m(_ _)m
No.5
- 回答日時:
No.2です。
前回は勘違いしていました。
各行ごとでファイルとシート名が1セットだと思っていました。
各ファイルごとで、D列のシート名すべてを対象にあればそのシートを削除したい!
というコトですね。
↓のコードにしてみてください。
Sub Sample2()
Dim i As Long, j As Long, k As Long
Dim sCnt As Long, cnt As Long
Dim fN As String, sN As String
Dim wB As Workbook, wS As Worksheet
Dim myStr As String, myAry
With ThisWorkbook.Worksheets("Sheet1")
sCnt = .Cells(Rows.Count, "D").End(xlUp).Row - 1
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
fN = Dir(.Cells(i, "A"))
If fN <> "" Then
Workbooks.Open .Cells(i, "A")
Set wB = ActiveWorkbook
If wB.Worksheets.Count > 1 Then
For k = 1 To wB.Worksheets.Count
Set wS = wB.Worksheets(k)
For j = 2 To .Cells(Rows.Count, "D").End(xlUp).Row
sN = .Cells(j, "D")
If wS.Name = sN Then
cnt = cnt + 1
If myStr = "" Then
myStr = sN
Else
myStr = myStr & "," & sN
End If
End If
Next j
Next k
If Len(myStr) > 0 Then
myAry = Split(myStr, ",")
Application.DisplayAlerts = False
For k = 0 To UBound(myAry)
wB.Worksheets(myAry(k)).Delete
Next k
Application.DisplayAlerts = True
End If
Select Case cnt
Case sCnt
.Cells(i, "B") = "全シート削除"
Case 0
.Cells(i, "B") = "該当シートなし"
Case Else
.Cells(i, "B") = cnt & "シート削除"
End Select
Else
.Cells(i, "B") = "シート数が1つのため削除不可"
End If
fN = Dir()
wB.Save
wB.Close
myStr = ""
Else
.Cells(i, "B") = "該当ファイルなし"
End If
cnt = 0
Next i
End With
MsgBox "完了"
End Sub
※ 余計なお世話かもしれませんが、
小さくて詳細はわかりませんけどA列のパスを拝見するともしかして同じフォルダにあるファイルに対しての処理になるのでしょうかね。
もしそうであればわざわざすべてのフルパスを書き出さなくてもできそうですが・・・m(_ _)m
非常に助かりました!
ひとつだけ解決できない部分があります。シート削除後、エクセルが古いこともあり【互換チェック】が表示されます。保存する為、手動で続行クリックする手間がかかってしまうのですが解決出来ますでしょうか?
No.4
- 回答日時:
No3です。
補足ありがとうございました。1つのファイルの中にSheetA,SheetB,SheetCがあるとします。
D列で指定されたシート名がSheetX,SheetY,SheetA,AheetB,SheetCの場合、順に削除をおこなうと以下のようになります。
SheetXは存在しない為、「①シートが見つかりませんでした」が設定させる
SheetYは存在しない為、「②シートが見つかりませんでした」が設定させる
SheetAは存在するので1件、削除完了
SheetBは存在するので1件、削除完了
よって「③2個削除完了」が設定される
SheetCは最後の1個なので、「④シートが1個の為、削除しませんでした」が設定される
上記のような場合、①~④のどのメッセージを設定すれば良いのでしょうか。
この添付された画像のシート名(削除対象のファイルとシート名を記述したシート)は何でしょうか。
No.2
- 回答日時:
こんばんは!
一例です。
お示しの画像はマクロ記載ブックの「Sheet1」だという前提です。
Sub Sample1()
Dim i As Long, k As Long
Dim fN As String, sN As String
Dim wB As Workbook, wS As Worksheet
Dim myFlg As Boolean
With ThisWorkbook.Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
fN = Dir(.Cells(i, "A"))
sN = .Cells(i, "D")
If fN <> "" Then
Workbooks.Open .Cells(i, "A")
Set wB = ActiveWorkbook
For k = 1 To wB.Worksheets.Count
Set wS = wB.Worksheets(k)
If wS.Name = sN Then
myFlg = True
Exit For
End If
Next k
If myFlg = True Then
If wB.Worksheets.Count > 1 Then
Application.DisplayAlerts = False
wB.Worksheets(sN).Delete
Application.DisplayAlerts = True
.Cells(i, "B") = "○"
Else
.Cells(i, "B") = "シート数が1つのため削除不可"
End If
myFlg = False
Else
.Cells(i, "B") = "該当シートなし"
End If
fN = Dir()
wB.Save
wB.Close
Else
.Cells(i, "B") = "該当ファイルなし"
End If
Next i
End With
MsgBox "完了"
End Sub
※ 1ファイルずつ開いて操作していますので、そこそこ時間を要すると思います。
※ 未検証なので、
お望み通りにならなかったらごめんなさい。m(_ _)m
No.1
- 回答日時:
全てのファイル名と、それに対応するシートが記載されているのでしょうか
Public Sub psDelSht()
Dim intR As Integer
intR = 2
Do Until Sheets("操作用シート").Cells(1, intR).Value = ""
Workbooks.Open Filename:=Sheets("操作用シート").Cells(intR, 1).Value
ActiveWorkbook.Sheets(Sheets("操作用シート").Cells(intR, 4).Value).Delete
ActiveWorkbook.Close True
intR = intR + 1
Loop
End Sub
もしD欄のシート全てを全てのブックに対して行うのであれば上記Do文の中でD列のデータ分ループが必要です
また、特定のフォルダ内の全てのブックが対象ということであれば
For Eachでループさせて対応出来ます
D欄のシート全てを全てのブックに対して実行したいです。
また、指定フォルダ内のサブフォルダにファイルがあるのでサブフォルダ含むフルパスになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/12 10:10
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/04 10:48
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
【ExcelVBA】マクロの入ったシ...
-
特定のシートのみ再計算させな...
-
Excelでマクロ設定したが反映さ...
-
エクセルやワードの外枠がずれ...
-
DATE関数 4月31日などのあ...
-
Accessのテーブルを既存のExcel...
-
エクセルで複数のシートに画像...
-
accessへエクセルの複数のシー...
-
エクセルで、シートの名前を変...
-
ワークシートそのものの色を変...
-
EXCELの「シートの見出し」のフ...
-
vba 同じブック内での転記について
-
Excel2010ワークシートの挿入タ...
-
共有されたスプレッドシートに...
-
エクセルシートのタブの階層化表示
-
Excel VBA:ひとつ前に開いて...
-
EXCEL VBAについて、ワークシ...
-
Wordで差し込み印刷時に表示す...
-
エクセルの複数シートでのリン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報
1)添付した写真のファイル名は適当です。
本来のファイルは全てとは言いきれませんがそれに対応出来るシートは多くあります。
2)D欄のシート全てを全てのブックに対して削除実行をしたいです。
3)特定のフォルダ内にファイルがあるとゆうよりその中にサブフォルダが大量ににあるのでサブフォルダを含むフルパスとなっています。