Saya memiliki dua tanggal di sel "A1" (Start Date) dan "B1" (End Date). Saya mengubah tanggal untuk mendapatkan angka sebenarnya di antara tanggal menggunakan rumus SUMIFS.

Ada Date Kolom di Sheet dengan Time.

Jadi yang saya inginkan adalah setiap kali "A1" (Start Date) berubah, waktunya harus selalu awal seperti 00:00:00 dan ketika saya mengubah tanggal untuk "B1" (End Date) itu harus selalu seperti 23:59:59 ada cara apa pun untuk mencapai ini menggunakan VBA.

Bantuan Anda akan dihargai.

If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
    
    With Range("A1")
    .Value = Now()
    .NumberFormat = "mm/dd/yyyy h:mm:ss AM/PM"
    End With

    With Range("B1")
    .Value = Now()
    .NumberFormat = "mm/dd/yyyy h:mm:ss AM/PM"
    End With

    
    End If
1
Valiant 11 Mei 2021, 20:57

3 jawaban

Jawaban Terbaik

Waktu numerik 23:59:59 tidak sama dengan 0,99999999, melainkan 0,999988425925926

Tetapi gunakan penanganan tanggal/waktu asli untuk ini dan hindari angka pintar:

Range("A1").Value = DateValue(Range("A1").Value)
Range("B1").Value = DateValue(Range("B1").Value) + TimeSerial(23, 59, 59)
1
Gustav 12 Mei 2021, 08:16

Jika saya memahami Anda dengan benar, Anda tidak perlu repot dengan bagian waktu dari tanggal atau melalui mekanisme mencoba mengubahnya.

Anda hanya perlu menyusun rumus SUMIFS dengan benar.

  • Rentang untuk menjumlahkan: sumRange
  • Tanggal di tabel Anda: myDates

Saat Anda memasukkan tanggal dalam A1 atau B1, tanggal tersebut akan dimasukkan seolah-olah pada awal hari.

Jika tanggal Anda di myDates hanyalah tanggal, Anda dapat menggunakan rumus:

=SUMIFS(sumRange,myDates,">=" & startDate,myDates,"<=" & endDate)

Namun, jika tanggal Anda di myDates juga menyertakan waktu, Anda dapat sedikit mengubah rumusnya:

=SUMIFS(sumRange,myDates,">=" & startDate,myDates,"<" & endDate+1)

Dan Anda dapat menggunakan rumus ke-2 di kedua contoh

Sunting: Saya baru saja melihat Anda memposting rumus Anda sebagai komentar

Saya berasumsi Anda telah memasukkan HANYA tanggal (tanpa waktu) di I1 dan J1

Rumus Anda seperti yang diposting akan berfungsi KECUALI C:C menyertakan waktu dengan tanggal. Jika itu termasuk waktu dengan tanggal, maka coba:

=SUMIFS(D:D,E:E,"<>Pending for Payment",B:B,H2,C:C,">="&$I$1,C:C,"<"&$J$1+1)

Dengan menambahkan 1 ke tanggal, kami memindahkannya ke awal hari setelahnya; jadi kami mengubah <= menjadi hanya < dan mencakup seluruh rentang tanggal yang Anda inginkan.

1
Ron Rosenfeld 11 Mei 2021, 22:06

Saya pikir ini bisa berhasil, jika saya mengerti pertanyaan Anda dengan benar.

Ini akan memastikan A1 adalah integer dan membuat B1 integer kemudian menambahkan 0,99999.

If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
    
    Range("A1").value = cint(range("A1").value)
    Range("B1").value = cint(range("B1").value) + 0.99999999

End if

Pastikan sel diatur untuk ditampilkan sebagai tanggal dan waktu.

1
Andreas 11 Mei 2021, 19:16