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 คนอื่นอาจเลือกใช้ภาษาหรือไลบรารีที่มีประสิทธิภาพมากขึ้นที่ออกแบบมาพร้อมกับการคำนึงถึงการนานาชาติสำหรับงานเหล่านี้