XLL Add-In Đổi số thành chữ - Tốc độ nhanh tối đa, nhanh hơn 80% các Addins khác

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
4,209
Được thích
9,711
Điểm
860
Nơi ở
Hà Nội
XLL Add-In Đọc số thành chữ - Tốc độ nhanh tối đa, nhanh hơn 80% các Add-ins khác

Excel XLL Add-In Accounting Helper (AccHelper.xll)



(*) Excel Add-In XLL Accounting Helper (AccHelper.xll) được lập trình bằng ngôn ngữ Delphi, đảm bảo tốc độ tính toán nhanh tối đa, tiết kiệm tài nguyên máy, bản thân Add-In được biên dịch ra mã máy (DLL) nên không bị các phần mềm diệt virus như BKAV làm hỏng.

(*) Chức năng của Accounting Helper:
+ Cung cấp các hàm đọc số thành chữ bằng tiếng Anh, Việt bởi các loại font chữ TCVN3 (ABC), VNI, UNICODE. Các hàm: VND(), USD(), Num2Str().
+ Cung cấp hàm chuyển đổi font chữ từ TCVN3, VNI sang UNICODE. Hàm ToUNC().

(*) Các file trong bộ Add-In:
1 - AccHelper.xll (Cài file này đầu tiên. Nếu Office từ 2007 trở lên thì chỉ cần một file này. Font chữ ngầm định là Unicode. Các hàm: VND, USD, ToUNC)
2 - AccHelperEx.xla (chỉ dùng cho từ Excel 2003 trở về trước để hỗ trợ Unicode hoặc để đọc các con số trên 15 chữ số. Add-in này cung cấp các hàm: VNDW, USDW, ToUNCW)
3 - AccHelper.ini (lưu các tham số ngầm định của các hàm, có thể mở và sửa lại cho như ý!)
4 - Help.xls (Hướng dẫn sử dụng các hàm).

(*) Nếu máy bạn đã đang cài một Add-In đọc số nào đó có sử dụng tên hàm: VND, USD thì hãy gỡ bỏ nó trước khi cài AccHelper.xll.
(*) Nếu bạn đã cài Add-In "Accounting Helper" trước, bạn có thể copy đè lên file cũ (AccHelper.xll, AccHelperEx.xla).

(*) Cài đặt Add-in trong Excel2007, 2010, 2013, 2016 (32 và 64-bit) hoặc cao hơn:
+ Bấm vào nút "Office Button" (nút to, tròn ở góc đỉnh bên trái màn hình)
+ Chọn "Excel Options"
+ Chọn "Add-Ins", màn hình phía bên phải, dưới đáy "Manage:" chọn "Excel Add-Ins" cuối cùng chọn "Go".
+ Tại màn hình "Add-Ins" bạn làm như với Excel2003 trở về trước. Bấm chọn "Browse" và chọn file "AccHelper.xll" (Chỉ một file này là đủ).
+ Nếu Office của bạn là 64 bit, hãy chọn file theo đường dẫn "x64\AccHelper.xll"
Ví dụ:
=VND(1000) trả về font UNICODE là ngầm định.

(*) Cài đặt Add-in trong Excel97/2000/2002(XP)/2003:
+ Vào menu Tools, chọn Add-Ins, "Add"/Thêm 2 tập tin
+ Chọn nút "Browse" và chọn file "AccHelper.xll", làm tương tượng lần nữa để cài "AccHelperEx.xla" (để đọc font unicode, hoặc để đọc các con số trên 15 chữ số.)

Ví dụ:
=VND(1000) trả về font TCVN3(ABC) là ngầm định. Muốn unicode thì công thức phải là
=VNDW(1000) hoặc

------------NẾU CÀI KHÔNG ĐƯỢC-----------------------------------------------------------------------------------
(*) Nếu các bước cài đặt trên vẫn không được, bạn hãy copy các file và đường dẫn dưới đây:
1. Các file cần copy:
+ "AccHelper.xll"
+ "x64\AccHelper.xll" - Nếu Office 64-bit.
+ "AccHelperEx.xla" Chỉ cần nếu cần dùng hàm VNDW, USDW để đọc các con số trên 15 chữ số.
2. Đường dẫn đặt file copy (Paste)
(Làm nhanh: Mở My Computer, dán đường dẫn dưới đây vào thanh địa chỉ rồi Enter)
+ Với Windows XP: C:\Documents and Settings\%username%\Application Data\Microsoft\AddIns
+ Với Windows Vista hoặc cao hơn: C:\Users\%username%\AppData\Roaming\Microsoft\AddIns

(*) Để thay đổi những thông số được thiết lập ngầm định cho các hàm cũng như cách đọc số của các hàm, bạn chạy file "AccHelperOptions.exe".

(*) Để tìm đọc hướng dẫn chi tiết và các ví dụ, bạn hãy mở file "Help.xls"

Cấu trúc của hàm VND là:

Mã:
[B]VND[/B](Amount, OutputType, Unit1, Unit2, MUnit2, HasGroupingSymbol)              
      
    Amount:     là số tiền cần chuyển đổi thành văn bản.      
    OutputType:    là một số, nếu giá trị là 1 hàm trả về kiểu chuỗi TCVN3, 2 kiểu chuỗi là VNI, 3 kiểu chuỗi là Unicode - ngầm định (Chỉ dùng từ Excel 2007 trở lên)      
    Unit1:    là giá trị kiểu chuỗi, chỉ ra loại đơn vị tiền tệ, ngầm định là "đồng"      
    [COLOR="#FF0000"]Unit2[/COLOR]:    là giá trị kiểu chuỗi, chỉ ra loại đơn vị tiền tệ cho số lẻ, ngầm định là "xu"      
    [COLOR="#FF0000"]MUnit2[/COLOR]:    là con số được nhân với số lẻ của Amount, quy đổi số lẻ từ đơn vị Unit1 sang Unit2, ngầm định giá trị là 1      
    HasGroupingSymbol    là giá trị kiểu logic(boolean), nếu là TRUE thì chuỗi kết quả sẽ có dấu phảy (, ) ngăn cách câu, FALSE là giá trị ngầm định không có dấu (, ) ngăn cách.

Ví dụ:
=VND(12.5,,"đồng","hào",10)
Đọc là "Mười hai đồng và năm hào."

Cách dùng (đơn giản) trong Sheet:
=VND(1000000)

=VND(1000000) kết quả là chuỗi TCVN3 (Nếu Excel 2003 trở về trước)
=VND(1000000) kết quả là chuỗi Unicode (Nếu từ Excel 2007 trở lên)

=VND(1000000,2) kết quả là chuỗi VNI
=VND(1000000,3) kết quả là chuỗi Unicode

=USD(1000000) kết quả là chuỗi đọc số tiếng Anh

Để biết được nó tối ưu như thế nào, bạn vào công thức tại ô A1
=VND(1000000) copy cho tất cả các dòng trong một cột (65536 dòng)

Bạn cũng làm vậy với hàm đổi số thành chữ của các add-ins khác bạn sẽ thấy sự khác nhau về tốc độ!

Các bạn đọc thêm hướng dẫn tại file Help.xls hoặc tại đường link dưới đây:
http://www.bluesofts.net/Products/AddIns/Accounting Helper/Index.htm

File "Cach_doc_ khac.zip" là các ví dụ về các cách đọc số thành chữ bằng hai thứ tiếng Anh và Việt. Nếu trong thực tế phát sinh cách đọc khác, các bạn có thể đề đạt tại topic này, tôi sẽ cố gắng thực hiện trong khả năng có thể.


Download Accounting Helper v3.1.0 (phiên bản mới nhất, ngày 22/03/2018)
 

File đính kèm

Lần chỉnh sửa cuối:

iLike

Thành viên mới
Tham gia ngày
9 Tháng mười hai 2006
Bài viết
9
Được thích
15
Điểm
0
Tuổi
48
Quả thật, tốc độ mark III luôn. Trên cả tuyệt vời. Xin cảm ơn
Tốc độ này đến từ file .xll or đến từ giải thuật ngắn gọn hơn vậy bạn?
Bạn có thể bật mí một tí về cách tạo cái loại file .xll này được không?
Mình rất nôn nóng về cái này "before dead", bạn nhé
 

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
4,209
Được thích
9,711
Điểm
860
Nơi ở
Hà Nội
Bản chất trong file Excel.exe có chứa file Excel.Xll. Tất cả các hàm Sum, SumIf, Vlookup,...nằm trong file Excel.Xll.

Xll bản chất là Dll (được dịch ra mã máy). Tạo ra file này phải làm trong C/C++ hoặc Delphi.

Một hàm chạy nhanh còn phụ thuộc vào thuật toán nữa. Hàm SoThanhChu chạy nhanh thuật toán chỉ là phần nhỏ, lý do chính là vì nó nằm trong file Xll.

Mình đưa ra để các bạn biết hơn nữa về Excel và có sự so sánh về công nghệ.

Lập trình trong VBA tốc độ ứng dụng đạt 100% thì:
VB là 190% chậm hơn (+90%)
C/C++/Delphi là 40% nhanh hơn (-60%).
 

Mr Okebab

Ngon Ngất Ngây
Thành viên đã mất
Tham gia ngày
6 Tháng tám 2006
Bài viết
3,262
Được thích
3,762
Điểm
0
Tuổi
43
Vậy thì bó tay rồi. Đành ngồi chờ sung rụng vậy thôi. hu hu...
 

tvhsg2006

Thành viên mới
Tham gia ngày
17 Tháng mười hai 2006
Bài viết
2
Được thích
3
Điểm
0
Có một ý kiến, bạn có thể đặt tên hàm "SoThanhChu" ngắn lại không, dài quá hơi bất tiện mà thao tác type cũng mất thời gian. VD có thể đổi là DocSo() !?
Cảm ơn!
 

Chuotdong

Thành viên thường trực
Tham gia ngày
28 Tháng mười một 2006
Bài viết
248
Được thích
60
Điểm
678
Đúng là ý tưởng thì rất hay nhưng bạn viết có vẻ ko trau truốt lắm, biểu diễn nhiều hơn là ứng dụng, về lỗi thế nào các bạn khác cho ý kiến thêm nhé.
Nhân đây cho mình hỏi thêm là các hàm viết trong VBA có thể có tham số ngầm định - khi không đưa vào thì tự hiểu , chẳng hạn như là hàm đổi số sang chữ có tên là =VND(tham số 1, tham số 2)

Thì tham số 1 bắt buộc phải tham chiếu rồi, còn tham số 2 thì khi không có: nghĩa là dùng font UNICODE, còn nếu không phải nhập vào mã qui ước ví dụ: TCVN là dùng mà tiếng Việt TCVN3, VNI là dùng mã VNI , Unicode là UNI .v....v....
=VND(123,45)
=VND(123,45;TCVN)
 

hai2hai

VNUNi®
Thành viên danh dự
Tham gia ngày
14 Tháng sáu 2006
Bài viết
1,138
Được thích
2,398
Điểm
860
Nơi ở
ĐT: 024-2242 5829
Public Enum ENU_CHARCODE
cUnicode = 0
cTCVN3 = 1
cVNI = 2
End Enum
Public Function fstNumToWord(byval dblNumber As Double, Optional ByVal eCharCode AS ENU_CHARCODE = cUnicode) As String
'// code here ...
End Function
Nhưng tóm lại toàn là những kỹ thuật nhỏ nhỏ. Mình thấy mọi người để ý quá nhiều đến những vấn đề li ti, tiểu tiết (hàm convert như thế này search 1 cái trên google thì ra cả đống luôn). Trên WKT & giaiphapexcel cũng đã rất nhiều những hàm loại này rồi. Cái quan trọng vẫn là mục tiêu, mục tiêu là đổi số thành chữ (đơn giản vậy thôi)

Cái quan trọng là yêu cầu nghiệp vụ của ứng dụng, thiết kế ứng dụng ra sao, v.v... Mình thấy rất nhiều bạn có những file ứng dụng nhưng cách tạo vẫn còn sơ đẳng hết sức và cách làm thì hoàn toàn sai... nhưng ko ai muốn tham gia các dự án đó cả.

Cũng có thể trên đây mọi người tạm thời chỉ quan tâm đến từng vấn đề cụ thể thôi mà chưa care gì đến những chuyện lớn hơn. Cái Project, 1 phần mục tiêu của giaiphapexcel mà chị Dung đã từng bàn đến chẳng nhẽ lại ko thực hiện được?
 
Lần chỉnh sửa cuối:

Chuotdong

Thành viên thường trực
Tham gia ngày
28 Tháng mười một 2006
Bài viết
248
Được thích
60
Điểm
678
TuanVNUNI đã viết:
To Chuotdong: Chỉ có một hàm SoThanhChu(Sotien) trong một file xll làm sao mà bạn lại nói

Bạn làm sao đọc được code!
Xin lỗi nếu có gì làm phật ý bạn. Tôi chỉ muốn nói là nếu bạn cho rằng hàm của mình là hoàn thiện hơn hẳn các hàm khác (ở góc độ Excel tôi là người ứng dụng thuần túy chỉ quan tâm đến điều đó vì tôi ko biết về VBA): cụ thể hơn là hàm của bạn không linh động ko sửa được tên hàm, ko xem được bạn viết có đúng chưa(có thể bạn sẽ hướng dẫn cách convert từ .xla sang .xll), đặt tình huống tôi muốn dùng hàm của bạn một cách nghiêm túc tôi sẽ phải đổi tên hàm cho 1 đống dữ liệu dùng với tên hàm đổi số sang chữ tôi đã dùng rồi (bạn bắt tôi phải đổi lại hết chỉ để ứng dụng hàm của bạn ?), cũng với ý đó tôi mong bạn cải tiến với việc linh động trong việc sử dụng font chữ tiếng Việt như đã góp ý trên. Làm cả hàm chuyển bằng tiêng Anh nữa càng tốt.

 
Lần chỉnh sửa cuối:

Đào Việt Cường

Cu Tí sành điệu
Thành viên danh dự
Tham gia ngày
11 Tháng sáu 2006
Bài viết
527
Được thích
758
Điểm
860
Nơi ở
Nha Trang
Dear Chuotdong,
----------------
Góp ý của bạn rất xác đáng, tuy nhiên chủ đề này chúng ta bàn về:
AddIns Đổi số thành chữ - Tốc độ nhanh tối đa, nhanh hơn 80% các Addins khác
chứ không phải là vấn đề ứng dụng của hàm. Nói cách khác tác giả muốn so sánh về mặt công nghệ hơn là nói về giải thuật và phát triển ứng dụng. Lẽ ra kèm theo tập tin Ketoan.xll, anh TuanVNUNI nên cung cấp mã nguồn để các bạn so sánh trên VBA thì mới chính xác được, chứ nếu so với các Add-Ins khác (là Add-Ins nào!?) chúng ta cần bàn đến vấn đề giải thuật nữa.
Tuy nhiên, theo em hiểu thì chúng ta không thể "nhúng" trực tiếp mã nguồn của chương trình này vào VBA Project được vì có sự khác biệt về ngôn ngữ phát triển(?).
 
Chỉnh sửa lần cuối bởi điều hành viên:

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
4,209
Được thích
9,711
Điểm
860
Nơi ở
Hà Nội
Có bao giờ chúng ta bảo tôi muốn dùng hàm VLookup nhưng muốn đổi tên là "Timkiem" không?
Tất cả các AddIns khi đã biên dịch thành DLL,XLL thì miễn bàn đến vì nó đã là ngôn ngữ máy rồi, còn dạng XLA thì chỉ khi tác giả cho Pass VBA thì mới sửa được tên hàm.

Trong file Excel của các bạn hàm đọc số thành chữ dùng không nhiều (nó chỉ trong các chứng từ, sổ, báo cáo là chính) nên việc chọn hàm này hay hàm khác có thể không đáng quan tâm. Nhưng nếu bạn dùng các hàm để tính toán nhiều, dùng nhiều thì nên chọn AddIns dạng XLL để đảm bảo tốc độ của ứng dụng.
(Thuật toán như nhau, tốc độ các hàm trong AddIns XLL nhanh hơn trong VBA rất nhiều ~+60%)
Mục đích tôi đưa file Ketoan.XLL để các bạn biết là các chuyên gia MS Excel phải làm như vậy để tạo ra các hàm Excel cho người dùng. Các AddIns của Microsoft gần như đều phải làm như vậy Solver, ODBC,...

Học để làm AddIns XLL, nếu bạn nào biết ngôn ngữ C/C++/Delphi có thể thể trao đổi cùng tôi.
 

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
4,209
Được thích
9,711
Điểm
860
Nơi ở
Hà Nội
le cuong đã viết:
... con noi ve toc do thi minh khong biet ban quan niem the nao la nhanh chu minh thay cu enter la no ra lien ha...
Bạn copy công thức đó cho khoảng 60000 dòng xem thế nào?
Nói chung chỉ những ai dùng Excel quản lý dữ liệu lớn, phải chờ Calculation ở Statubar từ 0-100% khoảng vài phút thì mới biết tiết kiệm tài nguyên của Excel.

Có 2 người, tạo ra 2 file Excel cùng có cùng size là 10 MB, nhưng một file thì chạy vù vù, còn một file thì phải đợi hút xong điếu thuốc đã. Cái đó là do chúng ta biết tiết kiệm từng byte của bộ nhớ trong Excel.
 

phamduylong

-
Thành viên đã mất
Tham gia ngày
30 Tháng mười hai 2006
Bài viết
920
Được thích
2,348
Điểm
0
Tuổi
66
Nơi ở
Đồng Tháp
TuanVNUNI đã viết:
Học để làm AddIns XLL, nếu bạn nào biết ngôn ngữ C/C++/Delphi có thể thể trao đổi cùng tôi.
Excel thì còn biết chút chút, C/C++/Delphi thì mù. Bạn có thể giới thiệu cho anh em thấy mối quan hệ giữa C/C++/Delphi và Excel để anh em học hỏi.
 

thephuonglamvo

Thành viên mới
Tham gia ngày
28 Tháng ba 2007
Bài viết
2
Được thích
0
Điểm
0
Anh TuấnVNUNI ơi, tôi là thành viên mới.Tôi thấy hàm sothanhchu của anh rất hay nhưng không xem được code của anh được,anh chỉ tôi với.Anh có thể dùng font Unicode được không?mắc công phải đổi font qua TCVN quá.
 

nctri

Thành viên mới
Tham gia ngày
28 Tháng mười 2006
Bài viết
2
Được thích
0
Điểm
0
Vui lòng cho hỏi thêm, Add in này chạy trong Excel 2007 được không.
Tôi thử trong Excel 2007 thì không được. Hướng dẫn thêm nhé
Cám ơn,
 

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
4,209
Được thích
9,711
Điểm
860
Nơi ở
Hà Nội
Cài đặt Addin trong Excel2007

nctri đã viết:
Vui lòng cho hỏi thêm, Add in này chạy trong Excel 2007 được không.
Tôi thử trong Excel 2007 thì không được. Hướng dẫn thêm nhé
Cám ơn,
Làm được trong Excel2007 bạn à.
Cài đặt Addin trong Excel2007:
+ Bấm vào nút "Office Button" (nút to, tròn ở góc đỉnh bên trái màn hình)
+ Chọn "Excel Options"
+ Chọn "Add-Ins", màn hình phía bên phải, dưới đáy "Manage:" chọn "Excel Add-Ins" cuối cùng chọn "Go".
+ Tại màn hình "Add-Ins" bạn làm như với Excel2003 trở về trước. Bấm chọn "Browse" tìm đến file *.xll , * xla....
 

hoangdangtiep

Thành viên mới
Tham gia ngày
30 Tháng mười 2007
Bài viết
2
Được thích
0
Điểm
0
Tuổi
37
Mình đã làm thế rồi nhưng vẫn không được bạn ạ. Hay có thiết đặt Maco hay có cần đánh dấu nút Add -Ins nào nữa không. Chứ mình cài vào máy ở nhà và cả cơ quan đều không được. Cài xong có cần khởi động lại máy không vậy bạn.
 

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
4,209
Được thích
9,711
Điểm
860
Nơi ở
Hà Nội
hoangdangtiep đã viết:
Mình đã làm thế rồi nhưng vẫn không được bạn ạ. Hay có thiết đặt Maco hay có cần đánh dấu nút Add -Ins nào nữa không. Chứ mình cài vào máy ở nhà và cả cơ quan đều không được. Cài xong có cần khởi động lại máy không vậy bạn.
Sau khi bạn đã thực hiện việc cài AddIns như đã hướng dẫn. Trong cửa sổ "Add-Ins" mục "Trợ giúp kế toán v1.0" phải được tick.

Nếu bạn cài được với các Addins khác mà với Ketoan.xll không được thì mình không biết giải thích thế nào được nữa?
 

xuan_ha919

Thành viên thường trực
Tham gia ngày
2 Tháng hai 2007
Bài viết
275
Được thích
581
Điểm
835
Tuổi
43
Em đã làm như các Bác hướng dẫn nhưng vẫn không được. Có gì các Bác chỉ ra chỗ sai cho em. Sau khi đã làm được như hình đầu em đánh = sothanhchu(100) lập tức xẩy ra hiện tượng như hình 2 (có file gửi kèm). Sau đó thì Add - in ketoan không còn nữa. Em đang dùng Excel 2002.
 

File đính kèm

Lần chỉnh sửa cuối:

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
4,209
Được thích
9,711
Điểm
860
Nơi ở
Hà Nội
Accounting Helper v1.1 - Trợ giúp kế toán trên Excel

Xin giới thiệu mọi người phiên bản mới của loại Add-In này.

AccHelper.xll - "Accounting Helper" v1.1

+ Đã sửa lại hàm SothanhChu
+ Thêm 2 hàm VND và USD, ToUNC, Num2Str
+ Font chữ được chuyển theo 3 dạng VNI, TCVN3, Unicode

Mọi người download tại trang đầu theo đường dẫn dưới đây:
http://www.giaiphapexcel.com/forum/showthread.php?p=6349#post6349

Xem thêm thông tin tại:
http://www.bluesofts.net/Products/AddIns/Accounting Helper/Index.htm

Hy vọng với phiên bản này mọi người từ nay không còn phải lo nghĩ về vấn đề chuyển số thành chữ nữa.
 
Top Bottom