エクセルでワークシート枚数が適当数あり、各シートのA1には0か1の数値が入っています。
また、各シートのA3からA10までは100以下の数値が入っているとします。
一番左側に空のシートを挿入して、A3からA10までを領域選択し、A1の値が1のシートのみ一番左側のシートに串刺し合計したいので以下のようなマクロを組んだのですが、うまくいきません。どこが悪いのかどなたかご指摘してくださいませんでしょうか?
Sub test()
Dim i As Integer
Dim t As Integer
Dim r As Range
Worksheets(1).Activate
For Each r In Selection
For i = 2 To Worksheets.Count
Worksheets(i).Activate
If Range("A1").Value = 1 Then
t = t + r.Value
End If
Next i
Worksheets(1).Activate
r.Value = t
t = 0
Next r
End Sub
Worksheets(1)をActiveにした Selection はあくまでもWorksheet(1)で選択したセルで、ループ変数の r は その値を合計しています。
つまり Worksheets(1) の Selection(A3:A10?)を順番に合計しているだけで、元々空白なので 0 が返るだけです。
t = t + r.Value を下記のようにするとどうでしょう?
If Range("A1").Value = 1 Then
t = t + Worksheets(i).Range(r.Address).Value
' t = t + r.Value
End If
別案で、こんな書き方もあります。
Sub test1()
Dim i As Integer, myAddress As String
myAddress = Worksheets(1).Range("A3:A10").Address
' myAddress = Selection.Address '選択範囲にしたいなら
For i = 2 To Worksheets.Count
If Worksheets(i).Range("A1") = 1 Then
Worksheets(i).Range(myAddress).Copy
Worksheets(1).Range(myAddress).PasteSpecial _
Paste:=xlPasteValues, operation:=xlAdd
Application.CutCopyMode = False
End If
Next i
End Sub
お礼
早速のご回答ありがとうございます。 さすがにプロの技には脱帽します。 別案のほうもすぐには分からないので、これから勉強させていただきます。 ほんとうにありがとうございます。