Thư viện DLL viết trên C++ Builder tăng tốc xử lý chuỗi và mảng trong VBA (4 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

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ý




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-bit64-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, prefixsuffix.
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-bitExcel 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
 

File đính kèm

Bài viết mới nhất

Back
Top Bottom