Excel 2010: Penghematan Siang Hari - hitung # jam antara cap waktu untuk hari tertentu

3

Saya memiliki lembar cek yang memeriksa berbagai titik pengukuran air, membaca tingkat rata-rata dari sekitar tiga puluh meter yang berbeda dari sistem lain. Saya telah mengotomatiskan lembar centang ini sehingga skrip VBA dapat menjalankan lembar berulang untuk rentang tanggal tertentu (biasanya satu bulan pada suatu waktu) dan mengekstrak hasilnya ke halaman lain.

Inggris memiliki Daylight Savings-nya kemarin (Minggu 25 Oktober 2015) dan ini memunculkan masalah bagi saya. Semua pembacaan meter memberi saya 'rata-rata aliran per jam' dan saya telah mengalikannya dengan 24 untuk memberikan nilai harian. Tetapi saya sekarang sadar bahwa dua hari per tahun, 24 adalah pengganda yang salah untuk digunakan.

Jadi, mengingat Tanggal Mulai 10/10/2015 00:00 dan Tanggal Akhir 26/10/2015 00:00, bagaimana saya bisa membuat Excel menghitung jumlah jam yang tepat di antara mereka, yang juga akan bekerja untuk semua hari lainnya masing-masing tahun? Saya ingin dapat menjalankan lembar centang ini dengan andal di setiap periode tertentu dan untuk setiap hari menghitung total harian dengan benar tergantung pada apakah ia memiliki 23, 24 atau 25 jam. Setiap konversi yang saya coba sejauh ini mengembalikan perbedaan antara dua cap waktu sebagai '1' karena Excel menghitung 25h sebagai satu hari.

Sunting: Sebagai catatan, Inggris berubah pada hari Minggu terakhir bulan Maret dan Oktober.

Steve Taylor
sumber
1
Penghematan Siang Hari Waktu mungkin membantu. Ini menggunakan tanggal AS tetapi Anda dapat memperbaikinya untuk tanggal Inggris. Ini memiliki IsDateWithinDSTmetode ...
DavidPostill
Aslo see Daylight Savings Time Functions
DavidPostill
Anda dapat menggunakan apa yang disediakan di salah satu tautan di atas untuk menulis fungsi IsThisClockForwardsDay () dan IsThisClockBackwordseDay ()
DavidPostill

Jawaban:

1

Karena tidak ditawari metode yang lebih baik, saya sekarang telah menerapkan solusi berikut:

=Flowrate*(24+IF(AND(EOMONTH(Start_Date,0)-Start_Date<7,WEEKDAY(Start_Date,3)=6),CHOOSE(MONTH(Start_Date),0,0,-1,0,0,0,0,0,0,1,0,0),0))

Bagaimana itu bekerja

Secara singkat, bekerja mundur:

CHOOSE(MONTH(Start_Date),0,0,-1,0,0,0,0,0,0,1,0,0)

Untuk Start_Date yang diberikan, periksa bulan mana dalam setahun dan mengembalikan offset -1 jam jika Maret dan +1 jam jika Oktober.

WEEKDAY(Start_Date,3) = 6

Untuk Start_Date yang diberikan, periksa apakah tanggal saat ini adalah hari Minggu, dan mengembalikan TRUE jika demikian.

EOMONTH(Start_Date,0)-Start_Date < 7

Untuk Start_Date yang diberikan, periksa apakah kurang dari tujuh hari sejak akhir bulannya. Mengembalikan BENAR jika demikian.

AND(EOMONTH(),WEEKDAY()=6)

Memeriksa kedua kondisi di atas. Jika ini hari Minggu dan dalam enam hari terakhir dalam sebulan (yaitu, tidak ada lagi hari Minggu), kembalikan BENAR.

IF(AND(),CHOOSE(),0)

Jika kondisi di atas semuanya BENAR, aktifkan PILIH untuk mengembalikan offset yang benar untuk hari Minggu terakhir di bulan yang diberikan. Jika tidak, kembalikan nol. Offset yang dikembalikan ditambahkan ke 24 untuk memberikan jumlah jam pada hari tertentu, yang kemudian dapat dikalikan dengan laju alir per jam untuk memberikan total hari itu.

Steve Taylor
sumber