2016-07-13 19 views
-1

何百枚ものブックを含むブックで2番目と3番目のシートを削除します。だから、シート1,4,7,10を保持して残りを削除してくださいVBAを使用してブック内の2番目と3番目のシートを1つずつ削除します

私が問題を提示しているので、私が削除するすべてのシートでインデックスがリセットされるため、私は問題に遭遇しています。

アイデア?

ありがとうございます!あなたはそれが3までカウントして行くよう

+0

あなたはあなたが嘆願したことを投稿できますか? –

+0

シートの名前は何ですか?彼らはSheet1、Sheet2、Sheet3 ...またはランダムな単語のようなものですか? –

答えて

0

端から(のリストから任意のコーディング言語を物事を削除するときは常に良い習慣を)終始代わりの先頭にループ

だけで実行されているカウンタを維持最初のシートが第1、第2、または第3のシートであるかどうかを数値で把握してください)

3

RGA is削除するときに最後から最初にループする必要があります。インデックスmod 3は、1、4、7、10、13、16 .ectに対して1を返します。

Sub DeleteEvery2ndAnd3rdSheet() 
    Application.DisplayAlerts = False 

    Dim i As Integer 
    For i = Worksheets.Count To 1 Step -1 
     If i Mod 3 <> 1 Then Worksheets(i).Delete 
    Next 

    Application.DisplayAlerts = True 

End Sub 
+0

素晴らしいです。ありがとう! – Nechama

2

トーマスの答えは移動するための方法かもしれないが、ここでは一度だけDeleteステートメントを実行する別のアプローチがあります。

Sub Delete2nd3rdSheets() 

Dim sSheetsToRemove As String 
Dim i As Integer 

Dim ws As Worksheet 
For Each ws In ThisWorkbook.Worksheets 

    If ws.Index Mod 3 <> 1 Then 
     sSheetsToRemove = sSheetsToRemove & "," & ws.Name 
    End If 

Next 

sSheetsToRemove = Mid(sSheetsToRemove, 2) 

Dim arrDeleteSheets() As String 
arrDeleteSheets = Split(sSheetsToRemove, ",") 

Application.DisplayAlerts = False 
Worksheets(arrDeleteSheets).Delete 
Application.DisplayAlerts = True 

End Sub 
+0

これは確かに私が行くだろうアプローチは、1つの迅速な移動を削除するB-) –

+1

かなりクールなスコット –

関連する問題