質問です

エクセルで1ファイルに名前がついたsheetが7つあります
各シートに下記のようなデータがあります。
シート毎に計算できるマクロか関数をお願いします
A列     F列    G列   H列    I列
日付     人数   日計  人数    金額
2011/5/1            1     1000
2011/5/1            1     1000
2011/5/2            1     2000
2011/5/2            1     2000
2011/5/2            1     3000
A列に日付、I列に金額の以上のデータがあります
このデータの日付のそれぞれの最後の行に
その日の人数をF列、合計金額をG列に計算して
表示できる関数またはマクロをおねがいします。
答え
A列     F列    G列   H列    I列
日付     人数   日計   人数    金額
2011/5/1              1     1000
2011/5/1   2    2000   1     1000
2011/5/2              1     2000
2011/5/2              1     2000
2011/5/2   3    7000   1     3000

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2011/06/03 15:09:50
  • 終了:2011/06/03 19:23:13

ベストアンサー

id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/06/03 15:36:31

ポイント50pt

FとG列は クリアしていませんので、合計のところだけセットしています。

ほかに入っていたら そのままということです。

あと 対象となるシートだけ mainのほうに コピーして 書いてください。

Sub main()

    '対象となるシート名を入れて呼び出します。
    Call jikkou("Sheet3")
    Call jikkou("Sheet4")
    Call jikkou("Sheet5")

End Sub


Sub jikkou(s As String)
    
    c0 = "A"    '日付の列
    c1 = "F"    '計の人数をセットする列
    c2 = "G"    '計の金額をセットする列
    c3 = "H"    '集計対象の人数をセットする列
    c4 = "I"    '集計対象の金額をセットする列

    b = Sheets(s).Cells(2, c0).End(xlDown).Row
    If Sheets(s).Cells(2, c0) = "" Then Exit Sub
    If Sheets(s).Cells(3, c0) = "" Then b = 3

    k1 = 0
    k2 = 0
    m = Sheets(s).Cells(2, c0)
    For a = 2 To b
        If Not (m = Sheets(s).Cells(a, c0)) Then
            Sheets(s).Cells(a - 1, c1) = k1
            Sheets(s).Cells(a - 1, c2) = k2
            k1 = 0
            k2 = 0
        End If
        k1 = k1 + Sheets(s).Cells(a, c3)
        k2 = k2 + Sheets(s).Cells(a, c4)
        m = Sheets(s).Cells(a, c0)
    Next a
    
    Sheets(s).Cells(a - 1, c1) = k1
    Sheets(s).Cells(a - 1, c2) = k2
    
End Sub

id:inosisi4141

ありがとうございます

やってみたのですが

H列I列のデータを同じくもってくるだけなのですが

どこの設定がわるいのでしょうか?

Sheet名はコピーしていれました。

A列の日付ごとに人数と金額を小計することができません。

よろしくお願いします。

2011/06/03 16:58:26

その他の回答(1件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692011/06/03 15:26:17

ポイント50pt

これくらいなら数式でやったほうが簡単かもしれません。

日付順に並んでいるなら

F2の数式

=IF(A2=A3,"",COUNTIF(A:A,A2))


G2の数式

=IF(A2=A3,"",SUMIF(A:A,A2,I:I))


としてそれぞれ下にコピー。全てのシートに同様に入れる。

id:inosisi4141

ありがとうございます

やってみたのですが

H列I列のデータを同じくもってくるだけなのですが

どこの設定がわるいのでしょうか?

2011/06/03 18:28:45
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/06/03 15:36:31ここでベストアンサー

ポイント50pt

FとG列は クリアしていませんので、合計のところだけセットしています。

ほかに入っていたら そのままということです。

あと 対象となるシートだけ mainのほうに コピーして 書いてください。

Sub main()

    '対象となるシート名を入れて呼び出します。
    Call jikkou("Sheet3")
    Call jikkou("Sheet4")
    Call jikkou("Sheet5")

End Sub


Sub jikkou(s As String)
    
    c0 = "A"    '日付の列
    c1 = "F"    '計の人数をセットする列
    c2 = "G"    '計の金額をセットする列
    c3 = "H"    '集計対象の人数をセットする列
    c4 = "I"    '集計対象の金額をセットする列

    b = Sheets(s).Cells(2, c0).End(xlDown).Row
    If Sheets(s).Cells(2, c0) = "" Then Exit Sub
    If Sheets(s).Cells(3, c0) = "" Then b = 3

    k1 = 0
    k2 = 0
    m = Sheets(s).Cells(2, c0)
    For a = 2 To b
        If Not (m = Sheets(s).Cells(a, c0)) Then
            Sheets(s).Cells(a - 1, c1) = k1
            Sheets(s).Cells(a - 1, c2) = k2
            k1 = 0
            k2 = 0
        End If
        k1 = k1 + Sheets(s).Cells(a, c3)
        k2 = k2 + Sheets(s).Cells(a, c4)
        m = Sheets(s).Cells(a, c0)
    Next a
    
    Sheets(s).Cells(a - 1, c1) = k1
    Sheets(s).Cells(a - 1, c2) = k2
    
End Sub

id:inosisi4141

ありがとうございます

やってみたのですが

H列I列のデータを同じくもってくるだけなのですが

どこの設定がわるいのでしょうか?

Sheet名はコピーしていれました。

A列の日付ごとに人数と金額を小計することができません。

よろしくお願いします。

2011/06/03 16:58:26
  • id:taknt
    >H列I列のデータを同じくもってくるだけなのですが
    >どこの設定がわるいのでしょうか?

    日付がひとつだけでしたら そうなりますが・・・。

    あと 日付順にソートされていることを 前提としています。
    もし 日付順にソートされていないのならば 別のプログラムを作らないといけないですね。

  • id:inosisi4141
    日付順にソートされています
    A列
    2011/5/2
    2011/5/5
    2011/5/5
    2011/5/8

    みたいに並んでいる場合はだめですか
  • id:taknt
    その場合は 同じ日付の下のほうに 合計をセットするはずです。
  • id:inosisi4141
    takntさん
    マクロに記載した以外のsheetがあるとだめですか。
    計算させたい行のほかに空白行のあとに別のデータがあるとだめですか。
  • id:inosisi4141
    takntさん
    日付は
    表面上は2011/5/1ですが
    セルの中は2011/5/1 10:08:49
    になっていますが問題ありますか

    不要なsheetと不要な行は削除しましたが同じくHとIのコピーをFGへ持ってきます
  • id:taknt
    >セルの中は2011/5/1 10:08:49 になっていますが問題ありますか

    ああ これは 問題ですね。
    完全に一致しないから 日付と時間ごとに なっちゃったんです。

    ま、それなら それで 手段は ありますけど・・・。

  • id:SALINGER
    A列は単に日付なのではなく時刻まで入ったシリアル値のようですね。
    その場合は、上記の数式では駄目です。
    日付のシリアル値とか基本的なことから覚えないと回答が糠に釘になってるように思います。
    人に聞いて難しいことをやるのではなく、簡単なことから自分でやってみることをお勧めします。

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

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

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

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