hd su dung ham so ra chu

7
\Nếu dùng Excel để lập phiếu thu tiền cho khách hàng, bạn sẽ cần ghi số tiền bằng chữ. Để khỏi mất công ghi “bằng tay”, ta hãy tạo một hàm trong Excel “chuyên trị” việc này. Cách làm như sau: 1. Khởi động Excel, tạo một workbook mới (hoặc dùng Book1 như mặc định). Chọn Tools Macro Visual Basic Editor (Alt + F11) để mở cửa sổ soạn thảo VBA. Trong cửa sổ Project Explorer (nếu không thấy thì chọn View Project Explorer để mở nó), chọn VBAProject (Book1). Chọn Insert Module để thêm một module vào workbook. 2. coppy đoạn mã 1 phần dưới rồi paste vào module mới tạo. Đoạn mã 1 Function UnicodeChar(UniCharCode As String) As String On Error GoTo Loi Dim str Dim desStr As String Dim i If Mid(UniCharCode, 1, 1) = ";" Then UniCharCode = Mid(UniCharCode, 2) End If If Right(UniCharCode, 1) = ";" Then UniCharCode = Mid(UniCharCode, 1, Len(UniCharCode) - 1) End If str = UniCharCode str = Split(str, ";") For i = LBound(str) To UBound(str) desStr = desStr & ChrW$("&H" & str(i))

Upload: blacksuitboy

Post on 01-Dec-2014

55 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: HD Su Dung Ham So Ra Chu

\Nếu dùng Excel để lập phiếu thu tiền cho khách hàng, bạn sẽ cần ghi số tiền bằng chữ. Để khỏi mất công ghi “bằng tay”, ta hãy tạo một hàm trong Excel “chuyên trị” việc này. Cách làm như sau:

1. Khởi động Excel, tạo một workbook mới (hoặc dùng Book1 như mặc định). Chọn Tools Macro Visual Basic Editor (Alt + F11) để mở cửa sổ soạn thảo VBA. Trong cửa sổ Project Explorer (nếu không thấy thì chọn View Project Explorer để mở nó), chọn VBAProject (Book1). Chọn Insert Module để thêm một module vào workbook.

2. coppy đoạn mã 1 phần dưới rồi paste vào module mới tạo.

Đoạn mã 1

Function UnicodeChar(UniCharCode As String) As String

On Error GoTo Loi

Dim str

Dim desStr As String

Dim i

If Mid(UniCharCode, 1, 1) = ";" Then

UniCharCode = Mid(UniCharCode, 2)

End If

If Right(UniCharCode, 1) = ";" Then

UniCharCode = Mid(UniCharCode, 1, Len(UniCharCode) - 1)

End If

str = UniCharCode

str = Split(str, ";")

For i = LBound(str) To UBound(str)

desStr = desStr & ChrW$("&H" & str(i))

Next

UnicodeChar = desStr

Page 2: HD Su Dung Ham So Ra Chu

Loi:

Exit Function

End Function

Function SoRaChu(ByVal NumCurrency As Currency) As String

Static CharVND(9) As String, BangChu As String, i As Integer

Dim SoLe, SoDoi As Integer, PhanChan, Ten As String

Dim DonViTien As String, DonViLe As String

Dim NganTy As Integer, Ty As Integer, Trieu As Integer, Ngan As Integer

Dim Dong As Integer, Tram As Integer, Muoi As Integer, DonVi As Integer

DonViTien = ";111;1ED3;6E;67" ' ?o^`ng

DonViLe = ";78;75" ' xu

If NumCurrency = 0 Then

SoRaChu = UnicodeChar(";4B;68;F4;6E;67;20" & DonViTien)

Exit Function

End If

If NumCurrency > 922337203685477# Then ' So^' lo+'n nha^'t cu?a loa.i CURRENCY

SoRaChu = UnicodeChar(";4B;68;F4;6E;67;20;111;1ED5;69;20;111;1B0;1EE3;63;20;73" & _

";1ED1;20;6C;1EDB;6E;20;68;1A1;6E;20;39;32;32;2C;33;33;37" & _

";2C;32;30;33;2C;36;38;35;2C;34;37;37")

Exit Function

End If

CharVND(1) = ";6D;1ED9;74" ' mo^.t

CharVND(2) = ";68;61;69" ' hai

CharVND(3) = ";62;61" ' ba

CharVND(4) = ";62;1ED1;6E" ' bo^'n

Page 3: HD Su Dung Ham So Ra Chu

CharVND(5) = ";6E;103;6D" ' na(m

CharVND(6) = ";73;E1;75" ' su

CharVND(7) = ";62;1EA3;79" ' ba?y

CharVND(8) = ";74;E1;6D" ' tm

CharVND(9) = ";63;68;ED;6E" ' chn

SoLe = Int((NumCurrency - Int(NumCurrency)) * 100) ' 2 k so^'

PhanChan = Trim$(str$(Int(NumCurrency)))

PhanChan = Space(15 - Len(PhanChan)) + PhanChan

NganTy = Val(Left(PhanChan, 3))

Ty = Val(Mid$(PhanChan, 4, 3))

Trieu = Val(Mid$(PhanChan, 7, 3))

Ngan = Val(Mid$(PhanChan, 10, 3))

Dong = Val(Mid$(PhanChan, 13, 3))

If NganTy = 0 And Ty = 0 And Trieu = 0 And Ngan = 0 And Dong = 0 Then

BangChu = ";6B;68;F4;6E;67;20" + DonViTien + ";20"

i = 5

Else

BangChu = ""

i = 0

End If

'-----------------------------------------------------

' Ba('t ?a^`u ?o^?i

'-----------------------------------------------------

While i <= 5

Select Case i

Page 4: HD Su Dung Ham So Ra Chu

Case 0

SoDoi = NganTy

Ten = ";6E;67;E0;6E;20;74;1EF7" ' ngn ty?

Case 1

SoDoi = Ty

Ten = ";74;1EF7" ' ty?

Case 2

SoDoi = Trieu

Ten = ";74;72;69;1EC7;75" ' trie^.u

Case 3

SoDoi = Ngan

Ten = ";6E;67;E0;6E" ' ngn

Case 4

SoDoi = Dong

Ten = DonViTien ' ?o^`ng

Case 5

SoDoi = SoLe

Ten = DonViLe ' xu

End Select

If SoDoi <> 0 Then

Tram = Int(SoDoi / 100)

Muoi = Int((SoDoi - Tram * 100) / 10)

DonVi = (SoDoi - Tram * 100) - Muoi * 10

If Right(BangChu, 3) = ";20" Then

BangChu = Left(BangChu, Len(BangChu) - 3)

Page 5: HD Su Dung Ham So Ra Chu

End If

BangChu = BangChu + IIf(Len(BangChu) = 0, "", ";2C;20") + _

IIf(Tram <> 0, Trim(CharVND(Tram)) + ";20;74;72;103;6D;20", "")

If Muoi = 0 And Tram <> 0 And DonVi <> 0 Then

BangChu = BangChu + ";6C;1EBB;20"

Else

If Muoi <> 0 Then

BangChu = BangChu + IIf(Muoi <> 0 And Muoi <> 1, _

Trim(CharVND(Muoi)) + ";20;6D;1B0;1A1;69;20", ";6D;1B0;1EDD;69;20")

End If

End If

If Muoi <> 0 And DonVi = 5 Then

BangChu = BangChu + ";6C;103;6D;20" + Ten + ";20"

Else

If Muoi > 1 And DonVi = 1 Then

BangChu = BangChu + ";6D;1ED1;74;20" + Ten + ";20"

Else

BangChu = BangChu + IIf(DonVi <> 0, Trim(CharVND(DonVi)) + ";20" + Ten, Ten) + ";20"

End If

End If

Else

BangChu = BangChu + IIf(i = 4, DonViTien + "", "")

End If

i = i + 1

Wend

Page 6: HD Su Dung Ham So Ra Chu

If SoLe = 0 Then

BangChu = BangChu + IIf(Right(BangChu, 3) = ";20", "", ";20") + ";63;68;1EB5;6E"

End If

BangChu = UnicodeChar(BangChu)

'?o^?i sang tie^'ng Vie^.t Unicode

' ?o^?i chu+~ ci ?a^`u tin thnh chu+~ hoa

Mid$(BangChu, 1, 1) = UCase$(Mid$(BangChu, 1, 1))

SoRaChu = BangChu

End Function

Bạn để ý, hàm SoRaChu có phân biệt cách đọc số 1 (một hay mốt), 5 (năm hay lăm), mươi hay mười và chỉ đổi số có trị lớn nhất là 922,337, 203, 685, 477. Các chữ Việt có dấu trong đoạn mã 1 có mã Unicode.

3. Chuyển sang cửa sổ Excel để kiểm tra hàm bằng cách thử gõ vào ô bất kỳ, ví dụ: =SoRaChu(922337203,34). Nếu êm xuôi thì chuyển sang bước kế tiếp.