- ベストアンサー
EXCELで複数条件に当てはまるものの和を求めたいのですが
下記のように、A列が同じ場合かつ、B列の「1番目の文字」が同一の場合、C列の数字を足す、という事をやりたいのですが、 どういった関数を組み合わせればよいのか、また、どういったマクロを組めばよいのか、分からなかったので、質問させて頂きます。 例えば「あ」の場合、3行ある中の2行が「A」で始まっているので、足して「5」。 「H」で始まるものは1行だけなので、そのまま「2」。 「え」の場合は、5行ある中の3行が「A」で始まっているので、足して「8」。 2行が「H」で始まっているので、足して「11」。 という回答を出せるようにしたいのです。 A列の種類が100以上あったりしても問題ないやり方はありますでしょか? A列 B列 C列 あ ABCDEFG 1 あ ABCDOPQ 4 あ HIJKLMN 2 い HIJKLMN 1 い HIJKRST 1 う ABCDEFG 5 え ABCDEFG 3 え ABCDEFG 4 え ABCDOPQ 1 え HIJKLMN 6 え HIJKRST 5 A列が同じかつ、B列の頭文字が同じなら、Cを足す。 という条件文を書けばよいと思っているのですが、それの書き方が分かりません…。 当方、VBや関数にそれほど強くなく、 皆様のアドバイスを頂ければと思い投稿させて頂きます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
質問の内容はピボットテーブルすのものですが、 そのままでは使えないのでD列に =Left(B1,1) と入れて下までコピィしておきます。(B列の最初の文字を抱け表示させて起きます) あとは、範囲を指定してデータ=>ピボットテーブルと・・・ ウィザードに従ってピボットテーブルを作成 縦行にA列を、横列にD列を、データアイテムにC列をドロップすればOKです。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 図では、E1 ですが、この数式をドラッグ・コピーします。 =INDEX(SumIFA($A$1:$A$11,$B$1:$B$11,$C$1:$C$11,1),ROW(A1),COLUMN(A1)) 並べ替えの必要性はありません。エラーが出たら、ドラッグを止めて、エラーは削除してください。 配列で計算されていますので、全体を一気に計算して、個々の値をINDEX で呼び出しています。INDEX を使わなくても、範囲を配列にすれば出力されます。 ''---------------------------------------------- ''標準モジュールに貼り付けます Function SumIFA(Rng1 As Range, Rng2 As Range, tRng As Range, iK As Integer) As Variant() '第1被検索範囲,第2範囲,第3計算範囲,第2検索範囲の文字列桁数 Dim i As Long Dim t As String Dim ar1 As Variant Dim ar2 As Variant Dim ar3 As Variant Dim arb As Variant Dim objDic As Object Set objDic = CreateObject("Scripting.Dictionary") ar1 = Rng1.Value ar2 = Rng2.Value ar3 = tRng.Value For i = LBound(ar1, 1) To UBound(ar1, 1) t = ar1(i, 1) & Left(ar2(i, 1), iK) On Error Resume Next objDic.Add t, ar3(i, 1) If Err.Number > 0 Then objDic(t) = objDic(t) + ar3(i, 1) End If On Error GoTo 0 Next i arb = WorksheetFunction.Transpose(Array(objDic.Keys, objDic.Items)) SumIFA = arb End Function ''--------------------------------------
お礼
どこにドラッグ&コピーすれば良いのか、標準モジュールに貼り付けて、どうやって使えば良いのか、知識が足らず分かりませんでした。 ご親切に教えて頂いたのに、本当に申し訳ございません。 もう少し自分でも勉強してみます。 ありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 参考になるかどうか分かりませんが・・・ 作業列を使った方法になります。 ↓の画像のように、D・E列の作業列を使って A&B列の頭文字の組合せの数を右側の表にして その合計を表示するようにしています。 D2セル =A2&LEFT(B2,1) E2セル =IF(COUNTIF($D$2:D2,D2)=1,ROW()-1,"") として、D2・E2セルを範囲指定し、下へオートフィルでコピーします。 そして、 G2セル =IF(COUNT($E$2:$E$12)>=ROW()-1,INDEX($D$2:$D$12,SMALL($E$2:$E$12,ROW()-1)),"") H2セル =IF(G2="","",SUMIF($D$2:$D$12,G2,$C$2:$C$12)) という数式にして G2・H2セルを範囲指定した後に、オートフィルで下へコピーします。 これで質問内容の場合ですが、 組合せは6組あることが分かり、それぞれの合計したものが H列に表示されるようになるはずです。 以上、お役に立てれば幸いですが、 他に良い方法があれば読み流してくださいね。m(__)m
お礼
ご指摘通りにやったらうまくできました! ありがとうございます。 まだ仕組みは全然理解できていませんが、見ながら勉強したいと思います。 参考になりました。 どうもありがとうございます!!
- kybo
- ベストアンサー率53% (349/647)
データがA1:C11の範囲にあるとして、 D1のセルに以下のように入力、D11までコピー =IF(SUMPRODUCT(($A$1:$A1=A1)*((LEFT($B$1:$B1,1)=LEFT(B1,1))))=1,SUMPRODUCT(($A$1:$A$11=A1)*((LEFT($B$1:$B$11,1)=LEFT(B1,1))*$C$1:$C$11)),"")
お礼
すみません、そのまま入力してみましたが、うまくいきませんでした。 もう少し勉強してみます。 ありがとうございました。
お礼
ありがとうございます。 下の参考図と合わせて、とても参考になりました! このまま使えたので、有難く頂戴いたします。 ピボットテーブルというのを使った事がありませんでした。 とても便利なのですね。 本当にありがとうございます!!