- ベストアンサー
Excel でのデータ集計
下記問題ですが、どうもいい解決方法が見つからず、ご教授いただきたいと思います。 Excel の関数か、VBA で処理したいと思います。 Book1 A B C D E 1 a 2 b 3 c 4 d 5 e Book2 A B C D E 1 a ● 2 c ● 3 e 4 g ● 5 i Book1 の A 列に a,b,c,d,e があります。Book2 の A 列 のアルファベットが Book1 の A 列と重複しており、且つ B 列に ● がついている場合に、● の数をカウントしたいと思います。この場合の回答は 2 となれば解決です。ちなみに Book1、2 ともに、A 列内に重複はありません。 Excel での作業を考えており、関数か VBA かどちらかで問題ありません。 ご教授いただけますでしょうか。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>関数か VBA かどちらかで問題ありません。 Book2 の空いているセルに =SUM(COUNTIF([book1.xls]Sheet1!A:A,A1:A100)*(B1:B100="●")) と入力し、[Shift] + [Ctrl] + [Enter] で確定してください(配列数式)。 なお、「A100」・「B100」の行番号は、Book2 のA列の行数以上の適当な数にしてください。
その他の回答 (2)
- DOUGLAS_
- ベストアンサー率74% (397/534)
[回答番号:No.1] の DOUGLAS_ です。 >関数か VBA かどちらかで問題ありません。 VBAの場合でお一つ。 ポイントは、 ・「B 列に ● がついている場合」のみを検索 ・その行の「Book2 の A 列 のアルファベット」を「Book1 の A 列」から検索 していると点で、 ・検索結果が条件に合う場合のみ「カウント」する という考えで計算させておりますので、実行スピードが格段に速くなるかと存じます。 kyo-1979 さんの用途に応じてお使いください。 なお、内容が分かりやすいように、敢えて、ダサい変数名にしております。 Sub Macro1() Dim Book1_A列 As Range Dim Book2_B列 As Range Dim Book2_B列_各セル As Range Dim カウント As Integer With Workbooks("Book1.xls").Sheets("Sheet1") Set Book1_A列 = Application.Intersect(.UsedRange, .Range("A:A")) End With With Workbooks("Book2.xls").Sheets("Sheet1") Set Book2_B列 = Application.Intersect(.UsedRange, .Range("B:B")) End With For Each Book2_B列_各セル In Book2_B列 If Book2_B列_各セル = "●" And IsNumeric(Application.Match(Book2_B列_各セル.Offset(, -1), Book1_A列, 0)) Then カウント = カウント + 1 End If Next MsgBox カウント End Sub
- hige_082
- ベストアンサー率50% (379/747)
マクロだとこんな感じで Sub test() Dim a As Variant Dim i As Long, ii As Long, iii As Long i = 0 With Worksheets("sheet1") a = .Range("a1", .Cells(.Rows.Count, 1).End(xlUp).Address) End With With Worksheets("sheet2") For ii = 1 To UBound(a) For iii = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row If .Cells(iii, 1).Value = a(ii, 1) Then If .Cells(iii, 2).Value = "●" Then i = i + 1 End If Next iii Next ii End With MsgBox i End Sub
お礼
hige_082 様 ご返答ありがとうございます。 教えていただいた方法で試しましたが、問題なく結果を表示できました。 返答が遅れ、申し訳ございませんでした。 ありがとうございます。
お礼
DOUGLAS_ 様 ご教授頂きありがとうございます。 配列数式というのがよくわからなかったので、調べてみます。 SUM と COUNTIF だけでも、配列数式というのを使うと式が簡単に済むのですね。 ありがとうございました。