Cara mengonversi dan membandingkan string tanggal dengan tanggal di Excel

= "7/29/2011 12:58:00 PM" > NOW()

Saya ingin ungkapan ini mengembalikan FALSE namun mengembalikan TRUE.

Saya tahu saya dapat membagi waktu saya menjadi tanggal dan waktu dan menambahkannya sebagai berikut:

= DateValue("7/29/2011") + TimeValue("12:58:00 PM") > NOW()

Tapi, bagi saya ini tampak janggal. Saya ingin fungsi atau pendekatan sederhana yang terlihat bagus dan saya yakin itu ada di luar sana, tetapi saya tidak dapat menemukannya.

Saya juga tahu ada fungsi VBA bernama CDate yang dapat mengetikkan string menjadi datetime dan itu akan menjadi sempurna. Tapi, saya tidak mengerti cara memanggil fungsi VBA di sel excel.


person Gidon Wise    schedule 29.07.2011    source sumber
comment
Apakah string tanggal Anda diberi kode keras di sel seperti itu? Jika ya, mengapa?   -  person Jean-François Corbett    schedule 29.07.2011
comment
Mereka. Apakah ada format lain untuk mengetiknya yang lebih baik?   -  person Gidon Wise    schedule 29.07.2011
comment
Nah, mengapa 7/29/2011 12:58:00 PM tidak ada di sel tersendiri yang formatnya disetel ke Tanggal? Pengodean keras pada string seperti itu membuatnya tidak terlihat dan tidak fleksibel.   -  person Jean-François Corbett    schedule 29.07.2011
comment
Ah. Jadi itulah praktik terbaik. Saya akan melakukan itu. Namun, dalam beberapa kasus rumusnya perlu memilikinya jadi saya hanya akan menerima apa yang menurut saya merupakan jawaban paling sederhana yaitu *1 saat ini. Terima kasih juga padamu.   -  person Gidon Wise    schedule 29.07.2011
comment
Ya, menurut saya itu praktik yang baik, sedangkan contoh Anda tampak seperti praktik yang buruk! Mengapa ada orang yang mau melakukan itu?! Lihat jawaban saya di bawah ini.   -  person Jean-François Corbett    schedule 29.07.2011


Jawaban (4)


Saya meningkatkan yang berikut ini dari komentar menjadi jawaban:

Kecuali Anda memiliki alasan yang sangat spesifik untuk melakukannya (dan saat ini saya tidak dapat memikirkannya), tanggal (dan nilai lainnya) tidak boleh "dikodekan secara keras" dalam sel sebagai string seperti yang Anda tunjukkan. Pengodean keras pada string seperti itu membuatnya tidak terlihat dan tidak fleksibel. Pengguna hanya akan melihat TRUE atau FALSE tanpa indikasi apa artinya.

Saya hanya akan memasukkan tanggal Anda 7/29/2011 12:58:00 PM ke dalam selnya sendiri, mis. A1, dan atur format sel ke beberapa format tanggal. Lalu Anda bisa mengucapkan = A1 > NOW().

Bertentangan dengan jawaban @jonsca dan @Tiago Cardoso, jawaban ini tidak menjawab pertanyaan spesifik Anda, tetapi sekali lagi, apa yang Anda tanyakan sepertinya merupakan praktik yang buruk bagi saya!

person Jean-François Corbett    schedule 29.07.2011

Lipat gandakan string dengan satu dan fungsi perbandingan akan berfungsi:

= 1*"7/29/2011 12:58:00 PM" > NOW()

Jawaban atas pertanyaan Anda terkait erat dengan komentar @ Jean-François: Mengapa tanggal ditafsirkan oleh Excel sebagai Teks dan bukan tanggal?

Setelah Anda mengetahuinya, Anda akan dapat melakukan perbandingan.

Jika itu karena string diambil sebagai teks, Anda cukup mengalikannya dengan satu dan fungsi perbandingan akan berfungsi. Namun ini hanya berlaku jika format string adalah format tanggal/waktu yang valid di pengaturan regional Anda.

person Tiago Cardoso    schedule 29.07.2011
comment
ini bagus. harus memberimu +1. tapi pada akhirnya akan mengisolasi tanggalnya. - person Gidon Wise; 29.07.2011
comment
Poin utama dari jawaban ini (kalikan dengan satu dan fungsi perbandingan akan berfungsi) harus ditempatkan di depan dan di tengah, bukan terkubur di tengah paragraf ketiga! Membiarkan diriku melakukan ini. Peretasan ini baik untuk diketahui. +1 - person Jean-François Corbett; 29.07.2011

Anda dapat menggabungkan panggilan VBA dalam fungsi khusus:

Function ReturnDate(ByVal datestr As String) As Date
    ReturnDate = CDate(datestr)
End Function

yang dapat Anda gunakan seperti rumus di lembar Anda.

person jonsca    schedule 29.07.2011
comment
Saya tidak dapat memikirkan cara untuk memanggil CDate langsung dari rumus, tetapi cara seperti itu mungkin ada. - person jonsca; 29.07.2011
comment
saya akan menerima ini jika seseorang tidak memberikan jawaban yang lebih baik. ini sepertinya merupakan solusi meskipun ini merupakan solusi yang bagus. - person Gidon Wise; 29.07.2011
comment
Mengatasi masalah X dari masalah XY bisa sangat menyakitkan! +1 - person Jean-François Corbett; 29.07.2011

Cara termudah untuk melakukannya adalah dengan membuat fungsi VBA yang menggunakan CDATE dan mengembalikan perbandingan Anda. Kemudian, panggil fungsi tersebut dari sel excel.

Fungsi VBA

Public Function compareDate(ByVal inputDate As String) As Boolean
  compareDate = CDate(inputDate) > Now()
End Function

Lalu di spreadsheet Anda, lakukan saja

=compareDate("YOUR DATE")

Fungsi ini akan mengembalikan "FALSE" jika lebih lama dan "TRUE" jika lebih baru dari Now()

person Chris Flynn    schedule 29.07.2011
comment
Sama seperti jawaban @ jonsca simpan kosmetik - person Jean-François Corbett; 29.07.2011