บ่อยแค่ไหนที่เราได้รับวันที่ในสเปรดชีตที่ส่งมาให้เราเป็นวันที่ 12.26.2016 หรือ 26/12/2016 (รูปแบบสหราชอาณาจักร) เท่านั้นที่จะบอกว่าวันที่นั้นไม่ถูกต้องหรือไม่มีวันที่ 26 ของเดือน บทความนี้จะสำรวจการกำหนดวันที่ด้วย VBA โดยใช้ฟังก์ชัน TRIM, ซ้าย, ขวา และ MID
บทความนี้ถือว่าผู้อ่านมี Ribbon ของนักพัฒนาที่แสดงอยู่และคุ้นเคยกับ VBA Editor มิฉะนั้นโปรดใช้“ แท็บนักพัฒนา Excel” ของ Google หรือ“ หน้าต่างรหัส Excel”
xlsm ในแบบฝึกหัดนี้สามารถดาวน์โหลดได้ Good Farm Animal Welfare Awards.
ไม่ใช่ปัญหาของเรา!

ในความเป็นจริงเราสามารถพิสูจน์ได้ว่าไม่สามารถอ่านด้วยเครื่องได้ ตัวอย่างเช่น เพิ่ม 7 วันในวันที่:
"=01.01.2017 + 7" = #VALUE. "=2017.01.01 + 7" = #VALUE.
ในทางตรงกันข้าม…
"=2017-01-01 + 7" = 2017/01/08.
ให้เราถือว่าพวกเขาแนะนำว่าไม่ใช่ปัญหาของพวกเขา
รูปแบบวันที่
สิ่งแรกที่เราต้องแน่ใจคือวันที่อยู่ในรูปแบบสหรัฐอเมริกาหรือสากล
ตัวอย่างของเราทำให้ชัดเจนว่าเรากำลังดูการใช้งานในสหรัฐอเมริกา เช่น MDY แทนที่จะเป็นรูปแบบสากล DMY
เมื่อเราสร้างแหล่งข้อมูลแล้ว เราจำเป็นต้องเปลี่ยนรูปแบบข้อมูลเพื่อให้ Excel สามารถเข้าใจได้ ไม่ว่าจะเป็นในต่างประเทศหรือในสหรัฐอเมริกา
วิธีที่ดีที่สุดในการดำเนินการนี้คือเปลี่ยนวันที่เป็น yyyymmdd ซึ่งเป็นรูปแบบที่ไม่ต้องระบุคุณสมบัติ
กระบวนการ
เราจะหมุนเวียนแต่ละแถวในเอกสาร เรียกใช้ฟังก์ชันเพื่อ "แก้ไข" วันที่ตามประเทศต้นทาง เมื่อแก้ไขวันที่แล้ว เราจะคำนวณอายุของพนักงาน
รหัส
คัดลอกรหัสต่อไปนี้ลงในโมดูลใหม่:
Option Explicit
Sub Main()
Dim strNewFormat As String
Dim strDate As String
Sheets("Main").Range("B4").Select
'Cycle through the sheet rows, using IDNumber as an anchor
'to prevent a premature halt caused by a blank date of birth
Do While ActiveCell > ""
If ActiveCell.Offset(0, 2) > "" Then
strDate = ActiveCell.Offset(0, 2)
'Remove leading or trailing spaces
strDate = Trim(strDate)
'Call the function
strNewFormat = ReformatDate(strDate, "USA")
'Write the result from the function ReformatDate to a new column
ActiveCell.Offset(0, 3) = strNewFormat
'Determine age by subtracting the previous column from today's date
ActiveCell.Offset(0, 4) = "=(NOW()-RC[-1])/365.25"
'Convert to intger, thus lopping off decimal places
ActiveCell.Offset(0, 4) = Int(ActiveCell.Offset(0, 4))
End If
Range("B" & ActiveCell.Row + 1).Select
Loop
End Sub
Function ReformatDate(sDate As String, sSource As String)
Dim yyyy, mm, dd As String
yyyy = Right(sDate, 4)
If sSource = "USA" Then
mm = Left(sDate, 2)
dd = Mid(sDate, 4, 2)
Else
mm = Mid(sDate, 4, 2)
dd = Left(sDate, 2)
End If
ReformatDate = yyyy & "-" & mm & "-" & dd
End Function
เพิ่มปุ่มในแบบฟอร์มของคุณ และกำหนดให้กับ Sub Main
ข้อแม้
ก่อนที่จะเพิ่มโค้ดที่ซับซ้อนมากเกินไปลงในโมดูลของคุณ โปรดทราบว่า Excel นั้นไม่เสถียรเสมอไปในการพัฒนาแอปพลิเคชันหลักๆ และมักจะไม่สามารถกู้คืนโค้ดที่เสียหายได้ ผลลัพธ์อาจเป็นความเสียหายของสำเนาเดียวของคุณเนื่องจากความเสียหายเกิดขึ้นใน "บันทึก"
สำรองข้อมูลบ่อยครั้งและใช้เครื่องมือเพื่อแก้ไข ไฟล์ Excel เสียหาย.
บทนำผู้เขียน:
Felix Hooker เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ ซ่อมแซม rar ไฟล์เสียหาย และผลิตภัณฑ์ซอฟต์แวร์กู้คืน sql ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.
