ฉันสงสัยว่าปัญหาคือ Excel ไม่สามารถเข้าใจรูปแบบ ... แม้ว่าคุณจะเลือกรูปแบบวันที่ แต่ยังคงเป็นข้อความ
คุณสามารถทดสอบสิ่งนี้ได้อย่างง่ายดาย: เมื่อคุณพยายามอัปเดตรูปแบบวันที่ให้เลือกคอลัมน์และคลิกขวาแล้วเลือกเซลล์รูปแบบ (ตามที่คุณทำ) แต่เลือกตัวเลือก 2001-03-14 (ใกล้ด้านล่างของรายการ) จากนั้นตรวจสอบรูปแบบของเซลล์ของคุณ
ฉันจะสงสัยว่าเฉพาะบางรูปแบบวันที่อัปเดตอย่างถูกต้องแสดงว่า Excel ยังคงรักษามันเหมือนสตริงไม่ใช่วันที่ (หมายเหตุรูปแบบที่แตกต่างกันในภาพหน้าจอด้านล่าง)!
มีวิธีแก้ไขปัญหาสำหรับสิ่งนี้ แต่ไม่มีสิ่งใดที่เป็นไปโดยอัตโนมัติเพียงเพราะคุณส่งออกทุกครั้ง ฉันขอแนะนำให้ใช้ VBa ซึ่งคุณสามารถเรียกใช้แมโครที่แปลงจากรูปแบบวันที่ในสหรัฐอเมริกาเป็นสหราชอาณาจักรได้ แต่นี่หมายถึงการคัดลอกและวาง VBa ลงในแผ่นงานของคุณทุกครั้ง
อีกวิธีหนึ่งคือคุณสร้าง Excel ที่อ่านแผ่นงาน Excel ที่ส่งออกที่สร้างขึ้นใหม่ (จากการแลกเปลี่ยน) จากนั้นดำเนินการ VBa เพื่ออัปเดตรูปแบบวันที่สำหรับคุณ ฉันจะถือว่าไฟล์เอ็กซ์เพรสเอ็กซ์เชนจ์เอ็กซ์พอร์ตเอ็กซ์เพรสนั้นจะมีชื่อไฟล์ / ไดเรกทอรีเดียวกันเสมอ
ดังนั้นสร้างแผ่นงาน Excel ใหม่ที่เรียกว่า ImportData.xlsm (เปิดใช้งาน excel) นี่คือไฟล์ที่เราจะนำเข้าไฟล์ Exchange Excel ที่ส่งออกไป!
เพิ่ม VBa นี้ลงในไฟล์ ImportData.xlsm
Sub DoTheCopyBit()
Dim dateCol As String
dateCol = "A" 'UPDATE ME TO THE COLUMN OF THE DATE COLUMN
Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
directory = "C:\Users\Dave\Desktop\" 'UPDATE ME
fileName = Dir(directory & "ExportedExcel.xlsx") 'UPDATE ME (this is the Exchange exported file location)
Do While fileName <> ""
'MAKE SURE THE EXPORTED FILE IS OPEN
Workbooks.Open (directory & fileName)
Workbooks(fileName).Worksheets("Sheet1").Copy _
Workbooks(fileName).Close
fileName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Dim row As Integer
row = 1
Dim i As Integer
Do While (Range(dateCol & row).Value <> "")
Dim splitty() As String
splitty = Split(Range(dateCol & row).Value, "/")
Range(dateCol & row).NumberFormat = "@"
Range(dateCol & row).Value = splitty(2) + "/" + splitty(0) + "/" + splitty(1)
Range(dateCol & row).NumberFormat = "yyyy-mm-dd"
row = row + 1
Loop
End Sub
สิ่งที่ฉันทำก็คืออัปเดตรูปแบบวันที่เป็น yyyy-mm-dd เพราะด้วยวิธีนี้แม้ว่า Excel จะให้ตัวกรองการเรียง AZ ของคุณแทนค่าใหม่ล่าสุด แต่ก็ยังใช้งานได้!
ฉันแน่ใจว่าโค้ดด้านบนมีข้อบกพร่อง แต่เห็นได้ชัดว่าฉันไม่รู้ว่าคุณมีข้อมูลประเภทใด แต่ฉันทดสอบด้วยคอลัมน์วันที่เดียว (ตามที่คุณมี) และมันใช้ได้ดีสำหรับฉัน!
ฉันจะเพิ่ม VBA ใน MS Office ได้อย่างไร