• ベストアンサー

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や関数にそれほど強くなく、 皆様のアドバイスを頂ければと思い投稿させて頂きます。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

質問の内容はピボットテーブルすのものですが、 そのままでは使えないのでD列に =Left(B1,1) と入れて下までコピィしておきます。(B列の最初の文字を抱け表示させて起きます) あとは、範囲を指定してデータ=>ピボットテーブルと・・・ ウィザードに従ってピボットテーブルを作成 縦行にA列を、横列にD列を、データアイテムにC列をドロップすればOKです。

rosy-fit
質問者

お礼

ありがとうございます。 下の参考図と合わせて、とても参考になりました! このまま使えたので、有難く頂戴いたします。 ピボットテーブルというのを使った事がありませんでした。 とても便利なのですね。 本当にありがとうございます!!

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 図では、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 ''--------------------------------------

rosy-fit
質問者

お礼

どこにドラッグ&コピーすれば良いのか、標準モジュールに貼り付けて、どうやって使えば良いのか、知識が足らず分かりませんでした。 ご親切に教えて頂いたのに、本当に申し訳ございません。 もう少し自分でも勉強してみます。 ありがとうございました。

noname#204879
noname#204879
回答No.4

[回答番号:No.1]の方法で作成したピボテを添付図に示しておきます。

rosy-fit
質問者

お礼

ご親切にありがとうございます。 大変参考になりました!

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

こんばんは! 参考になるかどうか分かりませんが・・・ 作業列を使った方法になります。 ↓の画像のように、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

rosy-fit
質問者

お礼

ご指摘通りにやったらうまくできました! ありがとうございます。 まだ仕組みは全然理解できていませんが、見ながら勉強したいと思います。 参考になりました。 どうもありがとうございます!!

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

データが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)),"")

rosy-fit
質問者

お礼

すみません、そのまま入力してみましたが、うまくいきませんでした。 もう少し勉強してみます。 ありがとうございました。

関連するQ&A

専門家に質問してみよう