Visual Basic for Applications:
การแยกวันที่ออกจากสตริง
วิธีการ:
VBA เสนอวิธีที่ตรงไปตรงมาในการแยกวิเคราะห์สตริงเป็นวันที่โดยใช้ฟังก์ชัน CDate
หรือ DateValue
อย่างไรก็ตาม สำคัญมากที่สตริงต้องอยู่ในรูปแบบวันที่ที่สามารถระบุได้
ตัวอย่างพื้นฐานโดยใช้ CDate
:
Sub ParseDateUsingCDate()
Dim dateString As String
Dim parsedDate As Date
dateString = "2023-04-01"
parsedDate = CDate(dateString)
Debug.Print "Parsed Date: "; parsedDate
End Sub
หากคุณรันโค้ดนี้ ผลลัพธ์ในหน้าต่าง Immediate (สามารถเข้าถึงได้ผ่านทาง Ctrl+G
ในตัวแก้ไข VBA) จะเป็น:
Parsed Date: 4/1/2023
หรือคุณสามารถใช้ฟังก์ชัน DateValue
ซึ่งเจาะจงกับวันที่มากขึ้น (ไม่รวมส่วนของเวลา):
Sub ParseDateUsingDateValue()
Dim dateString As String
Dim parsedDate As Date
dateString = "April 1, 2023"
parsedDate = DateValue(dateString)
Debug.Print "Parsed Date using DateValue: "; parsedDate
End Sub
ผลลัพธ์ตัวอย่างสำหรับสิ่งนี้ก็จะแสดงในหน้าต่าง Immediate เช่นกัน:
Parsed Date using DateValue: 4/1/2023
จำไว้ว่าความสำเร็จในการแยกวิเคราะห์ขึ้นอยู่กับรูปแบบวันที่ของสตริงที่ตรงกับการตั้งค่าของระบบหรือแอปพลิเคชัน
ดำดิ่งลงไป
เมื่อ VBA แยกวิเคราะห์สตริงเป็นวันที่ มันใช้การตั้งค่าภูมิภาคของระบบปฏิบัติการ Windows เพื่อตีความรูปแบบวันที่ ความเข้าใจนี้สำคัญมากเพราะสตริงวันที่ที่แยกวิเคราะห์ได้สมบูรณ์บนระบบหนึ่งอาจทำให้เกิดข้อผิดพลาดบนอีกระบบหนึ่งหากมีการใช้การตั้งค่าวัน/เวลาที่แตกต่างกัน
โดยประวัติศาสตร์ การจัดการกับวันที่ได้เป็นแหล่งที่มาของข้อผิดพลาดของแอปพลิเคชัน โดยเฉพาะอย่างยิ่งที่ใช้งานในระดับสากล การพึ่งพาการตั้งค่าภูมิภาคใน VBA คือเหตุผลที่บางคนอาจพิจารณาทางเลือกอื่น ๆ เช่น รูปแบบ ISO 8601 (เช่น “YYYY-MM-DD”) สำหรับการแสดงและการแยกวิเคราะห์วันที่โดยไม่คลุมเครือในระบบต่างๆ น่าเสียดายที่ VBA ไม่รองรับ ISO 8601 โดยเนื้อแท้และการแยกวิเคราะห์ด้วยตนเองจะต้องใช้สำหรับการปฏิบัติตามอย่างเคร่งครัด
สำหรับการแยกวิเคราะห์วันที่ที่ซับซ้อนกว่าที่ CDate
หรือ DateValue
สามารถจัดการได้ หรือเพื่อให้แน่ใจว่าการแยกวิเคราะห์เป็นไปอย่างสม่ำเสมอไม่ว่าการตั้งค่าโลคารจะเป็นเช่นไร โปรแกรมเมอร์อาจหันไปใช้ฟังก์ชันการแยกวิเคราะห์ที่กำหนดเอง ซึ่งอาจรวมถึงการแบ่งสตริงวันที่ออกเป็นส่วนประกอบ (ปี, เดือน, วัน) และสร้างวันที่โดยใช้ฟังก์ชัน DateSerial
คนอื่นอาจเลือกใช้ภาษาหรือไลบรารีที่มีประสิทธิภาพมากขึ้นที่ออกแบบมาพร้อมกับการคำนึงถึงการนานาชาติสำหรับงานเหล่านี้