phuongnam366377
Thành viên hoạt động



- Tham gia
- 25/10/19
- Bài viết
- 181
- Được thích
- 197
1/ Nội dung bài Viết và hổ trợ viết Mã C++ Builder trên Delphi 12 được hổ trợ bởi ChatGPT
2/ Chủ đề này tôi sẽ giới thiệu tới ai đó một bộ siêu tập hàm viết bằng C++ Builder và thuần C++ cho ai cần sử dụng nó ... sẽ úp dần dần theo thời gian vừa học vừa viết + Úp
hiện tại trong File có rất nhiều hàm mai mốt rảnh chỉ dẫn hàng loạt hàm khác ....
3/ quá trình sử dụng phát sinh lỗi nếu có và có như cầu cần tùy chỉnh hay viết thêm vui lòng mô tả tại chủ đề này nếu khả năng có thể tôi sẽ xử lý
Trong quá trình làm việc với Excel VBA, chắc hẳn nhiều người gặp vấn đề hiệu năng khi xử lý chuỗi hoặc mảng dữ liệu lớn. VBA vốn chậm và hạn chế trong việc thao tác chuỗi, đặc biệt là khi phải nối hàng nghìn dòng dữ liệu, chuyển đổi chữ hoa/thường, hoặc thay thế văn bản trong toàn bộ mảng.
Để khắc phục, tôi đã viết một thư viện DLL bằng C++ Builder (Delphi 12), biên dịch riêng cho 32-bit và 64-bit, có thể gọi trực tiếp từ VBA cũng như từ các ngôn ngữ lập trình khác (VB6, VB.NET, C#, Python …).
Ghép nhiều phần tử trong mảng thành một chuỗi duy nhất, có hỗ trợ delimiter, prefix và suffix.
Tương tự Join, nhưng nhanh hơn nhiều lần và linh hoạt hơn.
Ghép mảng thành chuỗi với một delimiter đơn giản.
Xóa khoảng trắng dư thừa trong toàn bộ mảng chuỗi.
Chuyển toàn bộ chuỗi trong mảng thành chữ hoa.
Thay thế chuỗi con trong toàn bộ mảng.
Thư viện hỗ trợ cả Excel 32-bit và Excel 64-bit:
Tương tự cho các hàm JoinArray, TrimAll, ToUpperArray, ReplaceInArray.
Do viết dưới dạng DLL xuất hàm chuẩn stdcall, thư viện này có thể gọi được từ:
Điều này giúp thư viện có tính đa nền tảng trong hệ sinh thái Windows.
Nếu bạn thường xuyên phải xử lý dữ liệu lớn trong Excel, đặc biệt là chuỗi và mảng, thì việc tích hợp DLL này sẽ giúp tăng tốc đáng kể.
Thay vì viết vòng lặp VBA chậm chạp, bạn có thể tận dụng sức mạnh native code để tiết kiệm thời gian và tài nguyên.
Đây là một giải pháp nhẹ, dễ triển khai, nhưng mang lại hiệu quả cao.
PassWord WinRaR là: 123
Tôi úp lên đây là bản 64 bít nếu ai dùng 32 bít thì báo tôi úp thêm
2/ Chủ đề này tôi sẽ giới thiệu tới ai đó một bộ siêu tập hàm viết bằng C++ Builder và thuần C++ cho ai cần sử dụng nó ... sẽ úp dần dần theo thời gian vừa học vừa viết + Úp
hiện tại trong File có rất nhiều hàm mai mốt rảnh chỉ dẫn hàng loạt hàm khác ....
3/ quá trình sử dụng phát sinh lỗi nếu có và có như cầu cần tùy chỉnh hay viết thêm vui lòng mô tả tại chủ đề này nếu khả năng có thể tôi sẽ xử lý
Thư viện DLL viết trên C++ Builder tăng tốc xử lý chuỗi và mảng trong VBA
Trong quá trình làm việc với Excel VBA, chắc hẳn nhiều người gặp vấn đề hiệu năng khi xử lý chuỗi hoặc mảng dữ liệu lớn. VBA vốn chậm và hạn chế trong việc thao tác chuỗi, đặc biệt là khi phải nối hàng nghìn dòng dữ liệu, chuyển đổi chữ hoa/thường, hoặc thay thế văn bản trong toàn bộ mảng.
Để khắc phục, tôi đã viết một thư viện DLL bằng C++ Builder (Delphi 12), biên dịch riêng cho 32-bit và 64-bit, có thể gọi trực tiếp từ VBA cũng như từ các ngôn ngữ lập trình khác (VB6, VB.NET, C#, Python …).
Các hàm chính trong thư viện
1.
Ghép nhiều phần tử trong mảng thành một chuỗi duy nhất, có hỗ trợ delimiter, prefix và suffix.
Tương tự Join, nhưng nhanh hơn nhiều lần và linh hoạt hơn.
Mã:
result = StringBuilderFast(Array("A", "B", "C"), ", ", "[", "]")
' Kết quả: [A, B, C]
2.
Ghép mảng thành chuỗi với một delimiter đơn giản.
Mã:
result = JoinArray(Array("John", "Jane", "Tom"), "; ")
' Kết quả: John; Jane; Tom
3.
Xóa khoảng trắng dư thừa trong toàn bộ mảng chuỗi.
Mã:
arr = Array(" Hello ", "World ")
result = TrimAll(arr)
' Kết quả: Array("Hello", "World")
4.
Chuyển toàn bộ chuỗi trong mảng thành chữ hoa.
Mã:
result = ToUpperArray(Array("excel", "vba", "dll"))
' Kết quả: Array("EXCEL", "VBA", "DLL")
5.
Thay thế chuỗi con trong toàn bộ mảng.
Mã:
result = ReplaceInArray(Array("cat", "dog", "bird"), "a", "@")
' Kết quả: Array("c@t", "dog", "bird")
Cách khai báo trong VBA
Thư viện hỗ trợ cả Excel 32-bit và Excel 64-bit:
Mã:
#If VBA7 And Win64 Then
Public Declare PtrSafe Function StringBuilderFast Lib "MyLibrary64.dll" _
(ByVal varArray As Variant, ByVal delimiter As Variant, _
ByVal prefix As Variant, ByVal suffix As Variant) As Variant
#Else
Public Declare PtrSafe Function StringBuilderFast Lib "MyLibrary32.dll" _
(ByVal varArray As Variant, ByVal delimiter As Variant, _
ByVal prefix As Variant, ByVal suffix As Variant) As Variant
#End If
Tương tự cho các hàm JoinArray, TrimAll, ToUpperArray, ReplaceInArray.
Ứng dụng ngoài VBA
Do viết dưới dạng DLL xuất hàm chuẩn stdcall, thư viện này có thể gọi được từ:
- VB6, VB.NET: sử dụng Declare Function hoặc P/Invoke.
- C#: [DllImport] để gọi hàm.
- Python: sử dụng ctypes hoặc pywin32.
- C/C++: load DLL trực tiếp bằng LoadLibrary và GetProcAddress.
Điều này giúp thư viện có tính đa nền tảng trong hệ sinh thái Windows.
Ưu điểm nổi bật
- Tốc độ cao: viết bằng C++ Builder, xử lý mảng/chuỗi nhanh gấp nhiều lần so với VBA thuần.
- Dễ sử dụng: chỉ cần khai báo 1 lần trong VBA, dùng như hàm bình thường.
Tương thích: hỗ trợ cả 32-bit và 64-bit.
- Mở rộng: có thể dùng trong nhiều ngôn ngữ lập trình khác, không chỉ Excel VBA.
Kết luận
Nếu bạn thường xuyên phải xử lý dữ liệu lớn trong Excel, đặc biệt là chuỗi và mảng, thì việc tích hợp DLL này sẽ giúp tăng tốc đáng kể.
Thay vì viết vòng lặp VBA chậm chạp, bạn có thể tận dụng sức mạnh native code để tiết kiệm thời gian và tài nguyên.
Đây là một giải pháp nhẹ, dễ triển khai, nhưng mang lại hiệu quả cao.
PassWord WinRaR là: 123
Tôi úp lên đây là bản 64 bít nếu ai dùng 32 bít thì báo tôi úp thêm