- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (11)
- keithin
- ベストアンサー率66% (5278/7941)
>10以下の場合だけB列の数字を合計 ふつーに =SUMIF(A:A,"<=10",B:B) でやってみては。
お礼
ありがとうございます。
- Chiquilin
- ベストアンサー率30% (94/306)
あれ……既に同じ数式の回答が付いていました。すみません。 > 1行飛ばして文字が同じ場合に合計する方法 参照する行をその分だけずらすだけかと思いますが これも文章の意味が よく分かりません。
- Chiquilin
- ベストアンサー率30% (94/306)
どうも説明が回答者に上手く伝わっていないのではないかと思います。 =SUMPRODUCT(N(A1:A9=A2:A10),B2:B10) 違うようなら補足して下さい。
- SI299792
- ベストアンサー率47% (774/1620)
なるほど、SUMPRODUCTを使うのですか。「そんな都合のいい関数はありません。」なんて言ってすみません。マクロを組めるとマクロに頼ってしまいます。 ところで、応用編の1行飛ばして文字が同じ場合に合計する方法ですが、 keithin の答えを1つずらせばいいのです。 A1とA3を比較して、同じなら、B3を合計する。 =SUMPRODUCT((A3:A10=A1:A8)*B3:B10) 人の答えを利用してすみません。
補足
ありがとうございます。もう一つ追加で教えていただきたいのですが、A列が数字の場合、10以下の場合だけB列の数字を合計するには、どのようにすればいいでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
#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つの数になるので、関数でも回答が出そうと思う。
お礼
ありがとうございます。 質問例が間違っていて、お手間を取らせました。
- msMike
- ベストアンサー率20% (364/1804)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセル関数ではむつかしい(式が長く複雑になる。)のではと思い、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)
エクセルのバージョンがいくつなのか不明ですが その手のことは昔から「小計」と呼ばれる機能で実現可能です。 Jの計*** Bの計*** Yの計*** と集計してくれます。 多分データのところにあると思います。 1行目に列見出しを入れておいてください。
- SI299792
- ベストアンサー率47% (774/1620)
そんな都合のいい関数はありません。マクロを使って自分で作るしかありません。 もし、あなたが、マクロ経験があるなら、これでできます。 ' 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)
>(例ではB4、B8、B9の合計で600) なぜB4, B8, B9が選ばれるのか、 そのロジックがよくわかりません。 「A列に同じ文字が続くとき」とは、画像ではどこのことを指しますか? また、合計は600ではなくて500では?
補足
すいません。例が間違えていました。 (誤)例ではB4、B8、B9の合計で600→(正)例ではB3、B7、B8の合計で600 > 「A列に同じ文字が続くとき」とは、画像ではどこのことを指しますか? A3、A7、A8を指します。その行に対応するB列のセル(B3、B7、B8)を合計するということです。
- 1
- 2
補足
ありがとうございます。 応用編として、1行飛ばして文字が同じ場合に合計する方法をご教示いただけないでしょうか。(添付図の場合、B8だけとなり、100となります)