|
▼ポン太 さん、今日も暇人 さん
こんにちは。
以下のソースあまりきっちり見てませんが、
気になったので質問します。
> '処理対象のシートを明確にするために変数にセット
> Set ws1 = ThisWorkbook.Worksheets("1")
> Set wsa = ThisWorkbook.Worksheets("2")
> '集計対象シートの最下行:キーになるE列で判定
> Lr = ws1.Range("A65536").End(xlUp).Row
> Rmax = wsa.Range("E65536").End(xlUp).Row
>
> T = "Apple"
> i = 7
> Ans = 0
>
> With ws1
> For i = 7 To Lr
> For Each App In wsa.Range("AJ2:AJ" & Rmax)
> If App.Value = T Then
> Ans = Application.WorksheetFunction.SumIf _
> (wsa.Range("E2:E" & Rmax), ws1.Range("A" & i).Value, wsa.Range("G2:G" & Rmax))
> End If
> Next
> .Range("C" & i).Value = Ans
> Next i
> End With
ソースのうち
> For i = 7 To Lr
> For Each App In wsa.Range("AJ2:AJ" & Rmax)
> If App.Value = T Then
> Ans = Application.WorksheetFunction.SumIf _
> (wsa.Range("E2:E" & Rmax), ws1.Range("A" & i).Value, wsa.Range("G2:G" & Rmax))
> End If
> Next
> .Range("C" & i).Value = Ans
> Next i
の部分ですが、何故Forループを入れ子にしているのでしょう?
SumIf関数で、シート1のA列7行目以降を元に集計しているのがわかるのですが。
中のループが終らない限り、i値が変わらないので
「If App.Value = T Then」の条件に入ったとしても
次のループ(For Each App In wsa.Range("AJ2:AJ" & Rmax))で
また「If App.Value = T Then」に入る条件があると「Ans」の
変数の値が上書きされるのは正しいのでしょうか??
質問者でないのに質問してすみません。
|
|