• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 複数条件 VBA)

エクセル複数条件でのVBAと関数の使い方

このQ&Aのポイント
  • エクセルで複数条件を使ってVBAと関数を組み合わせる方法について教えてください。
  • シート「DATA」には日付と果物の数量が複数列にわたって入力されています。シート「照会」では、開始日と終了日を指定して各果物の数量を表示したいです。
  • 具体的な例として、シート「DATA」に毎日10個の果物が入力されていて、シート「照会」の開始日が1/1、終了日が1/3と入力された場合、りんごは30個、みかんは30個、なしは30個と表示されるようにしたいです。どのようにすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 「DATA」SheetのA列品名と「照会」SheetのA2以降の品目は入力済みだとすると・・・ (1)関数での方法 ↓の画像で「照会」SheetのB2セルに =SUMIFS(OFFSET(DATA!A:A,,MATCH(A2,DATA!$1:$1,0)-1,,1),DATA!$A:$A,">="&B$1,DATA!A:A,"<="&C$1) という数式を入れフィルハンドルで下へコピーしています。 (2)VBAでの方法 標準モジュールにしてください。 色々やり方はあると思いますが、オートフィルタ → SUBTOTAL関数 を使用してみました。 Sub Sample1() Dim i As Long, lastRow As Long, wS As Worksheet Set wS = Worksheets("DATA") With Worksheets("照会") lastRow = .Cells(Rows.Count, "B").End(xlUp).Row If lastRow > 2 Then Range(.Cells(2, "B"), .Cells(lastRow, "B")).ClearContents End If wS.Range("A1").AutoFilter field:=1, Criteria1:=">=" & .Range("B1"), Operator:=xlAnd _ , Criteria2:="<=" & .Range("C1") For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row .Cells(i, "B") = WorksheetFunction.Subtotal(9, wS.Columns(i)) Next i wS.AutoFilterMode = False End With End Sub ※ 関数の場合、VBAの場合もエラー処理はしていません。 ※ VBAだとデータ変更があるたびにマクロを実行する必要があるため、 今回の質問に関しては関数の方が良いかもしれませんね。m(_ _)m

yuu1236
質問者

お礼

ありがとうございます!

関連するQ&A