0

さて、これが私の現在のコードのサンプルです。私はこれをいくつかのセルに持っています。B-H7は検索している不在タイプを反映しています。

=COUNTIFS('Old Data'!$A:$A,Tracking!A8,'Old Data'!$B:$B,$E$7, 'Old Data'!D:D, ">"&$B$5, 'Old Data'!D:D, "<"&$C$5)

このコードが実行しているのは、データシートに従業員名が記載されているスプレッドシートをループし、欠勤タイプを比較してそれぞれの列に並べ替えてカウントすることです。コードの最後のビットは、日付範囲間の検索を制限します。

そうは言っても、これに条件を追加する必要があります。これは、VBAに取り込まないとできないかどうかわかりません。列DIの「古いデータ」シートには開始時刻があり、MM / DD / YY HH:MM形式で表示されます。列EIには、同じMM / DD / YY HH:MM形式で表示される終了時刻があります。

私はする方法が必要です

A.)プログラムに、これらの日付の間の日数と、それぞれの日のカウントの+1をカウントさせます。

B.)開始日と終了日が同じ場合は、プログラムに時間数を比較させます。4未満の場合は、カウンターに.5を追加するだけです。

私の最初の考えは、countifsの数式をスクラッチし、ループしてVBAを使用して解析することですが、組み込み関数の能力はかなり驚くべきものであるため、数式だけで実行できるかどうかを最初に確認したいと思いました。これまでのところ私には。

これを数式からVBA関数に変換してセルで呼び出す必要があると思いますが、完全にはわかりません。VBA/Excelのシーンではかなり新しいものです。

また、私はExcel2007を使用しています。

この問題に関するご意見ありがとうございます。

4

1 に答える 1

1

数式を使用することは可能ですが、COUNTIFSを使用することはできません。この配列数式はそれを行う必要があります

=SUM(IF(('Old Data'!$A$2:$A$100=Tracking!A8)*('Old Data'!$B$2:$B$100=$E$7)*('Old Data'!$D$2:$D$100>$B$5)*('Old Data'!$D$2:$D$100<$C$5),IF('Old Data'!$E$2:$E$100-'Old Data'!$D$2:$D$100<"4:00"+0,0.5,INT('Old Data'!$E$2:$E$100)-INT('Old Data'!$D$2:$D$100)+1)))

Ctrl + Shift+Enterで確認

データ範囲を行2から100に制限し、必要に応じて調整します。列全体が可能ですが、数式の速度が大幅に低下する可能性があります。

就業日をカウントするには、このバージョンにのみ変更してください。

=SUM(IF(('Old Data'!$A$2:$A$100=Tracking!A8)*('Old Data'!$B$2:$B$100=$E$7)*('Old Data'!$D$2:$D$100>$B$5)*('Old Data'!$D$2:$D$100<$C$5),IF('Old Data'!$E$2:$E$100-'Old Data'!$D$2:$D$100<"4:00"+0,0.5,NETWORKDAYS('Old Data'!$D$2:$D$100+0,'Old Data'!$E$2:$E$100+0))))

NETWORKDAYS関数に休日範囲を追加する場合は、休日を除外することもできます。

于 2012-07-31T17:43:39.067 に答える