Bizga 12.26.2016 yoki 26/12/2016 (Buyuk Britaniya formati) sifatida taqdim etilgan elektron jadvallardagi sanalarni qanchalik tez-tez olamiz, faqat sana noto'g'ri yoki 26 oy yo'qligini aytish uchun? Ushbu maqola TRIM, LEFT, RIGHT va MID funksiyalaridan foydalangan holda VBA bilan sanalarni aniqlashni o'rganadi.
Maqolada o'quvchi dasturchi tasmasi ko'rsatilgan va VBA muharriri bilan tanish deb taxmin qilinadi. Agar yo'q bo'lsa, Google "Excel Developer Tab" yoki "Excel Code Window".
Ushbu mashqdagi xlsm ni yuklab olish mumkin Bu yerga.
Bizning muammomiz emas!
Muammoni hal qilish uchun eng yaxshi joy - manba. Biroq, hech qanday ishontirish ish haqi bo'limini bu holatda 12.26.1994 haqiqiy sana emasligiga ishontira olmaydi (agar ba'zi Sharqiy Evropa mamlakatlari uchun kompyuterning Boshqaruv panelida shunday tuzilgan bo'lsa).
Aslida, biz uni mashinada o'qib bo'lmasligini isbotlashimiz mumkin. Masalan, sanaga 7 kun qo'shish:
"=01.01.2017 + 7" = #VALUE. "=2017.01.01 + 7" = #VALUE.
holbuki…
"=2017-01-01 + 7" = 2017/01/08.
Faraz qilaylik, ular bu ularning muammosi emasligini aytishadi.
Sana formatlari
Biz aniqlashimiz kerak bo'lgan birinchi narsa bu sana AQSh yoki xalqaro formatdami.
Bizning misolimiz shuni ko'rsatadiki, biz AQShda foydalanishni ko'rib chiqamiz, ya'ni xalqaro formatdagi DMY emas.
Manbani o'rnatganimizdan so'ng, Excel xalqaro miqyosda yoki AQShda ularni tushunishi uchun ma'lumotlar formatlarini o'zgartirishimiz kerak.
Buning eng yaxshi usuli sanani yyyymmdd ga o'zgartirish, bu hech qanday malaka talab qilmaydigan formatdir.
jarayoni
Biz hujjatdagi har bir qatorni aylanib chiqamiz va manba mamlakatiga ko'ra sanani "to'g'rilash" funktsiyasini chaqiramiz. Sana tuzatilgandan so'ng, biz Xodimning yoshini hisoblaymiz.
Kodeks
Quyidagi kodni yangi modulga nusxalash:
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
Shaklingizga tugma qo'shing va uni Sub Main-ga tayinlang.
Ogohlantirish
Modulingizga juda ko'p murakkab kod qo'shishdan oldin, Excel katta ilovalarni ishlab chiqishda har doim ham barqaror emasligini va ko'pincha shikastlangan kodni o'zi tiklay olmasligini yodda tuting. Natijada sizning yagona nusxangiz buzilgan bo'lishi mumkin, chunki buzilish "Saqlash" da sodir bo'ladi.
Tez-tez zaxira nusxasini yarating va tuzatish uchun vositadan foydalaning Excel faylining buzilishi.
Muallif kirish:
Feliks Xuker ma'lumotlarni qayta tiklash bo'yicha mutaxassis DataNumenMa'lumotlarni qayta tiklash texnologiyalari bo'yicha jahon yetakchisi bo'lgan , Inc ta'mirlash rar fayl buzilishi va sql-ni tiklash dasturiy mahsulotlar. Qo'shimcha ma'lumot olish uchun tashrif buyuring www.datanumen.com
