VBA String ถึงวันที่ | แปลงค่าสตริงเป็นวันที่ใน Excel VBA

Excel VBA String ถึงวันที่

ใน Vba มีวิธีการที่เราสามารถแปลงสตริงที่กำหนดเป็นวันที่ได้และวิธีการนี้เรียกว่าฟังก์ชัน CDATE ใน vba ซึ่งเป็นฟังก์ชัน inbuilt ใน VBA และส่วนที่จำเป็นสำหรับฟังก์ชันนี้คือการแปลงสตริงเป็นครั้งแรก ตัวเลขจากนั้นเราจะแปลงตัวเลขที่กำหนดเป็นวันที่ รูปแบบผลลัพธ์ขึ้นอยู่กับรูปแบบวันที่ของระบบเท่านั้น

ปัญหาทั่วไปอย่างหนึ่งที่เราทุกคนต้องเผชิญกับ excel คือ“ วันที่และเวลา” และมักจะถูกจัดเก็บเป็นค่าข้อความและไม่มีใครสังเกตเห็นในตอนแรก แต่เมื่อต้องใช้เวลานั้นเราจะได้รู้ว่าค่าเหล่านั้นถูกจัดเก็บเป็นข้อความและไม่รู้วิธีจัดการกับค่าเหล่านั้นเลย "วันที่และเวลา" คือสองสิ่งที่รวมกันในองค์ประกอบเดียว แต่เมื่อค่าเหล่านั้นถูกเก็บเป็นค่าข้อความมันเป็นเรื่องยากที่จะใช้

วิธีการแปลงค่าสตริงเป็นวันที่?

คุณสามารถดาวน์โหลดเทมเพลต Excel VBA String to Date ได้ที่นี่ - เทมเพลต Excel แบบสตริงถึงวันที่ VBA

ตัวอย่าง # 1

เมื่อประกาศและกำหนดตัวแปร VBA เป็น String แล้วสิ่งที่กำหนดให้กับตัวแปรนั้นจะถือว่าเป็นสตริงเท่านั้น สำหรับตัวอย่างดูโค้ดด้านล่าง

รหัส:

 Sub String_To_Date () Dim k As String k = "10-21" MsgBox k End Sub 

ในตัวแปรโค้ดด้านบน“ k” กำหนดเป็นประเภทข้อมูล“ สตริง” และสำหรับตัวแปรนี้เราได้กำหนดค่าเป็น“ 10-21”

โอเคมารันโค้ดและดูสิ่งที่เราได้รับในกล่องข้อความใน VBA

เราได้ค่าเป็น 10-21 เท่านั้น แต่โดยปกติค่าเหล่านี้คือวันที่ไม่ใช่ค่าสตริง ดังนั้นแม้ว่าประเภทข้อมูลที่กำหนดจะเป็น "สตริง" เราก็ยังสามารถแปลงเป็นวันที่ได้โดยใช้ฟังก์ชันการแปลงประเภทข้อมูล CDATE VBA

รหัส:

 Sub String_To_Date () Dim k As String k = "10-21" MsgBox CDate (k) End Sub 

ข้างต้นก่อนที่เราจะแสดงผลลัพธ์ของตัวแปร“ k” ในกล่องข้อความเราได้กำหนดฟังก์ชัน CDATE มีการปรับเปลี่ยนเล็กน้อยมาดูกันว่ามันสร้างผลกระทบได้มากแค่ไหน

ตอนนี้เราจะเห็นผลลัพธ์เป็น "วันที่" ไม่ใช่ค่า "สตริง" อีกต่อไป

ตัวอย่าง # 2

ตอนนี้ดูโค้ดด้านล่างสำหรับตัวอย่าง

รหัส:

 Sub String_To_Date () Dim k As String k = 43599 MsgBox k End Sub 

ณ เวลานี้ในโค้ดด้านบนจะแสดงผลลัพธ์เป็น“ 43599” ตามที่เรากำหนดไว้

แต่เมื่อเราใช้ฟังก์ชัน CDATE มันจะแปลงเป็นค่าวันที่

รหัส:

 Sub String_To_Date () Dim k As String k = 43599 MsgBox CDate (k) End Sub 

ผลลัพธ์หลังจากใช้ฟังก์ชัน CDATE เป็นดังนี้

เนื่องจาก excel เก็บวันที่เป็นหมายเลขซีเรียลหมายเลขประจำเครื่องที่เรากำหนด 43599 จึงเท่ากับวันที่ 05/14/2019 เมื่อใช้รูปแบบวันที่

นอกจากนี้เรายังสามารถใช้รูปแบบวันที่เป็น“ DD-MMM-YYYY” เพื่ออ่านวันที่ได้อย่างแม่นยำ

รหัส:

 Sub String_To_Date1 () Dim k As String Dim DateValue As Date k = 43599 DateValue = CDate (k) รูปแบบ MsgBox (DateValue, "DD-MMM-YYYY") End Sub 

ในข้างต้นฉันได้ประกาศตัวแปรพิเศษหนึ่งตัวเพื่อเก็บผลลัพธ์ สำหรับตัวแปรนี้ฉันได้ใช้ฟังก์ชันการแปลง CDATE

ต่อไปฉันได้ใช้ฟังก์ชัน FORMAT เพื่อใช้รูปแบบของรูปแบบ“ DD-MMM-YYYY” และผลลัพธ์จะเป็นดังที่แสดงด้านล่าง

ด้วยเหตุนี้เราจึงสามารถอ่านส่วนของวันและส่วนเดือนได้อย่างชัดเจน นอกจากนี้ยังขึ้นอยู่กับรูปแบบวันที่ระบบของคุณใน excel เนื่องจากรูปแบบวันที่ในระบบของฉันคือ "MM-DD-YYYY" จึงแสดงเช่นนั้น แต่ไม่ควรเป็นอุปสรรคต่อการจัดรูปแบบ

ตัวอย่าง # 3

ตอนนี้เราจะเห็นว่าวันที่ถูกจัดรูปแบบเป็นค่าข้อความในเซลล์แผ่นงานอย่างไร ด้านล่างนี้คือภาพของวันที่ที่จัดเก็บเป็นข้อความในแผ่นงาน

ในคอลัมน์ A จาก A2 ถึง A12 เรามีค่าการค้นหาวันที่ แต่เมื่อเราดูที่แท็บรูปแบบจะแสดงรูปแบบ "ข้อความ" ตอนนี้เราต้องแปลงค่าเหล่านี้จากข้อความเป็นวันที่

ด้านล่างนี้คือรหัสที่ฉันเขียนขึ้นเพื่อแปลงค่าวันที่ที่จัดรูปแบบข้อความเป็นวันที่จริง

รหัส:

 Sub String_To_Date2 () Dim k As Long 'ข้อมูลอยู่ในเซลล์มากกว่าหนึ่งเซลล์ดังนั้นจำเป็นต้องวนซ้ำแต่ละเซลล์' Open For Loop For k = 2 ถึง 12 'ข้อมูลเริ่มต้นจากแถวที่ 2 และสิ้นสุดที่แถวที่ 12 ดังนั้น 2 ถึง 12 Cells (k, 2) .Value = CDate (Cells (k, 1) .Value) ถัดไป k End Sub 

หากคุณรันโค้ดมันจะให้ผลลัพธ์ด้านล่าง

สิ่งที่ต้องจำ

  • CDATE เป็นฟังก์ชันการแปลงชนิดข้อมูล แต่สามารถใช้เพื่อแปลงวันที่ที่จัดเก็บสตริง VBA เป็นค่าวันที่จริง
  • ผลลัพธ์ของรูปแบบฟังก์ชัน CDATE ขึ้นอยู่กับรูปแบบวันที่ของระบบเท่านั้น
  • วันที่จะถูกจัดเก็บเป็นหมายเลขซีเรียลใน excel ดังนั้นการจัดรูปแบบจึงจำเป็นต้องแสดงเป็นวันที่