2017-11-08 9 views
-1

私は以下のコードを持っています。多くのワークシートを循環させる方法

Sub Journal() 
    Dim ColL As Range, ColC As Range 
    Dim ws120 As Worksheet: Set ws120 = ThisWorkbook.Sheets("120") 
    Dim ws121 As Worksheet: Set ws121 = ThisWorkbook.Sheets("121") 
    Dim ws122 As Worksheet: Set ws122 = ThisWorkbook.Sheets("122") 
    Dim ws123 As Worksheet: Set ws123 = ThisWorkbook.Sheets("123") 
    Dim ws124 As Worksheet: Set ws124 = ThisWorkbook.Sheets("124") 
    Dim ws125 As Worksheet: Set ws125 = ThisWorkbook.Sheets("125") 
    Dim ws126 As Worksheet: Set ws126 = ThisWorkbook.Sheets("126") 
    Dim ws127 As Worksheet: Set ws127 = ThisWorkbook.Sheets("127") 
    Dim ws128 As Worksheet: Set ws128 = ThisWorkbook.Sheets("128") 
    Dim ws220 As Worksheet: Set ws220 = ThisWorkbook.Sheets("220") 
    Dim ws221 As Worksheet: Set ws221 = ThisWorkbook.Sheets("221") 
    Dim ws402 As Worksheet: Set ws402 = ThisWorkbook.Sheets("402") 
    Dim ws403 As Worksheet: Set ws403 = ThisWorkbook.Sheets("403") 
    Dim wsLoc As Worksheet: Set wsLoc = ThisWorkbook.Sheets("Locker JE") 
    Dim wsCof As Worksheet: Set wsCof = ThisWorkbook.Sheets("Coffee JE") 
    Dim Eval, rw As Range 
    Dim i As Long '<< use long in place on Integer 

    With wsLoc 
     Set ColL = .Cells(4, "O") 
    End With 
    With wsCof 
     Set ColC = .Cells(4, "O") 
    End With 

    For i = 4 To 41 
     Set rw = ws120.Rows(i) 
     Temp = rw.Cells(31).Value 
     Select Case rw.Cells(31).Value 
      Case "" 
      Case Else 
       CopyLocker rw, ColL 
     End Select 
    Next i 
End Sub 

定義済みのワークシートごとにfor nextループで同じことをしたいと思います。これはある種の変数で可能ですか?

+0

https://support.microsoft.com/en-us/help/142126/macro-to-loop-through-all-worksheets-in-a-workbook – cyboashu

+0

私はすべてのワークシートを通過したくない。私はそれを見つけましたが、私が必要としていたものに対してはうまくいかなかったのです。しかし、ありがとう。 –

答えて

2

これらのすべてをワークシートとして宣言する代わりに、配列にループをロードして配列をループすることもできます。

これはまさにあなたのマクロではありませんが、それはあなたが探しているものを行うには、配列をループを使用する方法を示しています

Sub Journal() 
Dim wsArray() As Variant 
Dim k As Long, i As Long 
Dim rw As Range, ColL As Range 
Dim TempCel As Range 
Dim wsLoc As Worksheet: Set wsLoc = ThisWorkbook.Sheets("Locker JE") 
Dim wsCof As Worksheet: Set wsCof = ThisWorkbook.Sheets("Coffee JE") 

wsArray = Array("120", "121", "122", "123", "124", "125", "126", "127", "128", "220", "221", "402", "403", "Locker JE", "Coffee JE") 
Set ColL = wsLoc.Cells(4, "O") 
Set ColC = wsCof.Cells(4, "O") 

For k = LBound(wsArray) To UBound(wsArray) 
    With ThisWorkbook.Worksheets(wsArray(k)) 
     ' Do things with the worksheet. 
     For i = 4 To 41 
      Set rw = .Rows(i) 
      Set TempCel = rw.Cells(31) 
      Select Case TempCel.Value 
       Case "" 
        ' Do something... 
       Case Else 
        CopyLocker rw, ColL 
      End Select 
     Next i 
    End With 
Next k 
End Sub 

注:これは、すべてあなたが他のワークシートを持っていると仮定ブック内でを入力しないでくださいこれを実行します。それ以外の場合は、For each ws in ActiveWorkbook.Worksheetsを実行して配列全体をスキップすることができます。

+0

これは、私が必要とするものとまったく同じように見えます。私はそれを試し、あなたに知らせるでしょう。ありがとう。 –

+0

@BSumner - そこには他のシートがたくさんありますか? 3つのシート(またはその配列の量よりも少ない*任意の数)*を言うなら、あなたは別のやり方をすることができます... 'ThisWorkbook.Worksheetsの各wsについて// ws.Name <>" 999 "とws .Name <> "000" Then ... '。 – BruceWayne

+0

それは私が予想したよりずっと速く働いた。本当にありがとう。 –

関連する問題