• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA 検索してその合計数を抽出)

Excel VBA 検索してその合計数を抽出

このQ&Aのポイント
  • Excel VBAを使って特定の条件で検索し、合計数を抽出する方法について教えてください。
  • Excel VBAで特定のシートにあるデータを検索し、それに対応する合計数を別のシートに抽出する方法を教えてください。
  • Excel VBAのマクロを使用して、指定した条件で検索したグループごとの合計数を抽出する方法を教えてください。

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

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.2

COUNTIFS関数だけで済む話なんじゃないかと。 http://www.becoolusers.com/excel/countifs.html =COUNTIFS(A2:A50,"yamada10x",B2:B50,"Grp1") これでyamada10xのGrp1の件数合計が出てきますが?

hazama12
質問者

お礼

ご回答ありがとうございます。 =COUNTIFS関数で無事できました。 サイトの方もわかりやすく解説されていたので 助かりました。

その他の回答 (3)

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

こんばんは! COUNTIFS関数で対応できそうですが、VBAでの方法をご希望というコトですので 一例です。 Sheet3を作業用のSheetとして使用していますので、Sheet3は使用していない状態にしておいてください。 Sheet1のA列データが何種類あっても対応できるようにしてみました。 標準モジュールです。 Sub Sample1() Dim i As Long, k As Long, lastRow As Long, wS2 As Worksheet, wS3 As Worksheet Set wS2 = Worksheets("Sheet2") Set wS3 = Worksheets("Sheet3") Application.ScreenUpdating = False wS2.Cells.Clear With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS3.Range("A1"), unique:=True For i = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row .Range("A1").AutoFilter field:=1, Criteria1:=wS3.Cells(i, "A") wS2.Cells(1, (i - 1) * 2 - 1) = wS3.Cells(i, "A") & "の合計数" wS2.Cells(1, (i - 1) * 2) = "Grp番号" Range(.Cells(2, "B"), .Cells(lastRow, "B")).SpecialCells(xlCellTypeVisible).Copy wS2.Cells(2, (i - 1) * 2) For k = wS2.Cells(Rows.Count, (i - 1) * 2).End(xlUp).Row To 2 Step -1 wS2.Cells(k, (i - 1) * 2 - 1) = WorksheetFunction.CountIfs(.Range("A:A"), wS3.Cells(i, "A"), _ .Range("B:B"), wS2.Cells(k, (i - 1) * 2)) If WorksheetFunction.CountIf(wS2.Columns((i - 1) * 2), wS2.Cells(k, (i - 1) * 2)) > 1 Then wS2.Cells(k, (i - 1) * 2 - 1).Resize(, 2).Delete shift:=xlUp End If Next k Next i wS2.Columns.AutoFit wS2.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous wS3.Cells.Clear .AutoFilterMode = False End With Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

回答No.3

訂正:求めるのが合計数ではないですね。 SELECT Count([A]) FROM [Sheet1] WHERE [A]='yamada10x' AND [B]='Grp1' UCount("A", "Sheet1", "[A]='yamada10x' AND [B]='GrpN'") どうしても、VBAで自作するなら USum() ではなく UCount() ですね。

回答No.1

SELECT Sum([A]) FROM [Sheet1] WHERE [A]='yamada10x' AND [B]='Grp1' SELECT Sum([B]) FROM [Sheet1] WHERE [A]='yamada10x' AND [B]='Grp1' Sheet2の合計の求め方は、このようかと思います。これを集計関数にすれば・・・ USum("A", "Sheet1", "[A]='yamada10x' AND [B]='Grp1'") USum("A", "Sheet1", "[A]='yamada10x' AND [B]='Grp2'") ・・・・・ USum("A", "Sheet1", "[A]='yamada10x' AND [B]='GrpN'") こういうことを実現したいとなると課題はUSum関数の書き方。 Public Function USum(ByVal strCellName As String,            ByVal strSheetName As String,            ByVal strWhereCondition As String)            As Integer   ・・・・・ End Function 確かに、USum関数をExcelに書き込む必要がありますが、何をしているかは一目瞭然。と、こんな考え方もあります。 【質問者の自前のアイデアとニーズの提示を】 話を本題に戻せば、VBAとなるとやり方は100人100様。ですから、質問者は、どのようなVBAを構想し、どこが書けないのかを提示する必要があるかと思いますよ。 PS、そもそも USum関数を自作する必要があるのか? EXCELは、集計ソフト。USum()程度のことはEXCEL関数でできませんか? ※EXCEL VBA も EXCEL も無知な私。”補足質問はなし”ですよ。

hazama12
質問者

お礼

ご回答ありがとうございます。 参考にしていきたいと思います 自前のアイデアとニーズの提示がやはり足りなかった という事ですので、次回からは詳しく提示できるように したいと思います。

関連するQ&A