- ベストアンサー
Excel VBA 検索してその合計数を抽出
- Excel VBAを使って特定の条件で検索し、合計数を抽出する方法について教えてください。
- Excel VBAで特定のシートにあるデータを検索し、それに対応する合計数を別のシートに抽出する方法を教えてください。
- Excel VBAのマクロを使用して、指定した条件で検索したグループごとの合計数を抽出する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
COUNTIFS関数だけで済む話なんじゃないかと。 http://www.becoolusers.com/excel/countifs.html =COUNTIFS(A2:A50,"yamada10x",B2:B50,"Grp1") これでyamada10xのGrp1の件数合計が出てきますが?
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 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
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
訂正:求めるのが合計数ではないですね。 SELECT Count([A]) FROM [Sheet1] WHERE [A]='yamada10x' AND [B]='Grp1' UCount("A", "Sheet1", "[A]='yamada10x' AND [B]='GrpN'") どうしても、VBAで自作するなら USum() ではなく UCount() ですね。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
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 も無知な私。”補足質問はなし”ですよ。
お礼
ご回答ありがとうございます。 参考にしていきたいと思います 自前のアイデアとニーズの提示がやはり足りなかった という事ですので、次回からは詳しく提示できるように したいと思います。
お礼
ご回答ありがとうございます。 =COUNTIFS関数で無事できました。 サイトの方もわかりやすく解説されていたので 助かりました。