- ベストアンサー
マクロ関数COUNTIFS使用時の?
- マクロの中でCOUNTIFS関数を使用して商品の動きを1日単位で調査する方法について質問があります。
- 集計用シートのC3・D3・E3・・・・には商品名が入力されており、履歴シートのB4・B5・B6・・・・には日付が連続して入力されています。
- マクロの記述中にCOUNTIFS関数を使うことで、参照セルの移動方法が分からず困っています。マクロの記述中にある「??」の部分が分からないです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ループは不要ではないでしょうか。 Sub 集計4() Dim r As Long, c As Long With Sheets("集計") c = .Cells(3, Columns.Count).End(xlToLeft).Column r = .Cells(Rows.Count, 2).End(xlUp).Row .Range(.Cells(4, 3), .Cells(r, c)).Formula = _ "=COUNTIFS(元データ!r8c3:r60000c3,rc2 ,元データ!r8c4:r60000c4,r3c)" End With End Sub
その他の回答 (3)
- mu2011
- ベストアンサー率38% (1910/4994)
No3です。 >行方向にセル式を参照する場合は、rの後ろを未入力にする事で実行できると考えてよろしいのでしょうか? ⇒行方向が縦方向ならばそういう事です。
お礼
回答ありがとうございました。 今後、活用していきます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。 マクロの記述で一部を下記のように変更してください。 Set WS1 = Worksheets("集計用") Set WS2 = Worksheets("データ元")
お礼
了解しました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
Formulaで式は"で閉じられており文字列としての扱いになりますのでセルの変化を伴う動きに対応ができません。 列や行の変化を付けてマクロを完成するには例えば次のようにします。 Sub 集計4() Dim retu As Long Dim gyou As Long Set WS1 = Worksheets("Sheet3") Set WS2 = Worksheets("Sheet4") For gyou = 4 To WS1.Cells(Rows.Count, 2).End(xlUp).Row For retu = 3 To WS1.Cells(3, Columns.Count).End(xlToLeft).Column WS1.Cells(gyou, retu) = WorksheetFunction.CountIfs(WS2.Range("B4:B60000"), WS1.Cells(gyou, 2), WS2.Range("D4:D60000"), WS1.Cells(3, retu)) Next retu Next gyou End Sub
お礼
回答ありがとうございます。 Formulaではなく、WorksheetFunctionを使えば、条件設定等にCellsを使用する事が可能なんですね。いい勉強になりました。
お礼
無事思い通りのマクロ動作が一瞬で出来ました。驚きです。 で、質問ですが、条件設定でrc2となっていますが、行方向にセル式を参照する場合は、rの後ろを未入力にする事で実行できると考えてよろしいのでしょうか?