• ベストアンサー

同じ文字が続くときに数字を合計する関数

A列に同じ文字が続くときに、該当するB列の数字を合計する関数をご教示お願い致します。 (例ではB4、B8、B9の合計で600)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.7

>続くときに、該当するB列の数字を合計する =SUMPRODUCT((A2:A10=A1:A9)*B2:B10) とかで。

KIKAIDER01
質問者

補足

ありがとうございます。 応用編として、1行飛ばして文字が同じ場合に合計する方法をご教示いただけないでしょうか。(添付図の場合、B8だけとなり、100となります)

その他の回答 (11)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.12

>10以下の場合だけB列の数字を合計 ふつーに =SUMIF(A:A,"<=10",B:B) でやってみては。

KIKAIDER01
質問者

お礼

ありがとうございます。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.11

あれ……既に同じ数式の回答が付いていました。すみません。 > 1行飛ばして文字が同じ場合に合計する方法 参照する行をその分だけずらすだけかと思いますが これも文章の意味が よく分かりません。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.10

どうも説明が回答者に上手く伝わっていないのではないかと思います。 =SUMPRODUCT(N(A1:A9=A2:A10),B2:B10) 違うようなら補足して下さい。

  • SI299792
  • ベストアンサー率47% (774/1620)
回答No.9

なるほど、SUMPRODUCTを使うのですか。「そんな都合のいい関数はありません。」なんて言ってすみません。マクロを組めるとマクロに頼ってしまいます。 ところで、応用編の1行飛ばして文字が同じ場合に合計する方法ですが、 keithin の答えを1つずらせばいいのです。 A1とA3を比較して、同じなら、B3を合計する。 =SUMPRODUCT((A3:A10=A1:A8)*B3:B10) 人の答えを利用してすみません。

KIKAIDER01
質問者

補足

ありがとうございます。もう一つ追加で教えていただきたいのですが、A列が数字の場合、10以下の場合だけB列の数字を合計するには、どのようにすればいいでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.8

#5です。質問例がおかしいなとは思ったが、多分こうだろうと推定して回答した。 その後補足を読むと、意図が別だったことがわかった。 そういう意図なら、#5の前回答の意図に比べて、簡単になります。 Sub Test01() t = 0 m = Cells(1, "A") For i = 2 To 10 If Cells(i, "A") = m Then t = t + Cells(i, "B") End If m = Cells(i, "A") Next i MsgBox t End Sub 例データ 画像の通り J 100 B 200 B 300 Y 100 L 200 E 150 E 200 E 100 M 300 P 400 結果 600 ーー 答えをMsgbxで出してますが、セルにだすなら,B列に出すとして 行をi として Cells(i,"B")=t のようにすればよい。 これなら答えは1つの数になるので、関数でも回答が出そうと思う。

KIKAIDER01
質問者

お礼

ありがとうございます。 質問例が間違っていて、お手間を取らせました。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.6

マクロ音痴の人のために・・・(^_^) 添付図参照 1.上端行に1行挿入して、1行目の各セルにセル A2 と異なる文字列を __入力(空白でもOKよ) 2.セル C2 に式 =(A1=A2)*1 を入力して、このセルのフィルハンドルを __「エイヤッ!」とダブクリ 3.セル D2 に式 =SUMPRODUCT((C2:C11=1)*(B2:B11)) を入力 ただ、ソレダケ~

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

エクセル関数ではむつかしい(式が長く複雑になる。)のではと思い、VBAでやってみた。 B列で直前行との比較を繰り返して処理する方式。 (VBAでも私には梃子づったが) ーー 例データ  B列 C列 D列 文字 数字 連合計 a 1 s 2 d 3 a 4 a 5 9 s 6 d 7 d 8 d 9 24 f 1 a 2 a 3 a 4 a 5 14 f 6 g 7 x 8 x 9 17 ーーー 標準モジュールに Sub test01() lr = Range("B10000").End(xlUp).Row 'MsgBox lr t = 0 ren = 1 m = Cells(1, "B") '--- For i = 2 To lr If Cells(i, "B") = m Then t = t + Cells(i, "C") ren = ren + 1 Else If ren >= 2 Then Cells(i - 1, "D") = t t = 0 ren = 1 End If t = Cells(i, "C") ren = 1 End If m = Cells(i, "B") Next i '--後仕舞い If ren >= 2 Then Cells(i - 1, "D") = t End If End Sub を貼り付けて、実行する。 結果は上記D列。

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.4

エクセルのバージョンがいくつなのか不明ですが その手のことは昔から「小計」と呼ばれる機能で実現可能です。 Jの計*** Bの計*** Yの計*** と集計してくれます。 多分データのところにあると思います。 1行目に列見出しを入れておいてください。

  • SI299792
  • ベストアンサー率47% (774/1620)
回答No.3

そんな都合のいい関数はありません。マクロを使って自分で作るしかありません。 もし、あなたが、マクロ経験があるなら、これでできます。 ' Function RepeatSum(IRange As Range) As Double '   Dim IY As Long   Dim OldCell As String   Dim NewCell As String   Dim SSum As Double '   OldCell = IRange.Cells(1) '   For IY = 2 To IRange.Rows.Count     NewCell = IRange.Cells(IY, "A")     SSum = SSum - IRange.Cells(IY, "B") * (OldCell = NewCell)     OldCell = NewCell   Next IY   RepeatSum = SSum ' End Function ' 使い方は=RepeatSum(A1:B10)になります。 マクロ経験が無いなら、http://iinamotto.com/2013/04/597.htmlを参考にして、マクロを使える環境にしてください。 もし、あなたがマクロ経験者なら、ここで詳しく書いても無駄になるので省略します。 どうしてもわからなければ、できるだけ相談に乗ります。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>(例ではB4、B8、B9の合計で600) なぜB4, B8, B9が選ばれるのか、 そのロジックがよくわかりません。 「A列に同じ文字が続くとき」とは、画像ではどこのことを指しますか? また、合計は600ではなくて500では?

KIKAIDER01
質問者

補足

すいません。例が間違えていました。 (誤)例ではB4、B8、B9の合計で600→(正)例ではB3、B7、B8の合計で600 > 「A列に同じ文字が続くとき」とは、画像ではどこのことを指しますか? A3、A7、A8を指します。その行に対応するB列のセル(B3、B7、B8)を合計するということです。

関連するQ&A