วิธีการแปลงและเปรียบเทียบสตริงวันที่กับวันที่ใน Excel

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

ฉันต้องการให้นิพจน์นี้ส่งคืน FALSE แต่กลับคืนค่า TRUE

ฉันรู้ว่าฉันสามารถแยกวันที่และเวลาออกเป็นวันที่และเวลาแล้วรวมเข้าด้วยกันได้ดังนี้:

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

แต่นี่ดูเหมือนไม่สวยงามสำหรับฉัน ฉันต้องการฟังก์ชั่นหรือวิธีการง่ายๆ ที่ดูดีและฉันรู้สึกแน่ใจว่ามันมีอยู่จริง แต่ฉันหามันไม่เจอ

ฉันรู้ด้วยว่ามีฟังก์ชัน VBA ชื่อ CDate ซึ่งสามารถพิมพ์สตริงลงในวันที่และเวลาได้ และนั่นจะสมบูรณ์แบบ แต่ฉันไม่เห็นวิธีเรียกใช้ฟังก์ชัน VBA ในเซลล์ Excel


person Gidon Wise    schedule 29.07.2011    source แหล่งที่มา
comment
สตริงวันที่ของคุณฮาร์ดโค้ดในเซลล์เช่นนั้นหรือไม่ ถ้าเป็นเช่นนั้นทำไม?   -  person Jean-François Corbett    schedule 29.07.2011
comment
พวกเขาคือ. มีรูปแบบอื่นในการพิมพ์ที่ดีกว่าหรือไม่?   -  person Gidon Wise    schedule 29.07.2011
comment
แล้วทำไม 7/29/2011 12:58:00 PM ถึงไม่อยู่ในเซลล์ที่มีการตั้งค่ารูปแบบเป็น Date ด้วยตัวเอง ฮาร์ดโค้ดสตริงแบบนั้นทำให้มองไม่เห็นและไม่ยืดหยุ่น   -  person Jean-François Corbett    schedule 29.07.2011
comment
อา. นั่นคือแนวทางปฏิบัติที่ดีที่สุด ฉันจะทำอย่างนั้น แต่ในบางกรณี สูตรจำเป็นต้องมี ฉันก็เลยยอมรับสิ่งที่ฉันคิดว่าเป็นคำตอบที่ง่ายที่สุดซึ่งตอนนี้คือ *1 ขอบคุณคุณเช่นกัน   -  person Gidon Wise    schedule 29.07.2011
comment
ใช่ ฉันคิดว่านั่นเป็นแนวปฏิบัติที่ดี ในขณะที่ตัวอย่างของคุณดูเหมือนเป็นแนวปฏิบัติที่แย่มาก! ทำไมใครๆ ก็อยากทำแบบนั้น! ดูคำตอบของฉันด้านล่าง   -  person Jean-François Corbett    schedule 29.07.2011


คำตอบ (4)


ฉันกำลังอัปเกรดสิ่งต่อไปนี้จากความคิดเห็นเป็นคำตอบ:

เว้นแต่ว่าคุณมีเหตุผลที่เฉพาะเจาะจงมากในการทำเช่นนั้น (และตอนนี้ฉันคิดไม่ออกแล้ว) วันที่ (และค่าอื่น ๆ) ไม่ควร "ฮาร์ดโค้ด" ในเซลล์ตามสตริงอย่างที่คุณแสดง ฮาร์ดโค้ดสตริงแบบนั้นทำให้มองไม่เห็นและไม่ยืดหยุ่น ผู้ใช้จะเห็นเพียง TRUE หรือ FALSE โดยไม่มีข้อบ่งชี้ว่าสิ่งนี้หมายถึงอะไร

ฉันจะใส่วันที่ของคุณ 7/29/2011 12:58:00 PM ลงในเซลล์ด้วยตัวเอง เช่น A1 และตั้งค่ารูปแบบของเซลล์เป็นรูปแบบวันที่ จากนั้นคุณสามารถพูด = A1 > NOW()

ตรงกันข้ามกับคำตอบของ @jonsca และ @Tiago Cardoso คำตอบนี้ไม่ได้ตอบคำถามของคุณโดยเฉพาะ แต่อีกครั้งสิ่งที่คุณถามดูเหมือนจะเป็นการปฏิบัติที่แย่มากสำหรับฉัน!

person Jean-François Corbett    schedule 29.07.2011

คูณสตริงด้วยหนึ่ง แล้วฟังก์ชันการเปรียบเทียบจะทำงาน:

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

คำตอบสำหรับคำถามของคุณเกี่ยวข้องอย่างใกล้ชิดกับความคิดเห็นของ @ Jean-François: เหตุใด Excel จึงตีความวันที่เป็นข้อความไม่ใช่ตามวันที่

เมื่อคุณทราบแล้ว คุณจะสามารถทำการเปรียบเทียบได้

หากเป็นเพราะสตริงถูกดึงออกมาเป็นข้อความ คุณสามารถคูณมันด้วย 1 แล้วฟังก์ชันการเปรียบเทียบจะทำงานได้ แต่จะใช้ได้เฉพาะในกรณีที่รูปแบบสตริงเป็นรูปแบบวันที่/เวลาที่ถูกต้องในการตั้งค่าภูมิภาคของคุณ

person Tiago Cardoso    schedule 29.07.2011
comment
นี่เป็นสิ่งที่ดีมาก ต้องให้คุณ +1 แต่สุดท้ายก็จะแยกวันที่ออกไป - person Gidon Wise; 29.07.2011
comment
ประเด็นหลักของคำตอบนี้ (คูณด้วยหนึ่งแล้วฟังก์ชันการเปรียบเทียบจะทำงาน) ควรวางไว้ด้านหน้าและตรงกลาง โดยไม่ฝังไว้ตรงกลางย่อหน้าที่สาม! ยอมให้ตัวเองทำสิ่งนี้ แฮ็คนี้เป็นสิ่งที่ดีที่จะรู้ +1 - person Jean-François Corbett; 29.07.2011

คุณสามารถตัดการโทร VBA ในฟังก์ชันที่กำหนดเองได้:

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

ซึ่งคุณสามารถใช้ได้เหมือนกับสูตรในชีตของคุณ

person jonsca    schedule 29.07.2011
comment
ฉันไม่สามารถคิดวิธีเรียก CDate โดยตรงจากสูตรไม่ได้ แต่วิธีดังกล่าวอาจมีอยู่ - person jonsca; 29.07.2011
comment
ฉันจะยอมรับสิ่งนี้ถ้ามีคนไม่มีคำตอบที่ดีกว่านี้ ดูเหมือนว่าจะเป็นการแก้ไขแม้ว่าจะเป็นวิธีแก้ปัญหาที่ดีก็ตาม - person Gidon Wise; 29.07.2011
comment
การแก้ไขปัญหา X ของ XY อาจเป็นเรื่องที่เจ็บปวดมาก! +1 - person Jean-François Corbett; 29.07.2011

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการสร้างฟังก์ชัน VBA ที่ใช้ CDATE และส่งกลับการเปรียบเทียบของคุณ จากนั้นให้เรียกใช้ฟังก์ชันจากเซลล์ Excel

ฟังก์ชัน VBA

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

จากนั้นในสเปรดชีตของคุณ ก็แค่ทำ

=compareDate("YOUR DATE")

ฟังก์ชันจะส่งกลับ "FALSE" หากเก่ากว่า และ "TRUE" หากใหม่กว่า Now()

person Chris Flynn    schedule 29.07.2011
comment
เช่นเดียวกับคำตอบของ @jonsca ประหยัดเครื่องสำอาง - person Jean-François Corbett; 29.07.2011