質問です。

男女混合のエクセルデータを男女別に小計する関数またはマクロを
お願いします。
1行目は項目です。
データは日々加算されます。その都度集計します。
データの最後の行と男女合計の行は空の行間があります。

A列は日付
B列はコード
C列は男または女の文字列
D列E列F列G列H列I列は数字が入ります
その数字の合計を
B列に男女別を表示してその行に
D列E列F列G列H列I列の合計をします。
  
 A      B   C   D     E   F    G   H    I
5月1日   AAA  男  5000   1800    2     1   1   10000
5月2日   BBB  女  3000   2000   3   2   2   5000

      男計     5000   1800   2    1   1   10000
      
      女計     3000   2000   3    2  2    5000
     

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/05/05 18:25:59
  • 終了:2011/05/05 21:57:26

ベストアンサー

id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692011/05/05 19:34:59

ポイント35pt

予め男性、女性の集計列に、sumif関数を入れておけばいいです。

http://kokoro.kir.jp/excel/sumif.html


ただしこの場合最下行に1行挿入すると関数が変わらないので合計が違うということになります。

(予め1行多い空白行までを範囲としておくという方法もありますが)


それで、マクロならばこんな感じです。

stRow=1が1行目からという意味ですので、2行目からのときはstRow=2にしてください。

Sub Macro()
    Dim i As Long
    Dim stRow As Long
    Dim lastRow As Long
    
    stRow = 1
    lastRow = Range("A1").End(xlDown).Row
    
    Range(lastRow + 1 & ":" & lastRow + 4).Clear
    
    Cells(lastRow + 2, "B").Value = "男性"
    For i = 4 To 9
        Cells(lastRow + 2, i).Value = Application.WorksheetFunction.SumIf(Range(Cells(stRow, "C"), _
            Cells(lastRow, "C")), "男", Range(Cells(stRow, i), Cells(lastRow, i)))
    Next i
    Cells(lastRow + 4, "B").Value = "女性"
    For i = 4 To 9
        Cells(lastRow + 4, i).Value = Application.WorksheetFunction.SumIf(Range(Cells(stRow, "C"), _
            Cells(lastRow, "C")), "女", Range(Cells(stRow, i), Cells(lastRow, i)))
    Next i
End Sub

※ Excelの質問だけに即座に回答してるつもりはありませんが、他の話題のときには優秀な方がたくさんいますので出しゃばらないようにしています。

id:inosisi4141

ありがろうございました。

マクロは上手く行きました。

早速使わせていただきます。

大変助かりました。

2011/05/05 21:56:35

その他の回答(1件)

id:asuka645 No.1

あすか回答回数856ベストアンサー獲得回数972011/05/05 18:45:07

ポイント35pt

SUMIF関数を使えばできます。


たとえばD1~D10にデータが入っているなら、合計式は以下のようになります。

男計 =SUMIF(C1:C10,"=男",D1:D10)

女計 =SUMIF(C1:C10,"=女",D1:D10)


たとえばE1~E10にデータが入っているなら、合計式は以下のようになります。

男計 =SUMIF(C1:C10,"=男",E1:E10)

女計 =SUMIF(C1:C10,"=女",E1:E10)

id:inosisi4141

ありがろうございました。

上手く行きました。

早速使わせていただきます。

2011/05/05 21:56:48
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692011/05/05 19:34:59ここでベストアンサー

ポイント35pt

予め男性、女性の集計列に、sumif関数を入れておけばいいです。

http://kokoro.kir.jp/excel/sumif.html


ただしこの場合最下行に1行挿入すると関数が変わらないので合計が違うということになります。

(予め1行多い空白行までを範囲としておくという方法もありますが)


それで、マクロならばこんな感じです。

stRow=1が1行目からという意味ですので、2行目からのときはstRow=2にしてください。

Sub Macro()
    Dim i As Long
    Dim stRow As Long
    Dim lastRow As Long
    
    stRow = 1
    lastRow = Range("A1").End(xlDown).Row
    
    Range(lastRow + 1 & ":" & lastRow + 4).Clear
    
    Cells(lastRow + 2, "B").Value = "男性"
    For i = 4 To 9
        Cells(lastRow + 2, i).Value = Application.WorksheetFunction.SumIf(Range(Cells(stRow, "C"), _
            Cells(lastRow, "C")), "男", Range(Cells(stRow, i), Cells(lastRow, i)))
    Next i
    Cells(lastRow + 4, "B").Value = "女性"
    For i = 4 To 9
        Cells(lastRow + 4, i).Value = Application.WorksheetFunction.SumIf(Range(Cells(stRow, "C"), _
            Cells(lastRow, "C")), "女", Range(Cells(stRow, i), Cells(lastRow, i)))
    Next i
End Sub

※ Excelの質問だけに即座に回答してるつもりはありませんが、他の話題のときには優秀な方がたくさんいますので出しゃばらないようにしています。

id:inosisi4141

ありがろうございました。

マクロは上手く行きました。

早速使わせていただきます。

大変助かりました。

2011/05/05 21:56:35
  • id:sanome
    質問の書き方に、悩みます。同一日に男女のでテーターがあるのか、無いのか、日にちによって男子のみか、女子のみか悩みますなので、回答の条件データの数が少なすぎます。
  • id:SALINGER
    マクロに1箇所間違いがありました。
    lastRow = Range("A1").End(xlDown).Row

    lastRow = Range("A" & stRow).End(xlDown).Row
    にしないと、2行以下からにするとおかしくなります。
  • id:inosisi4141
    ありがとうございました。
    訂正させていただきました。

    1行目が項目の場合は下記に修正でよいでしょうか。
    stRow = 2
  • id:SALINGER
    1行目が項目で実際のデータが2行目からならそうなります。
     
    数式でやる場合、日々データを加算していくならば、データの最後と男性の集計行の間に行を挿入して行くことになると思います。
    その場合集計範囲が変わるのでそのままではその都度数式を変えないといけないことになります。
    そこで行を挿入しても使える数式の方法を紹介しておきます。
     
    仮に、D2~を集計する男性集計行のD列の数式を次のようにすればいいです。
    =SUMIF(OFFSET($B2,0,0,ROW()-3),"男",OFFSET(D2,0,0,ROW()-3))
  • id:inosisi4141
    ありがとうございます。
    実は困っていましたのでasuka645さんの関数を使い始めてたとこです。

    =SUMIF(OFFSET($C2,0,0,ROW()-3),"男",OFFSET(D2,0,0,ROW()-3))
    =SUMIF(OFFSET($C2,0,0,ROW()-3),"女",OFFSET(D2,0,0,ROW()-3))

    で上手くゆきました。



  • id:SALINGER
    男女はC列でしたか。失礼。Cの前に$を付いてるのはそのままI列までコピーできるようにするためです。

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

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

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

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