0

ExampleSheet1のように、毎日(連続したすべての日ではありません)シートにExcelワークブックがあります。すべてのシートには空のリスト イベントが含まれており、それぞれに一意の ID と名前が付いています。イベントが発生すると、開始時刻と終了時刻が記録され、Excel がイベントの期間を計算します (特に)。

例シート1

   ABCDEF
1 ID 名前 日付 開始 終了 期間
2 100 フー 10.07.2013 16:00 18:30 2,50
3 101 バー 10.07.2013 0,00
4 102 aaa 10.07.2013 12:00 3:30 15,50
5 103 bb 10.07.2013 10:00 12:00 2,00
6 104 ccc 10.07.2013 9:00 11:00 2,00

ExampleSheet2 の列 C、D、および E のように、各イベントの期間が月ごとに合計される概要の計算を自動化したいと考えています。

例シート2

   ABCDE        
合計 合計 合計 1 id 名 合計
                   2013-07 2013-08 2013-09
2 100 フー 12,00 34,00 ...
3 101 バー 32,00 12,50 ..
4 102 aaa 35,50 123,00
5 103 bb 3,00 5,00
6 104cc 8,00 4,50

SUMIF は複数のシートでは機能しないため、最初に考えたのは、ExampleSheet2 の列 C、D、および E の各行から次のような関数を呼び出すことでした。しかし、それはかなりの数の繰り返しになり、非常に醜い解決策のようです.

関数カウンター (整数としての targetID、整数としての targetDate)

    整数 i = 0
    ワークブックの各ワークシート (
        各行(
            column1 == targetID の場合。それから
                if month(column3) == targetDate; それから
                    i = i + 列 6
        )

    )
    私を返す

私は Excel マクロに慣れておらず、このコードを一緒に Google&Paste する必要があるため、これにアプローチする方法についてのヒントをいただければ幸いです。ありがとう。

4

1 に答える 1

0

VBA を使用する必要はありません。SUMIF と INDIRECT を組み合わせて使用​​すると、複数のワークシートで SUMIF を実現できます。次の例では、シート 1 とシート 2 の列 A にダミー ID があり、これらのシートの列 B にダミー データがあります。3 番目のシートの列 F にシート名があり、列 CI に次の式を追加しました。

=SUM(SUMIF(INDIRECT($F$1:$F$2&"!"&"A1:A100"), A1, INDIRECT($F$1:$F$2&"!"&"B1:B100")))

これは配列数式であるため、入力するときに CTRL + SHIFT + ENTER を押して配列として計算する必要があります。そうしないと、最初のページの合計のみが取得されます。

このソリューションは、はるかに*はるか*にクリーンです。唯一の「汚れた」部分は、ワークブックのどこかにシート名をリストしてそれらを参照する必要があることです。多数のワークシートがある場合は、単純なマクロを使用してすべてのワークシートをループし、それらの名前を出力してリストを形成できます。

最後に、毎回リストにシート名を追加し、範囲を更新して数式のすべてを確実に取得する必要があることに注意する必要があります.

編集:言うまでもなく、私の式を特定のニーズに合わせて調整する必要があります. SUMIF と SUMIFS の使い方を知っていると思いますので、複数のワークシートに適応させる方法を知っているので、これを行うのに問題はないはずです。

于 2013-05-08T11:11:39.173 に答える