phuongnam366377
Thành viên thường trực




- Tham gia
- 25/10/19
- Bài viết
- 222
- Được thích
- 226
1/ Ý tưởng từ chủ đề sau
2/ Tôi + ChatGPT viết nhanh khoãng gần 2 tiếng cho Thư viện sau cơ bản hoàn thành
3/ ChatGPT viết bài giới thiệu nhanh
4/ Mai mốt úp lên Github sau ...
5/ Nội dung sau do ChatGPT biên soạn theo chỉ đạo của Tôi
Thư viện tập trung vào:
Ví dụ này thể hiện rõ cách
Kết quả thường ~0.001s cho 1.000.000 ký tự — điều mà VBA thuần không thể làm nổi trong thực tế.
Hình ảnh nhìn từ VBA như sau

Kiểu chuỗi trong VBA là kiểu dữ liệu không biến đổi được (immutable string), tức là chuỗi một khi đã được tạo ra thì kích thước của nó sẽ luôn cố định và không thể thay đổi được. Như vậy khi ghép hai chuỗi với nhau, VBA phải thực hiện những công việc sau đây:
VD: Với biểu thức str = "a" & "b".
VD: Với biểu thức str = "a" & "b".
- Xác định số lượng ký tự của hai chuỗi "a" và "b".
- Xin hệ điều hành cấp phát vùng nhớ vừa đủ để chứa hai chuỗi trên.
- Sao chép hai chuỗi trên vào vùng nhớ mới được cấp phát.
- nguyendang95
- Trả lời: 32
- Diễn đàn: Excel và các ngôn ngữ lập trình khác
2/ Tôi + ChatGPT viết nhanh khoãng gần 2 tiếng cho Thư viện sau cơ bản hoàn thành
3/ ChatGPT viết bài giới thiệu nhanh
4/ Mai mốt úp lên Github sau ...
5/ Nội dung sau do ChatGPT biên soạn theo chỉ đạo của Tôi
StringCore – Thư viện COM StringBuffer hiệu năng cao (Free Binary)
StringCore là một COM DLL miễn phí cung cấp lớp StringBuffer — một engine xử lý chuỗi Unicode mutable được thiết kế để hỗ trợ các thao tác chuỗi hiệu năng cao trong VBA, VB6, Delphi và các client Automation khác.Thư viện tập trung vào:
- Xây dựng chuỗi lớn hiệu quả
- Thay thế ký tự/đoạn chuỗi ở quy mô lớn
- Phân tách và chuyển đổi thành số nhanh
- Thao tác in-place (thay đổi trực tiếp trên buffer), tránh tạo chuỗi tạm
Lưu ý: Đây là binary-only release (chỉ DLL COM). Không kèm mã nguồn.
Tính năng chính
Xây dựng & chỉnh sửa chuỗi
Append,AppendCharInsert,DeleteReplace,ReplaceInPlaceReverse,ClearEnsureCapacity(cấp phát trước để tối ưu)
Tìm kiếm & so sánh
IndexOf,LastIndexOfStartsWith,EndsWith,ContainsCompare(tuỳ chọn IgnoreCase)
Phân tách và parse nhanh
Split,SplitCharSplitToLongArraySplitCharToLongArraySplitCharToInt64Array
Hỗ trợ số
AppendInt64PartsAppendInt64Range
Replace siêu nhanh
ReplaceChar– thay ký tự tại vị tríReplaceInPlace– thay đoạn an toàn, hiệu năngBatchReplaceChars– batch replace nhiều vị trí trong 1 lần gọi
Hướng dẫn nhanh (VBA)
Sau khi đăng ký DLL quaregsvr32, bạn mở Tools → References trong VBA và tick StringCore – High-Performance COM StringBuffer Library, rồi gọi:
Mã:
Dim b As New StringBuffer
b.Append "Hello, "
b.Append "World!"
Debug.Print b.Value
Ví dụ chi tiết
Thao tác chuỗi cơ bản
Mã:
Sub Full_Buffer_Test()
Dim buff As StringBuffer
Set buff = New StringBuffer
buff.Append "ABFGH"
Debug.Print buff.Value
' ABFGH
buff.Insert 3, "CDE"
Debug.Print buff.Value
' ABCDEFGH
buff.Reverse
Debug.Print buff.Value
' HGFEDCBA
buff.Replace 2, 2, "XX"
Debug.Print buff.Value
' HXXEDCBA
buff.Reverse
Debug.Print buff.Value
' ABCDEXXH
buff.Delete 6, 2
Debug.Print buff.Value
' ABCDEH
Debug.Print buff.Substring(2, 3)
' BCD
End Sub
StringBuffer thay thế các thao tác xử lý chuỗi phức tạp trong VBA một cách trực quan và hiệu quả.
Batch replace ký tự hàng loạt (siêu nhanh)
Mã:
Sub Test_BatchReplaceChars()
Dim b As New StringBuffer
Dim n As Long: n = 1000000
b.Append String(n, "A")
Dim pos() As Long, ch() As Long
ReDim pos(1 To n)
ReDim ch(1 To n)
Dim i As Long
For i = 1 To n
pos(i) = i
ch(i) = Asc("X")
Next
PerfInit
Dim t0 As Double: t0 = PerfNow
b.BatchReplaceChars pos, ch
Dim t1 As Double: t1 = PerfNow
Debug.Print "BatchReplaceChars:"; Format(t1 - t0, "0.000")
End Sub
Ghi chú hiệu năng
| Thao tác | StringCore | VBA tương đương |
|---|---|---|
| Xây dựng chuỗi lớn | nhanh | chậm |
| Replace ký tự nhiều lần | nhanh | |
| Batch replace nhiều vị trí | ||
| Split → Long array | rất chậm |
StringCore thực hiện thao tác trực tiếp trên buffer Unicode UTF-16, tránh copy và tạo chuỗi tạm, vì vậy mang lại hiệu năng vượt trội cho các bài toán text-heavy.Ghi chú sử dụng
EnsureCapacitygiúp cấp phát trước bộ nhớ nếu bạn xây dựng chuỗi lớn.BatchReplaceCharslà hàm quan trọng nhất khi bạn cần cập nhật nhiều vị trí cùng lúc.SplitCharToInt64Arraycực nhanh trong việc phân tích dữ liệu số (numeric parsing).
Cách đăng ký DLL
- Mở Command Prompt (Admin)
- Chạy:
Mã:
regsvr32 StringCore.dll
- Mở VBA (Excel/Access/VB6):
- Tools → References
- Chọn StringCore – High-Performance COM StringBuffer Library
New StringBuffer trong VBA để xử lý chuỗi hiệu năng cao.
Hình ảnh nhìn từ VBA như sau
Lần chỉnh sửa cuối:
