1

Do Whileワークブック内の複数のワークシートで同じループ関数を実行し、別のワークシートでデータをコンパイルしようとしています。コードは指定された 1 つのワークシートで機能しますが、同時にワークブックにある他のワークシート全体でコードを機能させるにはどうすればよいですか?

また、ワークブックにあるすべてのワークシートではなく、一部のワークシートでのみ実行したいことにも言及する価値があります(シートの名前は2014年、2015年など)。

これがコードです

Sub Total_Button1_Click()

    Dim i As Integer

    Dim strSheetFrom As String

    Dim j As Integer
    Dim strSheetTo As String
    
    
    i = 3
    j = 2
    
    strSheetFrom = "2014"
    strSheetTo = "Total"
        
    Do While Trim(Sheets(strSheetTo).Range("B" & CStr(j)).Text) <> ""
        j = j + 2
    Loop

    Do While Trim(Sheets(strSheetFrom).Range("B" & CStr(i)).Text) <> ""
        If UCase(Trim(Sheets(strSheetFrom).Range("A" & CStr(i)).Text)) = "Y" Then
            Sheets(strSheetTo).Range("B" & j & ":G" & j).Value = Sheets(strSheetFrom).Range("B" & i & ":G" & i).Value
            Sheets(strSheetTo).Range("H" & j & ":I" & j).Value = Sheets(strSheetFrom).Range("I" & i & ":J" & i).Value
            Sheets(strSheetTo).Range("J" & j & ":J" & j).Value = Sheets(strSheetFrom).Range("L" & i & ":L" & i).Value
            Sheets(strSheetTo).Range("K" & j & ":K" & j).Value = Sheets(strSheetFrom).Range("Q" & i & ":Q" & i).Value
            Sheets(strSheetTo).Range("L" & j & ":AH" & j).Value = Sheets(strSheetFrom).Range("s" & i & ":AO" & i).Value
            j = j + 1
        End If
        i = i + 1
    Loop
       
    MsgBox "Total book created"


End Sub
4

2 に答える 2

1

strSheetFrom 変数を次のような配列にしてみてください。

strSheetFrom = new strSheetFrom[3] 
strSheetFrom[2] = "2012"
strSheetFrom[1] = "2013" 
strSheetFrom[0] = "2014"

次に、次のようにコードを別のループに入れます。

dim w as integer
for w = 0 To 3

Do While Trim(Sheets(strSheetTo).Range("B" & CStr(j)).Text) <> ""
j = j + 2
Loop

Do While Trim(Sheets(strSheetFrom[w]).Range("B" & CStr(i)).Text) <> ""
If UCase(Trim(Sheets(strSheetFrom[w]).Range("A" & CStr(i)).Text)) = "Y" Then
    Sheets(strSheetTo).Range("B" & j & ":G" & j).Value = Sheets(strSheetFrom[w]).Range("B" & i & ":G" & i).Value
    Sheets(strSheetTo).Range("H" & j & ":I" & j).Value = Sheets(strSheetFrom[w]).Range("I" & i & ":J" & i).Value
    Sheets(strSheetTo).Range("J" & j & ":J" & j).Value = Sheets(strSheetFrom[w]).Range("L" & i & ":L" & i).Value
    Sheets(strSheetTo).Range("K" & j & ":K" & j).Value = Sheets(strSheetFrom[w]).Range("Q" & i & ":Q" & i).Value
    Sheets(strSheetTo).Range("L" & j & ":AH" & j).Value = Sheets(strSheetFrom[w]).Range("s" & i & ":AO" & i).Value
    j = j + 1
End If
i = i + 1
Loop

w -= 1
next

私はそれをテストしていませんが、そのようなものです。あなたはアイデアを得る。

于 2013-09-18T21:22:43.683 に答える
0

For Each を使用して、このように Worksheet コレクションを反復処理します。

'Variables
Dim useWorkSheet As Worksheet
Dim totalWorkSheet As Worksheet
Dim yearAsNumeric As Integer
Dim startingYear As Integer

'Settings
startingYear = 2014

'To reference the total worksheet so we can work with it
Set totalWorkSheet = ActiveWorkbook.Worksheets("Total")

'Iterate over each item in the collection
For Each useWorkSheet In ActiveWorkbook.Worksheets
    'Force the name into a numeric value.  If it starts with anything non numeric (A-Z|a-z|$,#,etc) then it will return 0
    yearAsNumeric = Val(useWorkSheet.Name)

    'Greater than or equal to the year we want to start with?
    If yearAsNumeric >= startingYear Then
        'Yes. Do your stuff here
        useWorkSheet.Name
    End If
Next
于 2013-09-18T21:12:09.297 に答える