Last active
June 27, 2024 05:54
-
-
Save touchiep/94e31d81c75c9e34ca5d6629c3dea513 to your computer and use it in GitHub Desktop.
[VBA][Excel] ThaiTime แปลงเวลาเป็นคำพูดบอกเวลาภาษาไทย
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Public Function ThaiTime(InTime, Optional TimeType As Integer = 1, Optional CType As Integer = 0) | |
'Version 4.0 | |
'แปลงเลขเวลาเป็นคำอ่าน | |
'TimeType รองรับได้ 6 แบบ | |
'1 ระบบ 24 ชั่วโมงแบบราชการ | |
'2 ระบบ 6 ชั่วโมงแบบ 2490 | |
'3 ระบบ 6 ชั่วโมงแบบสมียใหม่ 2535 | |
'4 ระบบ 24 ชั่วโมงแบบทหาร | |
'5 ระบบ 8 ยาม แบบอยุธยา 2076 | |
'6 ระบบ 8 ยาม แบบรัตนโกสินทร์ 2443 | |
'CType รองรับได้ 3 แบบ | |
'0 = อักษรไทย | |
'1 = อักษรโรมัน แบบราชบัณทิตยสถาน | |
'2 = อักษรโรมัน แบบแสดงตัวเน้นเสียง (Accent Tone Mark) | |
'Dependency | |
'ThaiNSound, ThNSound, ThaiNString, ThNString, U2W | |
'Version History | |
'1.0 รองรับการอ่านเวลาแบบ 1, 2, 3 | |
'2.0 รองรับการอ่านเวลาแบบ 4 | |
'3.0 รองรับการอ่านเวลาแบบ 5, 6 | |
'4.0 รองรับการแสดงผลแบบอักษรโรมัน ทั้งแบบราชบัณฑิตยสถานและแบบเน้นเสียง | |
Application.Volatile | |
Dim Th6h(23), Thm6h(23), tInput, ThH, ThM, ThS | |
Dim ThYm, ThNl, ThBt, ThNt, ThPn, ThPr, DSec, ThNv, ThDN | |
Select Case CType | |
Case 0 | |
'Classic | |
Th6h(0) = "เที่ยงคืน" | |
Th6h(1) = "ตีหนึ่ง" | |
Th6h(2) = "ตีสอง" | |
Th6h(3) = "ดีสาม" | |
Th6h(4) = "ตีสี่" | |
Th6h(5) = "ตีห้า" | |
Th6h(6) = "ย่ำรุ่ง" | |
Th6h(7) = "โมงเช้า" | |
Th6h(8) = "สองโมง" | |
Th6h(9) = "สามโมง" | |
Th6h(10) = "สี่โมง" | |
Th6h(11) = "ห้าโมง" | |
Th6h(12) = "เที่ยงวัน" | |
Th6h(13) = "บ่ายโมง" | |
Th6h(14) = "บ่ายสองโมง" | |
Th6h(15) = "บ่ายสามโมง" | |
Th6h(16) = "บ่ายสี่โมง" | |
Th6h(17) = "บ่ายห้าโมง" | |
Th6h(18) = "ย่ำค่ำ" | |
Th6h(19) = "ทุ่มหนึ่ง" | |
Th6h(20) = "สองทุ่ม" | |
Th6h(21) = "สามทุ่ม" | |
Th6h(22) = "สี่ทุ่ม" | |
Th6h(23) = "ห้าทุ่ม" | |
'Modern | |
Thm6h(0) = "เที่ยงคืน" | |
Thm6h(1) = "ตีหนึ่ง" | |
Thm6h(2) = "ตีสอง" | |
Thm6h(3) = "ตีสาม" | |
Thm6h(4) = "ตีสี่" | |
Thm6h(5) = "ตีห้า" | |
Thm6h(6) = "หกโมงเช้า" | |
Thm6h(7) = "เจ็ดโมง" | |
Thm6h(8) = "แปดโมง" | |
Thm6h(9) = "เก้าโมง" | |
Thm6h(10) = "สิบโมง" | |
Thm6h(11) = "สิบเอ็ดโมง" | |
Thm6h(12) = "เที่ยงวัน" | |
Thm6h(13) = "บ่ายโมง" | |
Thm6h(14) = "บ่ายสอง" | |
Thm6h(15) = "บ่ายสาม" | |
Thm6h(16) = "สี่โมงเย็น" | |
Thm6h(17) = "ห้าโมงเย็น" | |
Thm6h(18) = "หกโมงเย็น" | |
Thm6h(19) = "หนึ่งทุ่ม" | |
Thm6h(20) = "สองทุ่ม" | |
Thm6h(21) = "สามทุ่ม" | |
Thm6h(22) = "สี่ทุ่ม" | |
Thm6h(23) = "ห้าทุ่ม" | |
Case 1 | |
'Classic | |
Th6h(0) = "thiang khuen " | |
Th6h(1) = "ti nueng " | |
Th6h(2) = "ti song " | |
Th6h(3) = "ti sam " | |
Th6h(4) = "ti si " | |
Th6h(5) = "ti ha " | |
Th6h(6) = "yam rung " | |
Th6h(7) = "mong chao " | |
Th6h(8) = "song mong " | |
Th6h(9) = "sam mong " | |
Th6h(10) = "si mong " | |
Th6h(11) = "ha mong " | |
Th6h(12) = "thiang wan " | |
Th6h(13) = "bai mong " | |
Th6h(14) = "bai song mong " | |
Th6h(15) = "bai sam mong " | |
Th6h(16) = "bai si mong " | |
Th6h(17) = "bai ha mong " | |
Th6h(18) = "yam kham " | |
Th6h(19) = "thum nueng " | |
Th6h(20) = "song thum " | |
Th6h(21) = "sam thum " | |
Th6h(22) = "si thum " | |
Th6h(23) = "ha thum " | |
'Modern | |
Thm6h(0) = "thiang khuen " | |
Thm6h(1) = "ti nueng " | |
Thm6h(2) = "ti song " | |
Thm6h(3) = "ti sam " | |
Thm6h(4) = "ti si " | |
Thm6h(5) = "ti ha " | |
Thm6h(6) = "hok mong chao " | |
Thm6h(7) = "chet mong " | |
Thm6h(8) = "paet mong " | |
Thm6h(9) = "kao mong " | |
Thm6h(10) = "sip mong " | |
Thm6h(11) = "sip et mong " | |
Thm6h(12) = "thiang wan " | |
Thm6h(13) = "bai mong " | |
Thm6h(14) = "bai song " | |
Thm6h(15) = "bai sam " | |
Thm6h(16) = "si mong yen " | |
Thm6h(17) = "ha mong yen " | |
Thm6h(18) = "hok mong yen " | |
Thm6h(19) = "nueng thum " | |
Thm6h(20) = "song thum " | |
Thm6h(21) = "sam thum " | |
Thm6h(22) = "si thum " | |
Thm6h(23) = "ha thum " | |
Case 2 | |
'Classic | |
Th6h(0) = U2W("116 238 105 97 110 103 32 107 101 117 110 32") | |
Th6h(1) = U2W("100 116 101 101 32 110 232 117 110 103 32") | |
Th6h(2) = U2W("100 116 101 101 32 115 335 110 103 32") | |
Th6h(3) = U2W("100 116 101 101 32 115 259 97 109 32") | |
Th6h(4) = U2W("100 116 101 101 32 115 232 101 32") | |
Th6h(5) = U2W("100 116 101 101 32 104 226 97 32") | |
Th6h(6) = U2W("121 226 109 32 114 251 110 103 32") | |
Th6h(7) = U2W("109 111 104 110 103 32 99 104 225 111 32") | |
Th6h(8) = U2W("115 335 110 103 32 109 111 104 110 103 32") | |
Th6h(9) = U2W("115 259 97 109 32 109 111 104 110 103 32") | |
Th6h(10) = U2W("115 232 101 32 109 111 104 110 103 32") | |
Th6h(11) = U2W("104 226 97 32 109 111 104 110 103 32") | |
Th6h(12) = U2W("116 238 105 97 110 103 32 119 97 110 32") | |
Th6h(13) = U2W("98 224 97 105 32 109 111 104 110 103 32") | |
Th6h(14) = U2W("98 224 97 105 32 115 335 110 103 32 109 111 104 110 103 32") | |
Th6h(15) = U2W("98 224 97 105 32 115 259 97 109 32 109 111 104 110 103 32") | |
Th6h(16) = U2W("98 224 97 105 32 115 232 101 32 109 111 104 110 103 32") | |
Th6h(17) = U2W("98 224 97 105 32 104 226 97 32 109 111 104 110 103 32") | |
Th6h(18) = U2W("121 226 109 32 107 226 109 32") | |
Th6h(19) = U2W("116 251 109 32 110 232 117 110 103 32") | |
Th6h(20) = U2W("115 335 110 103 32 116 251 109 32") | |
Th6h(21) = U2W("115 259 97 109 32 116 251 109 32") | |
Th6h(22) = U2W("115 232 101 32 116 251 109 32") | |
Th6h(23) = U2W("104 226 97 32 116 251 109 32") | |
'Modern | |
Thm6h(0) = U2W("116 238 105 97 110 103 32 107 101 117 110 32") | |
Thm6h(1) = U2W("100 116 101 101 32 110 232 117 110 103 32") | |
Thm6h(2) = U2W("100 116 101 101 32 115 335 110 103 32") | |
Thm6h(3) = U2W("100 116 101 101 32 115 259 97 109 32") | |
Thm6h(4) = U2W("100 116 101 101 32 115 232 101 32") | |
Thm6h(5) = U2W("100 116 101 101 32 104 226 97 32") | |
Thm6h(6) = U2W("104 242 107 32 109 111 104 110 103 32 99 104 225 111 32") | |
Thm6h(7) = U2W("106 232 116 32 109 111 104 110 103 32") | |
Thm6h(8) = U2W("98 112 224 101 116 32 109 111 104 110 103 32") | |
Thm6h(9) = U2W("103 226 111 32 109 111 104 110 103 32") | |
Thm6h(10) = U2W("115 236 112 32 109 111 104 110 103 32") | |
Thm6h(11) = U2W("115 236 112 32 232 116 32 109 111 104 110 103 32") | |
Thm6h(12) = U2W("116 238 105 97 110 103 32 119 97 110 32") | |
Thm6h(13) = U2W("98 224 97 105 32 109 111 104 110 103 32") | |
Thm6h(14) = U2W("98 224 97 105 32 115 335 110 103 32") | |
Thm6h(15) = U2W("98 224 97 105 32 115 259 97 109 32") | |
Thm6h(16) = U2W("115 232 101 32 109 111 104 110 103 32 121 101 110 32") | |
Thm6h(17) = U2W("104 226 97 32 109 111 104 110 103 32 121 101 110 32") | |
Thm6h(18) = U2W("104 242 107 32 109 111 104 110 103 32 121 101 110 32") | |
Thm6h(19) = U2W("110 232 117 110 103 32 116 251 109 32") | |
Thm6h(20) = U2W("115 335 110 103 32 116 251 109 32") | |
Thm6h(21) = U2W("115 259 97 109 32 116 251 109 32") | |
Thm6h(22) = U2W("115 232 101 32 116 251 109 32") | |
Thm6h(23) = U2W("104 226 97 32 116 251 109 32") | |
End Select | |
Select Case VarType(InTime) | |
Case vbDate | |
'format as time | |
tInput = TimeValue(InTime) | |
ThH = hour(tInput) | |
ThM = Minute(tInput) | |
ThS = Second(tInput) | |
Case vbDecimal | |
'format as decimal | |
tInput = Int(InTime) | |
ThH = tInput | |
ThM = (InTime - tInput) * 100 | |
ThS = 0 | |
Case vbString | |
'format as text | |
If InStr(1, InTime, ":", vbTextCompare) >= 1 Then | |
tInput = TimeValue(InTime) | |
ThH = hour(tInput) | |
ThM = Minute(tInput) | |
ThS = Second(tInput) | |
ElseIf InStr(1, InTime, ".", vbTextCompare) >= 1 Then | |
tInput = TimeValue(Replace(InTime, ".", ":")) | |
ThH = hour(tInput) | |
ThM = Minute(tInput) | |
ThS = Second(tInput) | |
End If | |
Case vbDouble | |
'format as decimal | |
tInput = InTime | |
ThH = hour(tInput) | |
ThM = Minute(tInput) | |
ThS = Second(tInput) | |
Case Else | |
ThaiTime = "#ERR" | |
End Select | |
Select Case TimeType | |
Case 1 '24 ชม. ราชการ | |
Select Case CType | |
Case 0 | |
ThaiTime = ThaiNSound(ThH) & "นาฬิกา" | |
If ThM > 0 Then ThaiTime = ThaiTime & " " & ThaiNSound(ThM) & "นาที" | |
If ThS > 0 Then ThaiTime = ThaiTime & " " & ThaiNSound(ThS) & "วินาที" | |
Case 1 | |
ThaiTime = ThNSound(ThH, , , , False) & "nalika" | |
If ThM > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThM, , , , False) & "nathi" | |
If ThS > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThS, , , , False) & "winathi" | |
ThaiTime = LCase(ThaiTime) | |
Case 2 | |
ThaiTime = ThNSound(ThH) & U2W("110 97 97 45 108 237 45 103 97 97") | |
If ThM > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThM) & U2W("110 97 97 45 116 101 101") | |
If ThS > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThS) & U2W("119 237 45 110 97 97 45 116 101 101") | |
ThaiTime = LCase(ThaiTime) | |
End Select | |
Case 2 '6 ชม. 2490 | |
Select Case CType | |
Case 0 | |
Select Case ThM | |
Case Is = 0 | |
ThaiTime = Th6h(ThH) | |
Case Is = 30 | |
ThaiTime = Th6h(ThH) & "ครึ่ง" | |
If InStr(1, ThaiTime, "ย่ำรุ่ง", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "ย่ำรุ่ง", "ตีหก") | |
If InStr(1, ThaiTime, "ย่ำค่ำ", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "ย่ำค่ำ", "หกโมง") | |
Case Is <= 45 | |
ThaiTime = Th6h(ThH) & " " & ThaiNSound(ThM) & "นาที" | |
Case Is > 45 | |
ThaiTime = "อีก" & ThaiNSound(60 - ThM) & "นาที " & Th6h(ThH + 1) | |
End Select | |
Case 1 | |
Select Case ThM | |
Case Is = 0 | |
ThaiTime = Th6h(ThH) | |
Case Is = 30 | |
ThaiTime = Th6h(ThH) & " khrueng" | |
If InStr(1, ThaiTime, "yam rung", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "yam rung", "ti hok") | |
If InStr(1, ThaiTime, "yam kham", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "yam kham", "hok mong") | |
Case Is <= 45 | |
ThaiTime = Th6h(ThH) & ThNSound(ThM, , , , False) & "nathi" | |
Case Is > 45 | |
ThaiTime = "ik " & ThNSound(60 - ThM, , , , False) & "nathi " & Th6h(ThH + 1) | |
End Select | |
ThaiTime = LCase(ThaiTime) | |
Case 2 | |
Select Case ThM | |
Case Is = 0 | |
ThaiTime = Th6h(ThH) | |
Case Is = 30 | |
ThaiTime = Th6h(ThH) & U2W("32 107 114 234 117 110 103") | |
If InStr(1, ThaiTime, U2W("121 226 109 32 114 251 110 103"), vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, U2W("121 226 109 32 114 251 110 103"), U2W("100 116 101 101 32 104 242 107")) | |
If InStr(1, ThaiTime, U2W("121 226 109 32 107 226 109"), vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, U2W("121 226 109 32 107 226 109"), U2W("104 242 107 32 109 111 104 110 103")) | |
Case Is <= 45 | |
ThaiTime = Th6h(ThH) & ThNSound(ThM) & "naa-tee" | |
Case Is > 45 | |
ThaiTime = U2W("232 101 107 32") & ThNSound(60 - ThM) & "naa-tee " & Th6h(ThH + 1) | |
End Select | |
ThaiTime = LCase(ThaiTime) | |
End Select | |
Case 3 '6 ชม. สมัยใหม่ | |
Select Case CType | |
Case 0 | |
Select Case ThM | |
Case Is = 0 | |
ThaiTime = Thm6h(ThH) | |
Case Is = 30 | |
ThaiTime = Thm6h(ThH) & "ครึ่ง" | |
If InStr(1, ThaiTime, "เช้า", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "เช้า", "") | |
If InStr(1, ThaiTime, "เย็น", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "เย็น", "") | |
Case Is <= 45 | |
ThaiTime = Thm6h(ThH) & " " & ThaiNSound(ThM) & "นาที" | |
Case Is > 45 | |
ThaiTime = "อีก" & ThaiNSound(60 - ThM) & "นาที " & Thm6h(ThH + 1) | |
End Select | |
Case 1 | |
Select Case ThM | |
Case Is = 0 | |
ThaiTime = Thm6h(ThH) | |
Case Is = 30 | |
ThaiTime = Thm6h(ThH) & " khrueng" | |
If InStr(1, ThaiTime, "chao", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "chao", "") | |
If InStr(1, ThaiTime, "yen", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "yen", "") | |
Case Is <= 45 | |
ThaiTime = Thm6h(ThH) & ThNSound(ThM, , , , False) & "nathi" | |
Case Is > 45 | |
ThaiTime = "ik " & ThNSound(60 - ThM, , , , False) & "nathi " & Thm6h(ThH + 1) | |
End Select | |
ThaiTime = LCase(ThaiTime) | |
Case 2 | |
Select Case ThM | |
Case Is = 0 | |
ThaiTime = Thm6h(ThH) | |
Case Is = 30 | |
ThaiTime = Thm6h(ThH) & U2W("32 107 114 234 117 110 103") | |
If InStr(1, ThaiTime, U2W("99 104 225 111"), vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, U2W("99 104 225 111"), "") | |
If InStr(1, ThaiTime, "yen", vbTextCompare) > 0 Then ThaiTime = Replace(ThaiTime, "yen", "") | |
Case Is <= 45 | |
ThaiTime = Thm6h(ThH) & ThNSound(ThM) & "naa-tee" | |
Case Is > 45 | |
ThaiTime = U2W("232 101 107 32") & ThNSound(60 - ThM) & "naa-tee " & Thm6h(ThH + 1) | |
End Select | |
ThaiTime = LCase(ThaiTime) | |
End Select | |
Case 4 '24 ชม. แบบทหาร | |
Select Case CType | |
Case 0 | |
If ThH < 10 And ThM < 10 Then | |
ThaiTime = "ศูนย์" & ThaiNSound(ThH, True) & "ศูนย์" & ThaiNSound(ThM, True) | |
ElseIf ThH < 10 And ThM >= 10 Then | |
ThaiTime = "ศูนย์" & ThaiNSound(ThH, True) & ThaiNString(ThM, "1") | |
ElseIf ThH >= 10 And ThM < 10 Then | |
ThaiTime = ThaiNSound(ThH, True) & "ศูนย์" & ThaiNString(ThM) | |
Else | |
ThaiTime = ThaiNSound(ThH, True) & ThaiNString(ThM, "1") | |
End If | |
Case 1 | |
If ThH < 10 And ThM < 10 Then | |
ThaiTime = "sun " & ThNSound(ThH, True, , , False) & "sun " & ThNSound(ThM, True, , , False) | |
ElseIf ThH < 10 And ThM >= 10 Then | |
ThaiTime = "sun " & ThNSound(ThH, True, , , False) & ThNString(ThM, , , False) | |
ElseIf ThH >= 10 And ThM < 10 Then | |
ThaiTime = ThNSound(ThH, True, , , False) & "sun " & ThNString(ThM, , , False) | |
Else | |
ThaiTime = ThNSound(ThH, True, , , False) & ThNString(ThM, , , False) | |
End If | |
ThaiTime = LCase(ThaiTime) | |
Case 2 | |
If ThH < 10 And ThM < 10 Then | |
ThaiTime = U2W("115 335 111 110 32") & ThNSound(ThH, True) & U2W("115 335 111 110 32") & ThNSound(ThM, True) | |
ElseIf ThH < 10 And ThM >= 10 Then | |
ThaiTime = U2W("115 335 111 110 32") & ThNSound(ThH, True) & ThNString(ThM) | |
ElseIf ThH >= 10 And ThM < 10 Then | |
ThaiTime = ThNSound(ThH, True) & U2W("115 335 111 110 32") & ThNString(ThM) | |
Else | |
ThaiTime = ThNSound(ThH, True) & ThNString(ThM) | |
End If | |
ThaiTime = LCase(ThaiTime) | |
End Select | |
Case 5 '12 ชม. แบบอยุธยา | |
'Convert to second in a day | |
DSec = (ThH * 3600) + (ThM * 60) + ThS | |
'Convert to Yaam | |
If DSec < 21600 Then | |
DSec = DSec + 21600 | |
Else | |
If DSec < (43200 + 21600) Then | |
DSec = DSec - 21600 | |
Else | |
DSec = DSec - (43200 + 21600) | |
End If | |
End If | |
ThYm = Int(DSec / 10800) | |
ThNl = Int((((DSec / 10800) - ThYm) * 10800) / 3600) | |
ThBt = Int(((((((DSec / 10800) - ThYm) * 10800) / 3600) - ThNl) * 3600) / 360) | |
ThNt = Int((((((((((DSec / 10800) - ThYm) * 10800) / 3600) - ThNl) * 3600) / 360) - ThBt) * 360) / 90) | |
ThPn = Int(((((((((((((DSec / 10800) - ThYm) * 10800) / 3600) - ThNl) * 3600) / 360) - ThBt) * 360) / 90) - ThNt) * 90) / 6) | |
ThPr = Int(((((((((((((((DSec / 10800) - ThYm) * 10800) / 3600) - ThNl) * 3600) / 360) - ThBt) * 360) / 90) - ThNt) * 90) / 6) - ThPn) * 6) | |
ThNv = Int(DSec / 3600) | |
Select Case CType | |
Case 0 | |
Select Case ThH | |
Case Is = 0 | |
ThaiTime = "สองยาม" | |
Case Is = 1, 2, 4, 5, 19, 20, 22, 23 | |
ThaiTime = ThaiNSound(ThNv) & "ทุ่ม" | |
Case Is = 3 | |
ThaiTime = "สามยาม" | |
Case Is = 6 | |
ThaiTime = "ย่ำรุ่ง" | |
Case Is = 7, 8, 9, 10, 11 | |
ThaiTime = ThaiNSound(ThNv) & "นาฬิกา" | |
Case Is = 12 | |
ThaiTime = "ย่ำเที่ยง" | |
Case Is = 13, 14, 15, 16, 17 | |
ThaiTime = "ชายแล้ว" & ThaiNSound(ThNv - 6) & "นาฬิกา" | |
Case Is = 18 | |
ThaiTime = "ย่ำค่ำ" | |
Case Is = 21 | |
ThaiTime = "ยามหนึ่ง" | |
End Select | |
If ThBt > 0 Then ThaiTime = ThaiTime & " " & ThaiNSound(ThBt) & "บาท" | |
If ThNt > 0 Then ThaiTime = ThaiTime & " " & ThaiNSound(ThNt) & "นาฑี" | |
If ThPn > 0 Then ThaiTime = ThaiTime & " " & ThaiNSound(ThPn) & "เพ็ชรนาฑี" | |
If ThPr > 0 Then ThaiTime = ThaiTime & " " & ThaiNSound(ThPr) & "ปราณ" | |
Case 1 | |
Select Case ThH | |
Case Is = 0 | |
ThaiTime = "song yam" | |
Case Is = 1, 2, 4, 5, 19, 20, 22, 23 | |
ThaiTime = ThNSound(ThNv, , , , False) & "thum" | |
Case Is = 3 | |
ThaiTime = "sam yam" | |
Case Is = 6 | |
ThaiTime = "yam rung" | |
Case Is = 7, 8, 9, 10, 11 | |
ThaiTime = ThNSound(ThNv, , , , False) & "nalika" | |
Case Is = 12 | |
ThaiTime = "yam thiang" | |
Case Is = 13, 14, 15, 16, 17 | |
ThaiTime = "chai laeo " & ThNSound(ThNv - 6, , , , False) & "nalika" | |
Case Is = 18 | |
ThaiTime = "yam kham" | |
Case Is = 21 | |
ThaiTime = "yam nueng" | |
End Select | |
If ThBt > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThBt, , , , False) & "bat" | |
If ThNt > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThNt, , , , False) & "na thi" | |
If ThPn > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThPn, , , , False) & "phet na thi" | |
If ThPr > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThPr, , , , False) & "pran" | |
ThaiTime = LCase(ThaiTime) | |
Case 2 | |
Select Case ThH | |
Case Is = 0 | |
ThaiTime = U2W("115 335 110 103 32 121 97 97 109") | |
Case Is = 1, 2, 4, 5, 19, 20, 22, 23 | |
ThaiTime = ThNSound(ThNv) & U2W("116 251 109") | |
Case Is = 3 | |
ThaiTime = U2W("115 259 97 109 32 121 97 97 109") | |
Case Is = 6 | |
ThaiTime = U2W("121 226 109 32 114 251 110 103") | |
Case Is = 7, 8, 9, 10, 11 | |
ThaiTime = ThNSound(ThNv) & U2W("110 97 97 45 108 237 45 103 97 97") | |
Case Is = 12 | |
ThaiTime = U2W("121 226 109 32 116 238 105 97 110 103") | |
Case Is = 13, 14, 15, 16, 17 | |
ThaiTime = U2W("99 104 97 97 105 32 108 225 101 119 32") & ThNSound(ThNv - 6) & U2W("110 97 97 45 108 237 45 103 97 97") | |
Case Is = 18 | |
ThaiTime = U2W("121 226 109 32 107 226 109") | |
Case Is = 21 | |
ThaiTime = U2W("121 97 97 109 32 110 232 117 110 103") | |
End Select | |
If ThBt > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThBt) & U2W("98 224 97 116") | |
If ThNt > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThNt) & U2W("110 97 97 45 116 101 101") | |
If ThPn > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThPn) & U2W("112 233 116 32 110 97 97 45 116 101 101") | |
If ThPr > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThPr) & U2W("98 112 114 97 97 110") | |
ThaiTime = LCase(ThaiTime) | |
End Select | |
Case 6 '12 ชม.แบบรัตนโกสินทร์ พ.ศ. 2443 | |
'Convert to second in a day | |
DSec = (ThH * 3600) + (ThM * 60) + ThS | |
'Convert to Yaam | |
If DSec < 21600 Then | |
DSec = DSec + 21600 | |
Else | |
If DSec < (43200 + 21600) Then | |
DSec = DSec - 21600 | |
Else | |
DSec = DSec - (43200 + 21600) | |
End If | |
End If | |
ThNv = Int(DSec / 3600) | |
Select Case CType | |
Case 0 | |
Select Case ThH | |
Case Is = 0 | |
ThaiTime = "สองยาม" | |
Case Is = 1, 2, 4, 5, 20, 22, 23 | |
ThaiTime = ThaiNSound(ThNv) & "ทุ่ม" | |
Case Is = 3 | |
ThaiTime = "สามยาม" | |
Case Is = 6 | |
ThaiTime = "ย่ำรุ่ง" | |
Case Is = 7 | |
ThaiTime = "โมงเช้า" | |
Case Is = 8, 9, 10, 11 | |
ThaiTime = ThaiNSound(ThNv) & "โมงเช้า" | |
Case Is = 12 | |
ThaiTime = "ย่ำเที่ยง" | |
Case Is = 13 | |
ThaiTime = "บ่ายโมง" | |
Case Is = 14, 15, 16, 17 | |
ThaiTime = "บ่าย" & ThaiNSound(ThNv - 6) & "โมง" | |
Case Is = 18 | |
ThaiTime = "ย่ำค่ำ" | |
Case Is = 19 | |
ThaiTime = "ทุ่มหนึ่ง" | |
Case Is = 21 | |
ThaiTime = "หนึ่งยาม" | |
End Select | |
If ThM > 0 Then ThaiTime = ThaiTime & " " & ThaiNSound(ThM, True) & "นาที" | |
Case 1 | |
Select Case ThH | |
Case Is = 0 | |
ThaiTime = "song yam" | |
Case Is = 1, 2, 4, 5, 20, 22, 23 | |
ThaiTime = ThNSound(ThNv, , , , False) & "thum" | |
Case Is = 3 | |
ThaiTime = "sam yam" | |
Case Is = 6 | |
ThaiTime = "yam-rung" | |
Case Is = 7 | |
ThaiTime = "mong chao" | |
Case Is = 8, 9, 10, 11 | |
ThaiTime = ThNSound(ThNv, , , , False) & "mong chao" | |
Case Is = 12 | |
ThaiTime = "yam-thiang" | |
Case Is = 13 | |
ThaiTime = "bai mong" | |
Case Is = 14, 15, 16, 17 | |
ThaiTime = "bai " & ThNSound(ThNv - 6, , , , False) & "mong" | |
Case Is = 18 | |
ThaiTime = "yam-kham" | |
Case Is = 19 | |
ThaiTime = "thum nueng" | |
Case Is = 21 | |
ThaiTime = "nueng yam" | |
End Select | |
If ThM > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThM, True, , , False) & "na-thi" | |
ThaiTime = LCase(ThaiTime) | |
Case 2 | |
Select Case ThH | |
Case Is = 0 | |
ThaiTime = U2W("115 335 110 103 32 121 97 97 109") | |
Case Is = 1, 2, 4, 5, 20, 22, 23 | |
ThaiTime = ThNSound(ThNv) & U2W("116 251 109") | |
Case Is = 3 | |
ThaiTime = U2W("115 259 97 109 32 121 97 97 109") | |
Case Is = 6 | |
ThaiTime = U2W("121 226 109 32 114 251 110 103") | |
Case Is = 7 | |
ThaiTime = U2W("109 111 104 110 103 32 99 104 225 111") | |
Case Is = 8, 9, 10, 11 | |
ThaiTime = ThNSound(ThNv) & U2W("109 111 104 110 103 32 99 104 225 111") | |
Case Is = 12 | |
ThaiTime = U2W("121 226 109 32 116 238 105 97 110 103") | |
Case Is = 13 | |
ThaiTime = U2W("98 224 97 105 32 109 111 104 110 103") | |
Case Is = 14, 15, 16, 17 | |
ThaiTime = U2W("98 224 97 105 32") & ThNSound(ThNv - 6) & U2W("109 111 104 110 103") | |
Case Is = 18 | |
ThaiTime = U2W("121 226 109 32 107 226 109") | |
Case Is = 19 | |
ThaiTime = U2W("116 251 109 32 110 232 117 110 103") | |
Case Is = 21 | |
ThaiTime = U2W("110 232 117 110 103 32 121 97 97 109") | |
End Select | |
If ThM > 0 Then ThaiTime = ThaiTime & " " & ThNSound(ThM, True) & U2W("110 97 97 45 116 101 101") | |
ThaiTime = LCase(ThaiTime) | |
End Select | |
Case Else | |
ThaiTime = "#N/A" | |
End Select | |
End Function | |
'dependency | |
Function ThaiNSound(ByVal sNum, Optional NavyFormat As Boolean = False, Optional sFormat As String = "", Optional NewForm As Boolean = False) | |
'Thai Number Sound 2.4 [004] | |
'by Pongsathorn Sraouthai | |
'for use with integer number only, if it was decimal, it will displaying as integer. | |
'NavyFormat = True: Use "หนึ่ง" as "เอ็ด" Default is False | |
'sFormat: If use any text, it will use as separator between place | |
'NewForm = True: use "เอ็ด" as "หนึ่ง" only in ten place. Default is False | |
Dim AllChar As String | |
Dim NumChar As String | |
Dim ColChar As String | |
Dim ColNum As Long | |
Dim N | |
Dim nPos As Long | |
Dim nStr As String, nDec As String | |
ColNum = 0 | |
'Check if decimal number | |
nPos = InStr(1, sNum, ".", vbTextCompare) | |
If nPos >= 2 Then | |
nStr = Mid(sNum, 1, nPos - 1) | |
sNum = nStr | |
End If | |
If Len(sNum) > 15 Then Exit Function | |
For N = Len(sNum) To 1 Step -1 | |
ColNum = ColNum + 1 | |
Select Case Mid(sNum, N, 1) | |
Case Is = "0" | |
If val(sNum) = 0 Or sNum = "" Then | |
NumChar = U2W("3624 3641 3609 3618 3660") '"ศูนย์" | |
Else | |
NumChar = Empty | |
End If | |
Case Is = "1" | |
Select Case NewForm | |
Case False | |
If Len(sNum) >= ColNum And ColNum = 14 Or ColNum = 8 Or ColNum = 2 Then | |
NumChar = Empty | |
ElseIf ColNum = 13 Or ColNum = 7 Or ColNum = 1 Then | |
If NavyFormat = True Then | |
NumChar = U2W("3627 3609 3638 3656 3591") '"หนึ่ง" '2.51 | |
Else | |
If Len(sNum) > ColNum And val(sNum) > 10 Then | |
NumChar = U2W("3648 3629 3655 3604") '"เอ็ด" '2.51 | |
Else | |
NumChar = U2W("3627 3609 3638 3656 3591") '"หนึ่ง" | |
End If | |
End If | |
Else | |
NumChar = U2W("3627 3609 3638 3656 3591") '"หนึ่ง" | |
End If | |
Case True | |
If Len(sNum) >= ColNum And ColNum = 14 Or ColNum = 8 Or ColNum = 2 Then | |
NumChar = Empty | |
ElseIf Len(sNum) > ColNum And ColNum = 13 Or ColNum = 7 Or ColNum = 1 Then | |
If NavyFormat = False Then | |
If val(sNum) > 100 And Left(Right(sNum, 2), 1) = "0" Or val(sNum) > 100000000 And Left(Right(sNum, 9), 1) = "0" Or val(sNum) > 100000000000000# And Left(Right(sNum, 13), 1) = "0" Then | |
NumChar = U2W("3627 3609 3638 3656 3591") '"หนึ่ง" | |
Else | |
NumChar = U2W("3648 3629 3655 3604") '"เอ็ด" '2.51 | |
End If | |
Else | |
NumChar = U2W("3627 3609 3638 3656 3591") '"หนึ่ง" '2.51 | |
End If | |
Else | |
NumChar = U2W("3627 3609 3638 3656 3591") '"หนึ่ง" | |
End If | |
End Select | |
Case Is = "2" | |
If ColNum = 14 And Len(sNum) >= 14 Or ColNum = 8 And Len(sNum) >= 8 Or ColNum = 2 And Len(sNum) >= 2 Then | |
NumChar = U2W("3618 3637 3656") '"ยี่" '2.5 | |
Else | |
NumChar = U2W("3626 3629 3591") '"สอง" '2.5 | |
End If | |
Case Is = "3" | |
NumChar = U2W("3626 3634 3617") '"สาม" | |
Case Is = "4" | |
NumChar = U2W("3626 3637 3656") '"สี่" | |
Case Is = "5" | |
NumChar = U2W("3627 3657 3634") '"ห้า" | |
Case Is = "6" | |
NumChar = U2W("3627 3585") '"หก" | |
Case Is = "7" | |
NumChar = U2W("3648 3592 3655 3604") '"เจ็ด" | |
Case Is = "8" | |
NumChar = U2W("3649 3611 3604") '"แปด" | |
Case Is = "9" | |
NumChar = U2W("3648 3585 3657 3634") '"เก้า" | |
End Select | |
'case 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 | |
' ร้อย สิบ ล้าน แสน หมื่น พัน ร้อย สิบ ล้าน แสน หมื่น พัน ร้อย สิบ หน่วย | |
Select Case ColNum | |
Case Is = 1 | |
ColChar = Empty | |
Case Is = 2, 8, 14 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = U2W("3626 3636 3610") '"สิบ" | |
End If | |
Case Is = 3, 9, 15 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = U2W("3619 3657 3629 3618") '"ร้อย" | |
End If | |
Case Is = 4, 10 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
ElseIf sFormat <> "" Then | |
ColChar = U2W("3614 3633 3609") & sFormat | |
Else | |
ColChar = U2W("3614 3633 3609") '"พัน" | |
End If | |
Case Is = 5, 11 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = U2W("3627 3617 3639 3656 3609") '"หมื่น" | |
End If | |
Case Is = 6, 12 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = U2W("3649 3626 3609") '"แสน" | |
End If | |
Case Is = 7, 13 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
ElseIf sFormat <> "" Then | |
ColChar = U2W("3621 3657 3634 3609") & sFormat | |
Else | |
ColChar = U2W("3621 3657 3634 3609") '"ล้าน" | |
End If | |
If Len(sNum) > 7 Then ColChar = U2W("3621 3657 3634 3609") '"ล้าน" | |
If Len(sNum) > 7 And sFormat <> "" Then ColChar = U2W("3621 3657 3634 3609") & sFormat | |
End Select | |
AllChar = NumChar & ColChar & AllChar | |
Next N | |
ThaiNSound = AllChar | |
End Function | |
Function ThaiNString(ByVal sNum, Optional sFormat As String = "0", Optional tFormat As Boolean = False) | |
'Thai Number String 2.3 [005] | |
'by Pongsathorn Sraouthai | |
'for use with integer number only, if it was decimal, it will displaying as integer | |
'sFormat | |
'0 = with separated space | |
'1 = no separated space | |
'any = use that as separator | |
'tFormat | |
'True = use โท as สอง | |
'False = not use (Default) | |
Dim AllChar As String | |
Dim NumChar As String | |
Dim N | |
Dim nPos, nStr, nDec | |
'Check if decimal number | |
nPos = InStr(1, sNum, ".", vbTextCompare) | |
If nPos >= 2 Then | |
nStr = Mid(sNum, 1, nPos - 1) | |
nDec = Mid(sNum, nPos + 1, Len(sNum) - nPos) | |
sNum = nStr | |
End If | |
For N = Len(sNum) To 1 Step -1 | |
Select Case Mid(sNum, N, 1) | |
Case Is = "0" | |
NumChar = "ศูนย์" | |
Case Is = "1" | |
NumChar = "หนึ่ง" | |
Case Is = "2" | |
If tFormat = True Then | |
NumChar = "โท" '2.5 | |
Else | |
NumChar = "สอง" '2.5 | |
End If | |
Case Is = "3" | |
NumChar = "สาม" | |
Case Is = "4" | |
NumChar = "สี่" | |
Case Is = "5" | |
NumChar = "ห้า" | |
Case Is = "6" | |
NumChar = "หก" | |
Case Is = "7" | |
NumChar = "เจ็ด" | |
Case Is = "8" | |
NumChar = "แปด" | |
Case Is = "9" | |
NumChar = "เก้า" | |
End Select | |
Select Case sFormat | |
Case "0" | |
If Len(sNum) = 1 Then | |
AllChar = NumChar | |
Else | |
AllChar = NumChar & " " & AllChar | |
End If | |
Case "1" | |
If Len(sNum) = 1 Then | |
AllChar = NumChar | |
Else | |
AllChar = NumChar & AllChar | |
End If | |
Case Else | |
If Len(sNum) = 1 Then | |
AllChar = NumChar | |
Else | |
AllChar = NumChar & sFormat & AllChar | |
End If | |
End Select | |
Next N | |
If Len(sNum) > 1 And sFormat = "0" Then | |
AllChar = Mid(AllChar, 1, Len(AllChar) - 1) | |
End If | |
Select Case sFormat | |
Case "0" | |
ThaiNString = AllChar | |
Case "1" | |
ThaiNString = AllChar | |
Case "" | |
ThaiNString = AllChar | |
Case Else | |
If sNum <> "" And sNum <> "0" Then | |
ThaiNString = Left(AllChar, Len(AllChar) - 1) | |
ElseIf sNum = "0" Then '2.51 | |
ThaiNString = "ศูนย์" '2.51 | |
Else | |
ThaiNString = "" | |
End If | |
End Select | |
End Function | |
Function ThNSound(ByVal sNum, Optional NavyFormat As Boolean = False, Optional sFormat As String = "", Optional NewForm As Boolean = False, Optional AccentMode As Boolean = True) | |
'Thai Number Sound 2.4 Romanized | |
'by Pongsathorn Sraouthai | |
'for use with integer number only, if it was decimal, it will displaying as integer. | |
'NavyFormat = True: Use "หนึ่ง" as "เอ็ด" Default is False | |
'sFormat: If use any text, it will use as separator between place | |
'NewForm = True: use "เอ็ด" as "หนึ่ง" only in ten place. Default is False | |
'AccentMode = True: use accent symbol False: No accent symbol | |
Dim AllChar As String | |
Dim NumChar As String | |
Dim ColChar As String | |
Dim ColNum As Long | |
Dim N | |
Dim nPos As Long | |
Dim nStr As String, nDec As String | |
Dim Acc(0 To 20) | |
Select Case AccentMode | |
Case True | |
Acc(0) = U2W("115 335 111 110 32") | |
Acc(1) = U2W("78 232 117 110 103 32") | |
Acc(2) = U2W("83 335 110 103 32") | |
Acc(3) = U2W("83 259 97 109 32") | |
Acc(4) = U2W("83 232 101 32") | |
Acc(5) = U2W("72 226 97 32") | |
Acc(6) = U2W("72 242 107 32") | |
Acc(7) = U2W("74 232 116 32") | |
Acc(8) = U2W("66 112 224 101 116 32") | |
Acc(9) = U2W("71 226 111 32") | |
Acc(10) = U2W("83 236 112 32") | |
Acc(11) = U2W("200 116 32") | |
Acc(12) = U2W("89 234 101 32") | |
Acc(13) = U2W("82 243 105 32") | |
Acc(14) = U2W("80 97 110 32") | |
Acc(15) = U2W("77 232 117 110 32") | |
Acc(16) = U2W("83 259 101 110 32") | |
Acc(17) = U2W("76 225 97 110 32") | |
Case False | |
'sun nueng song sam si ha hok chet paet kao sip | |
'et yi roi phan muen saen lan | |
Acc(0) = "Sun " | |
Acc(1) = "Nueng " | |
Acc(2) = "Song " | |
Acc(3) = "Sam " | |
Acc(4) = "Si " | |
Acc(5) = "Ha " | |
Acc(6) = "Hok " | |
Acc(7) = "Chet " | |
Acc(8) = "Paet " | |
Acc(9) = "Kao " | |
Acc(10) = "Sip " | |
Acc(11) = "Et " | |
Acc(12) = "Yi " | |
Acc(13) = "Roi " | |
Acc(14) = "Phan " | |
Acc(15) = "Muen " | |
Acc(16) = "Saen " | |
Acc(17) = "Lan " | |
End Select | |
ColNum = 0 | |
'Check if decimal number | |
nPos = InStr(1, sNum, ".", vbTextCompare) | |
If nPos >= 2 Then | |
nStr = Mid(sNum, 1, nPos - 1) | |
sNum = nStr | |
End If | |
If Len(sNum) > 15 Then Exit Function | |
For N = Len(sNum) To 1 Step -1 | |
ColNum = ColNum + 1 | |
Select Case Mid(sNum, N, 1) | |
Case Is = "0" | |
If val(sNum) = 0 Or sNum = "" Then | |
NumChar = Acc(0) | |
Else | |
NumChar = Empty | |
End If | |
Case Is = "1" | |
Select Case NewForm | |
Case False | |
If ColNum = 14 Or ColNum = 8 Or ColNum = 2 And Len(sNum) >= ColNum Then | |
NumChar = Empty | |
ElseIf ColNum = 13 Or ColNum = 7 Or ColNum = 1 Then | |
If NavyFormat = True Then | |
NumChar = Acc(1) '2.51 | |
Else | |
If Len(sNum) > ColNum Then | |
NumChar = Acc(11) '2.51 | |
Else | |
NumChar = Acc(1) | |
End If | |
End If | |
Else | |
NumChar = Acc(1) | |
End If | |
Case True | |
If ColNum = 14 Or ColNum = 8 Or ColNum = 2 And Len(sNum) >= ColNum Then | |
NumChar = Empty | |
ElseIf ColNum = 13 Or ColNum = 7 Or ColNum = 1 And Len(sNum) > ColNum Then | |
If NavyFormat = False Then | |
If val(sNum) > 100 And Left(Right(sNum, 2), 1) = "0" Or val(sNum) > 100000000 And Left(Right(sNum, 9), 1) = "0" Or val(sNum) > 100000000000000# And Left(Right(sNum, 13), 1) = "0" Then | |
NumChar = Acc(1) | |
Else | |
NumChar = Acc(11) '2.51 | |
End If | |
Else | |
NumChar = Acc(1) '2.51 | |
End If | |
Else | |
NumChar = Acc(1) | |
End If | |
End Select | |
Case Is = "2" | |
If ColNum = 14 And Len(sNum) >= 14 Or ColNum = 8 And Len(sNum) >= 8 Or ColNum = 2 And Len(sNum) >= 2 Then | |
NumChar = Acc(12) '"ยี่" '2.5 | |
Else | |
NumChar = Acc(2) '"สอง" '2.5 | |
End If | |
Case Is = "3" | |
NumChar = Acc(3) '"สาม" | |
Case Is = "4" | |
NumChar = Acc(4) '"สี่" | |
Case Is = "5" | |
NumChar = Acc(5) '"ห้า" | |
Case Is = "6" | |
NumChar = Acc(6) '"หก" | |
Case Is = "7" | |
NumChar = Acc(7) '"เจ็ด" | |
Case Is = "8" | |
NumChar = Acc(8) '"แปด" | |
Case Is = "9" | |
NumChar = Acc(9) '"เก้า" | |
End Select | |
'case 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 | |
' ร้อย สิบ ล้าน แสน หมื่น พัน ร้อย สิบ ล้าน แสน หมื่น พัน ร้อย สิบ หน่วย | |
Select Case ColNum | |
Case Is = 1 | |
ColChar = Empty | |
Case Is = 2, 8, 14 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = Acc(10) '"สิบ" | |
End If | |
Case Is = 3, 9, 15 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = Acc(13) '"ร้อย" | |
End If | |
Case Is = 4, 10 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
ElseIf sFormat <> "" Then | |
ColChar = Acc(14) '"พัน" & sFormat | |
Else | |
ColChar = Acc(14) '"พัน" | |
End If | |
Case Is = 5, 11 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = Acc(15) ' "หมื่น" | |
End If | |
Case Is = 6, 12 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
Else | |
ColChar = Acc(16) '"แสน" | |
End If | |
Case Is = 7, 13 | |
If Mid(sNum, N, 1) = "0" Then | |
ColChar = Empty | |
ElseIf sFormat <> "" Then | |
ColChar = Acc(17) '"ล้าน" & sFormat | |
Else | |
ColChar = Acc(17) '"ล้าน" | |
End If | |
If Len(sNum) > 7 Then ColChar = Acc(17) '"ล้าน" | |
If Len(sNum) > 7 And sFormat <> "" Then ColChar = Acc(17) & sFormat | |
End Select | |
AllChar = NumChar & ColChar & AllChar | |
Next N | |
ThNSound = AllChar | |
End Function | |
Function ThNString(ByVal sNum, Optional sFormat As String = "0", Optional tFormat As Boolean = False, Optional AccentMode As Boolean = True) | |
'Thai Number String 2.4 [005] | |
'by Pongsathorn Sraouthai | |
'for use with integer number only, if it was decimal, it will displaying as integer | |
'sFormat | |
'0 = with separated space | |
'1 = no separated space | |
'any = use that as separator | |
'tFormat | |
'True = use โท as สอง | |
'False = not use (Default) | |
'AccentMode | |
'True = use accent symbol | |
'False = No accent symbol | |
Dim AllChar As String | |
Dim NumChar As String | |
Dim N, Nt(10) | |
Dim nPos, nStr, nDec | |
'Check if decimal number | |
nPos = InStr(1, sNum, ".", vbTextCompare) | |
If nPos >= 2 Then | |
nStr = Mid(sNum, 1, nPos - 1) | |
nDec = Mid(sNum, nPos + 1, Len(sNum) - nPos) | |
sNum = nStr | |
End If | |
Select Case AccentMode | |
Case vbTrue | |
Nt(0) = U2W("115 335 111 110") | |
Nt(1) = U2W("110 232 117 110 103") | |
Nt(2) = U2W("115 335 110 103") | |
Nt(3) = U2W("115 259 97 109") | |
Nt(4) = U2W("115 232 101") | |
Nt(5) = U2W("104 226 97") | |
Nt(6) = U2W("104 242 107") | |
Nt(7) = U2W("106 232 116") | |
Nt(8) = U2W("98 112 224 101 116") | |
Nt(9) = U2W("103 226 111") | |
Nt(10) = U2W("116 111 104") | |
Case vbFalse | |
Nt(0) = "sun" | |
Nt(1) = "nueng" | |
Nt(2) = "song" | |
Nt(3) = "sam" | |
Nt(4) = "si" | |
Nt(5) = "ha" | |
Nt(6) = "hok" | |
Nt(7) = "chet" | |
Nt(8) = "paet" | |
Nt(9) = "kao" | |
Nt(10) = "tho" | |
End Select | |
For N = Len(sNum) To 1 Step -1 | |
Select Case Mid(sNum, N, 1) | |
Case Is = "0" | |
NumChar = Nt(0) | |
Case Is = "1" | |
NumChar = Nt(1) | |
Case Is = "2" | |
If tFormat = True Then | |
NumChar = Nt(10) '2.5 | |
Else | |
NumChar = Nt(2) '2.5 | |
End If | |
Case Is = "3" | |
NumChar = Nt(3) | |
Case Is = "4" | |
NumChar = Nt(4) | |
Case Is = "5" | |
NumChar = Nt(5) | |
Case Is = "6" | |
NumChar = Nt(6) | |
Case Is = "7" | |
NumChar = Nt(7) | |
Case Is = "8" | |
NumChar = Nt(8) | |
Case Is = "9" | |
NumChar = Nt(9) | |
End Select | |
Select Case sFormat | |
Case "0" | |
If Len(sNum) = 1 Then | |
AllChar = NumChar | |
Else | |
AllChar = NumChar & " " & AllChar | |
End If | |
Case "1" | |
If Len(sNum) = 1 Then | |
AllChar = NumChar | |
Else | |
AllChar = NumChar & AllChar | |
End If | |
Case Else | |
If Len(sNum) = 1 Then | |
AllChar = NumChar | |
Else | |
AllChar = NumChar & sFormat & AllChar | |
End If | |
End Select | |
Next N | |
If Len(sNum) > 1 And sFormat = "0" Then | |
AllChar = Mid(AllChar, 1, Len(AllChar) - 1) | |
End If | |
Select Case sFormat | |
Case "0" | |
ThNString = AllChar | |
Case "1" | |
ThNString = AllChar | |
Case "" | |
ThNString = AllChar | |
Case Else | |
If sNum <> "" And sNum <> "0" Then | |
ThNString = Left(AllChar, Len(AllChar) - 1) | |
ElseIf sNum = "0" Then '2.51 | |
ThNString = Nt(0) '2.51 | |
Else | |
ThNString = "" | |
End If | |
End Select | |
End Function | |
Function U2W(iCode, Optional AddSpace As Boolean = False) As String | |
'Convert Unicode number to text [018] | |
Dim N, AllChar, str, ns() | |
str = Split(iCode, " ") | |
ReDim ns(UBound(str)) | |
For N = UBound(str) To 0 Step -1 | |
If IsNumeric(str(N)) Then | |
ns(N) = CLng(str(N)) | |
Select Case AddSpace | |
Case True | |
AllChar = ChrW(ns(N)) & " " & AllChar | |
Case False | |
AllChar = ChrW(ns(N)) & AllChar | |
End Select | |
End If | |
Next | |
U2W = AllChar | |
End Function |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment