質問です

コード別に性別ごとに金額を小計する関数またはマクロをお願いします
B列にコード(半角英数小文字)C列男女、金額のエクセルデータがあります
データは2行目から
B列    C列      I列
コード   性別     金額
aaaa    男      -1000
aaaa    男      -2000
bbbb    女      -1000
abcd    女      -1000
答え
2行目からデータ
同じコードの最後の行のD列(男)F列(女)に答えの小計をだす
B列    C列     D列      F列       I列     
            男の答え   女の答え
aaaa    男                    -1000
aaaa    男     -3000            -2000
bbbb    女           -1000      -1000 
abcd    女           -1000      -1000       

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2011/06/08 17:55:06
  • 終了:2011/06/09 16:44:15

ベストアンサー

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982011/06/08 18:43:21

ポイント90pt
Sub main()
    'コード、性別でソートされているのを条件として実行します。
    
    '1行もないとき
    If Cells(2, "B") = "" Then
        Exit Sub
    End If
    
    '初期値のセット
    c1 = Cells(2, "B")
    c2 = Cells(2, "C")
    d = Cells(2, "I")
    
    '1行しかないとき
    If Cells(3, "B") = "" Then
        If c2 = "男" Then
            Cells(2, "D") = d
        Else
            Cells(2, "F") = d
        End If
        Exit Sub
    End If
    
    d = 0
    For a = 2 To Cells(2, "B").End(xlDown).Row
        If Cells(a, "B") <> c1 Or Cells(a, "C") <> c2 Then
            If c2 = "男" Then
                Cells(a - 1, "D") = d
            Else
                Cells(a - 1, "F") = d
            End If
            d = 0
        End If
        c1 = Cells(a, "B")
        c2 = Cells(a, "C")
        d = Cells(a, "I") + d
    Next a

    If c2 = "男" Then
        Cells(a - 1, "D") = d
    Else
        Cells(a - 1, "F") = d
    End If

End Sub

変更しました。

id:inosisi4141

そうですねやはり答えの行は番組の最後の行で男女おなじ位置が良いですね

男女の区別は列で分けていますので

変更ができましたら

答えの行のA列にB列の答えの行のIDと同じものをコピーできたらよいのですが

2011/06/09 18:51:40

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982011/06/08 18:43:21ここでベストアンサー

ポイント90pt
Sub main()
    'コード、性別でソートされているのを条件として実行します。
    
    '1行もないとき
    If Cells(2, "B") = "" Then
        Exit Sub
    End If
    
    '初期値のセット
    c1 = Cells(2, "B")
    c2 = Cells(2, "C")
    d = Cells(2, "I")
    
    '1行しかないとき
    If Cells(3, "B") = "" Then
        If c2 = "男" Then
            Cells(2, "D") = d
        Else
            Cells(2, "F") = d
        End If
        Exit Sub
    End If
    
    d = 0
    For a = 2 To Cells(2, "B").End(xlDown).Row
        If Cells(a, "B") <> c1 Or Cells(a, "C") <> c2 Then
            If c2 = "男" Then
                Cells(a - 1, "D") = d
            Else
                Cells(a - 1, "F") = d
            End If
            d = 0
        End If
        c1 = Cells(a, "B")
        c2 = Cells(a, "C")
        d = Cells(a, "I") + d
    Next a

    If c2 = "男" Then
        Cells(a - 1, "D") = d
    Else
        Cells(a - 1, "F") = d
    End If

End Sub

変更しました。

id:inosisi4141

そうですねやはり答えの行は番組の最後の行で男女おなじ位置が良いですね

男女の区別は列で分けていますので

変更ができましたら

答えの行のA列にB列の答えの行のIDと同じものをコピーできたらよいのですが

2011/06/09 18:51:40
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/09 08:28:22

ポイント10pt

関数だけで行う例

・質問文では5行分だけだったので最下行は5としていますが、実際には100行あるということであれば5の部分を全て100にするか、あるいはもっと大きな数値にしておく

・3行目以下は2行目をコピーすればいい

D2 =IF($B2=$B3,"",SUMPRODUCT(($C$2:$C$5="男")*($B$2:$B$5=$B2),$I$2:$I$5))
F2 =IF($B2=$B3,"",SUMPRODUCT(($C$2:$C$5="女")*($B$2:$B$5=$B2),$I$2:$I$5))
id:inosisi4141

windofjulyさん

やってみたのですが上手く行かなかったです。

2011/06/09 18:18:38
  • id:taknt
    D2 =IF($B2=$B3,"",SUMPRODUCT(($C$2:$C$5="男")*($B$2:$B$5=$B2),$I$2:$I$5))
    E2 =IF($B2=$B3,"",SUMPRODUCT(($C$2:$C$5="女")*($B$2:$B$5=$B2),$I$2:$I$5))

    では ダメだと思う。

    例だから 使えないのかもしれませんが。

  • id:inosisi4141
    takntさん
    ありがとうございます。
    マクロの結果の計算が違うみたいです。

    どうも2行目の数値を2回足すみたいです
    再度検証おねがいします。
    BCのソートはやりました。
    よろしくお願いします。
  • id:windofjuly
    うぃんど 2011/06/09 12:02:58
    >ダメだと思う。
    >例だから 使えないのかもしれませんが。
     
    どこがダメだと思ったポイントですか?
    そもそも、やってみたのですか?
  • id:taknt
    inosisi4141さん
    修正しました。

    よく見たら
    >同じコードの最後の行
    とあるけど 私のは 同じコードと性別の最後の行にしてしまいました。

    もし これで ダメならば 修正します。



    >どこがダメだと思ったポイントですか?

    ないところは 空白にならないと いけないのかなぁって 思う。
  • id:windofjuly
    うぃんど 2011/06/09 12:44:10
    >ないところは 空白にならないと いけないのかなぁって 思う。
     
    合計した結果がゼロという表示は必要です(計算したという証拠のようなものですからね)
    しかしながら、嫌だという人も中にはおられるのも事実です
    その場合には、D列とF列の書式設定で次のようにユーザー設定するという手を用います
    0;-1;""
  • id:inosisi4141
    takntさん
    ありがとうございました。

    上手く行きました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません