• 締切済み

複数シートに跨るcountifの結果を表示したい

再びEXCELマクロ関連の質問です。 とある商品の販売数をエクセルで管理しています。 商品は10個でワンセットで、セットごとに別のシートで管理しています。 セット1をsheet2で管理し、10個売り上げたらsheet3でまた次の10個を管理する…といった方法です。(この時点で無駄だと思いますが、この書式は崩せない前提で質問させてください) G列に売り上げた”年月”が記載されていて、集計したい”年月”を入力して計算を開始すると、ブックにあるシートの数だけ同じ計算をして、トータルと売上数をカウント、その結果をsheet1の集計表に反映させる、ということをしたいです。 (2019年10月の売り上げが2つ、3つのシートにまたがっている可能性があるのでこのような方法をとっています) シートのインデックス番号を変数iとして、仮にシート2~3までの売り上げ個数をカウントするとき、以下のマクロではシート2の結果しか表示できませんでした。 各iの変数で計算したcntを合計する計算式を記載しないといけないのはわかるのですが、その方法がわからず……みなさんのお知恵をお貸しください。 Sub 販売数() Dim cnt As Variant Dim FoundCell As Variant Dim sMonth As Variant Dim sh As Worksheet Dim i As Variant sMonth = Application.InputBox("集計したい年月を入力してください(例:2019年4月⇒201904)") For i = 2 To 3 Set sh = Worksheets(i) cnt = WorksheetFunction.CountIf(sh.Range("G4:G43"), sMonth) Next Set FoundCell = Cells.Find(What:=sMonth, LookIn:=xlValues) If FoundCell Is Nothing Then MsgBox "一致なし" Exit Sub Else FoundCell.Offset(0, -4).Value = cnt End If End Sub

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

ながながと質問を書いているが、何を問題にしているかわからんが、同じブック内の複数シートを1つずつカウント対象にするなら Sub test01() x = 0 For Each sh In Worksheets x = x + Application.WorksheetFunction.CountIf(sh.Range("A:A"), "横田") Next MsgBox x End Sub ーー 内容は、各シートのA列で、値が「横田」のセルを数えた。 シートの中に除外するシートが1が,2つあっても(結果を出すシートなど) 修正はIF文を使って除外しさえすれば仕舞。 探す範囲が、各シートでバラバラの場合は工夫を問うするが。

  • kkkkkm
  • ベストアンサー率66% (1721/2591)
回答No.1

cnt = WorksheetFunction.CountIf(sh.Range("G4:G43"), sMonth) は cnt = cnt+WorksheetFunction.CountIf(sh.Range("G4:G43"), sMonth) じゃないでしょうか。

関連するQ&A