28.4 C
Ho Chi Minh City
Saturday, June 7, 2025
AIPHOGPT.COM
Trang chủ Blog Trang 197

Sách lập trình Macro VBA Excel – Writing Excel Macros with VBA 2nd

  1. Loạt các bài viết có liên quan chuyên đề VBA:
  2. VBA Excel Hộp thoại thông báo
  3. VBA Excel Biến trong VBA Excel
  4. VBA Excel sử dụng Scripting Dictionary
  5. VBA Excel Biến trong VBA Excel
  6. VBA Excel Workbook, worksheet
  7. VBA Excel Range, Cells
  8. VBA Excel Hàm trong Excel VBA
  9. VBA Excel Events, Application Object
  10. VBA Excel Function and Sub Excel VBA
  11. VBA Excel Array Mảng trong Excel VBA
  12. VBA Excel FileSystemObject trong Excel VBA
  13. VBA Excel Collection trong Excel VBA
  14. VBA Excel Hashtable trong Excel VBA
  15. VBA Excel Stack trong Excel VBA
  16. VBA Excel Queue trong Excel VBA
  17. VBA Excel SortedList Excel VBA
  18. VBA Excel ArrayList Excel VBA
  19. VBA Excel Ví dụ về Scripting Dictionary
  20. Sách VBA Excel 2016 power programming with vba (pdf)

1. Giới thiệu sách:

Mới được cập nhật cho Excel 2002, Viết Excel Macros với VBA, 2nd Edition cung cấp Excel người dùng , cũng như các lập trình viên không quen với mô hình đối tượng Excel, với một giới thiệu vững chắc để viết Visual Basic cho ứng dụng (VBA) macro và chương trình cho Excel. Đặc biệt, cuốn sách tập trung vào:

  • Trình soạn thảo Visual Basic và môi trường lập trình Excel VBA. Excel có một môi trường phát triển tích hợp hoàn chỉnh để viết, chạy, kiểm tra và gỡ lỗi các macro VBA.

2. Nội dung sách:

Ngôn ngữ lập trình VBA, cùng một ngôn ngữ lập trình được sử dụng bởi các ứng dụng khác trong Microsoft Office XP và 2000, cũng như các phiên bản bán lẻ của Visual Basic 6.0. Mô hình đối tượng Excel, bao gồm các đối tượng mới và các thành viên mới của các đối tượng hiện có trong Excel 2002. Excel cho thấy gần như tất cả các chức năng của nó thông qua mô hình đối tượng của nó, đó là phương tiện mà Excel có thể được điều khiển bằng chương trình VBA. Trong khi mô hình đối tượng Excel, với 192 đối tượng, là lớn thứ hai trong số các ứng dụng Office, bạn cần phải làm quen với chỉ một số ít các đối tượng để viết các macro hiệu quả. 

Viết các macro Excel tập trung vào các đối tượng cần thiết này, nhưng bao gồm một cuộc thảo luận về nhiều đối tượng nữa.Viết các macro Excel với VBA, 2nd Editionđược viết theo một cách ngắn gọn, vô nghĩa, đó là đặc điểm của phương pháp tiếp cận thực tế đơn giản của Steven Roman. Thay vì một hướng dẫn có nhịp độ chậm với rất nhiều handholding, Roman cung cấp các thông tin cần thiết về Excel VBA mà bạn phải nắm vững để viết các macro một cách hiệu quả. 

Hướng dẫn này được củng cố bằng các ví dụ thú vị và hữu ích để giải quyết các vấn đề phổ biến mà bạn chắc chắn đã gặp phải. Viết Excel Macro với VBA, 2nd Edition là cuốn sách bạn cần để nghiên cứu kỹ các kiến ​​thức cơ bản về lập trình Excel VBA, cho phép bạn tăng sức mạnh và năng suất của mình.

Các bài viết liên quan:

Sách hay về lập trình VBA Excel- Làm chủ VBA cho Microsoft Office 2013

Tải sách tại đây: Writing Excel Macros with VBA 2nd Edition

Tải các tiện ích Excel Add-ins hay nhất

  1. Loạt các bài viết có liên quan chuyên đề VBA:
  2. VBA Excel Hộp thoại thông báo
  3. VBA Excel Biến trong VBA Excel
  4. VBA Excel sử dụng Scripting Dictionary
  5. VBA Excel Biến trong VBA Excel
  6. VBA Excel Workbook, worksheet
  7. VBA Excel Range, Cells
  8. VBA Excel Hàm trong Excel VBA
  9. VBA Excel Events, Application Object
  10. VBA Excel Function and Sub Excel VBA
  11. VBA Excel Array Mảng trong Excel VBA
  12. VBA Excel FileSystemObject trong Excel VBA
  13. VBA Excel Collection trong Excel VBA
  14. VBA Excel Hashtable trong Excel VBA
  15. VBA Excel Stack trong Excel VBA
  16. VBA Excel Queue trong Excel VBA
  17. VBA Excel SortedList Excel VBA
  18. VBA Excel ArrayList Excel VBA
  19. VBA Excel Ví dụ về Scripting Dictionary
  20. Sách VBA Excel 2016 power programming with vba (pdf)
Trong quá trình làm việc với Excel, để rút ngắn thời gian thao tác các xử lý cơ bản trong Excel thì sử dụng các tiện ích Excel là việc làm cần thiết. Các bạn chỉ cần cài đặt thêm các tiện ích nhanh chóng mà có thể sử dụng lâu dài trên Excel. Dưới đây https://lequocthai.com sẽ giới thiệu đến các bạn một số tiện ích Excel hay nhất để các bạn lựa chọn và sử dụng, mời các bạn cùng theo dõi.
 
.com/proxy/

1. Tiện ích Excel hỗ trợ cho dân văn phòng

 
Tiện ích Excel này sẽ hỗ trợ một số tiện ích hữu ích trong Excel cho các công việc văn phòng như:
  • Sắp xếp tiếng Việt.
  • Tách, gộp họ tên, cột.
  • Tách, gộp ngày tháng năm.
  • Chuyển đổi chữ hoa – thường.
  • Xóa dấu tiếng Việt.
  • Chuyển đổi bảng mã.
  • Chèn hàm đọc số thành chữ.
  • Chèn hàm tính năm, tháng, ngày dư.
  • Xóa dòng theo điều kiện.
  • In nhanh File Excel.
.com/proxy/

 

2. Tiện ích Excel hỗ trợ cho nhà trường

 
Tiện ích Excel hỗ trợ các công việc khi sử dụng Excel trong nhà trường, các bạn sẽ rút ngắn thao tác hơn khi sử dụng bộ tiện ích Excel này. Các bạn sẽ có các tiện ích sau:
  • Sắp xếp A->Z tiếng Việt.
  • Tách gộp họ và tên.
  • Đổi chữ hoa – thường.
  • Chuyển đổi bảng mã.
  • Xóa dấu tiếng Việt.
  • Đọc số thành chữ.
  • Ngày tháng năm hiện hành.
  • Gom dữ liệu.
  • Lọc dữ liệu.
  • Xóa dòng theo điều kiện.
  • Sắp phòng thi – mẫu cố định.
  • Sắp phòng thi tùy chọn – mẫu tự thiết lập.
  • Hỗ trợ – in sổ điểm GV.
  • Hỗ trợ – in bảng tổng hợp.
.com/proxy/

3. Tiện ích Excel hay

 
Tiện ích Excel này hỗ trợ các bạn một số tiện ích về văn bản, tiện ích về số – ô tính, tiện ích về workbooks, tiện ích in dữ liệu:
  • Tách – ghép họ tên; xóa hàng trống; tô màu xen kẽ; xóa dấu văn bản.
  • Chuyển Font chữ; chuyển đổi chữ hoa – thường; sắp xếp tiếng Việt.
  • Ghép ô; ẩn giá trị; đọc số VND; tìm ô trùng nhau; vùng chọn; định dạng nhanh.
  • Lưu và đóng Excel; xem nhanh; bật gridline; xóa lỗi công thức.
  • In vùng chọn; xem trang in; thiết lập trang tin; in trang tính.
.com/proxy/

4. Cách cài đặt và sử dụng tiện ích Excel

Bước 1: Chạy file .exe của tiện ích mà bạn vừa tải về, sau đó cài đặt tiện ích vào hệ thống.
Bước 2: Sau khi cài đặt thành công, các bạn mở Excel, trên giao diện chọn File -> Options.
 
.com/proxy/
 
Bước 3: Trong cửa sổ Excel Options các bạn chọn Add-ins ở menu bên trái, phía bên phải các bạn chọn Go.
 
.com/proxy/
 
Xuất hiện hộp thoại Add-Ins nhỏ các bạn đánh dấu tích chọn ô vuông trước tên tiện ích vừa cài và nhấn OK.
 
.com/proxy/
 
Như vậy trên giao diện Excel các bạn sẽ thấy phần Add-Ins mà bạn vừa chọn, nhấn chọn vào đây để sử dụng các tiện ích nhanh chóng.
 
.com/proxy/

5. Cách gỡ bỏ tiện ích Excel

  1. Trong Excel các bạn chọn File -> Options, trong Excel Options các bạn chọn Excel Add-ins -> Go, trong Add-ins các bạn bỏ chọn trong ô vuông trước tên tiện ích và nhấn OK.
  2. Sử dụng Control Panel hoặc các ứng dụng gỡ bỏ phần mềm trên hệ thống để gỡ bỏ tiện ích Excel.

Các bạn có thể tải tổng hợp các tiện ích Excel tại đây

 
Hi vọng với những tiện ích Excel hay mà bài viết đã chia sẻ trong bài viết thì các bạn sẽ có thể làm việc với Excel hiệu quả hơn.
Chúc các bạn thành công!

Các bài viết liên quan:

Sách Excel 2016 Formulas – John Wiley & Sons (2016) pdf

Sách Programming Excel with VBA Flavio Morgado pdf

Sách EXCEL TIPS AND TRICKSSách Excel Pivot Tables and Charts pdf

Sách Excel 2019 Power Programming with VBA

Sách VBA Excel 2016 power programming with vba (pdf)

Sách Excel 2013 Power Programming with VBA pdf

Sách Excel 2007 VBA Programmer’s Reference pdf

Sách Excel 2019 For Dummies pdfMicrosoft Excel 2019 All in one for Dummies ( 8 books in one ) pdf

Sách Lean Excel Top Functions Quick Reference Guide with 500 Examples

Add-ins Kutools for Excel Full ActiveFREE 101 Ready Made Excel Templates

Sách Microsoft Excel 2016 Data Analysis and Business ModelingExcel Dashboards and Reports for Dummies

Tải 40 + Code Macro VBA Excel thông dụng và dễ hiểu dành cho các bạn

  1. Loạt các bài viết có liên quan chuyên đề VBA:
  2. VBA Excel Hộp thoại thông báo
  3. VBA Excel Biến trong VBA Excel
  4. VBA Excel sử dụng Scripting Dictionary
  5. VBA Excel Biến trong VBA Excel
  6. VBA Excel Workbook, worksheet
  7. VBA Excel Range, Cells
  8. VBA Excel Hàm trong Excel VBA
  9. VBA Excel Events, Application Object
  10. VBA Excel Function and Sub Excel VBA
  11. VBA Excel Array Mảng trong Excel VBA
  12. VBA Excel FileSystemObject trong Excel VBA
  13. VBA Excel Collection trong Excel VBA
  14. VBA Excel Hashtable trong Excel VBA
  15. VBA Excel Stack trong Excel VBA
  16. VBA Excel Queue trong Excel VBA
  17. VBA Excel SortedList Excel VBA
  18. VBA Excel ArrayList Excel VBA
  19. VBA Excel Ví dụ về Scripting Dictionary
  20. Sách VBA Excel 2016 power programming with vba (pdf)

https://lequocthai.com xin gửi tặng các bạn 40 + Code Macro VBA thông dụng và dễ hiểu. Chi tiết ứng dụng từng code và mã Code trong file gửi kèm theo link dưới.

Các tài liệu có liên quan:

Excel Dashboards and Reports for Dummies

Add-ins Kutools for Excel Full Active

FREE 101 Ready Made Excel Templates

Sách Lean Excel Top Functions Quick Reference Guide with 500 Examples

Sách EXCEL TIPS AND TRICKS

Sách Excel 2007 VBA Programmer’s Reference pdf

Sách Excel Pivot Tables and Charts pdf

Sách Programming Excel with VBA Flavio Morgado pdf

Tải 40 + Code Macro VBA Excel

DI CHUYỂN TRANG TÍNH EXCEL TRỰC TUYẾN, CHIA SẺ, NHÚNG MÃ TRÊN TRANG WEB VÀ LÀM CHÚNG CÓ KHẢ NĂNG TƯƠNG TÁC

Ngày nay khi đa số mọi người đã chuyển sang lưu trữ đám mây, vậy tại sao chúng ta không làm theo? Các công nghệ mới trong chia sẻ dữ liệu Excel trực tuyến là phương pháp đơn giản và dễ sử dụng.

Với sự nở rộ của Excel Online, bạn không còn cần mã HTML rườm rà để xuất các bảng tính lên web. Chỉ cần lưu bảng tính trực tuyến và truy cập nó từ bất cứ nơi nào, chia sẻ với người dùng khác và làm việc chung trên cùng một trang. Với Excel Online, bạn cũng có thể dễ dàng nhúng bảng tính trên một trang web hoặc blog và để cho người truy cập tương tác với nó và tìm kiếm thông tin.

Cách di chuyển bảng tính Excel 2013 trực tuyến

Nếu bạn là người mới sử dụng đám mây nói chung và Excel Online nói riêng, cách dễ nhất để bắt đầu là chia sẻ bảng tính hiện có của bạn bằng cách sử dụng giao diện quen thuộc của Excel.

Tất cả các bảng tính Excel trực tuyến được lưu trữ trên dịch vụ web OneDrive (trước đây là SkyDrive). Như bạn biết, lưu trữ trực tuyến này lúc đầu riêng biệt, nhưng bây giờ nó được tích hợp trong Microsoft Excel như là một tùy chọn dễ dàng truy cập. Ngoài ra, những người được bạn mời, ví dụ những người mà bạn đang chia sẻ bảng tính với họ, cũng không còn cần một tài khoản Microsoft để xem và chỉnh sửa các tệp Excel bạn đã chia sẻ.

Nếu bạn chưa có tài khoản OneDrive, bạn có thể đăng ký ngay. Rất dễ dàng, miễn phí và và cũng cần thiết vì hầu hết các ứng dụng Office 2013 và 2016, không chỉ Excel, đều hỗ trợ OneDrive. Khi bạn đã đăng nhập, hãy thực hiện theo các bước sau.

  1. Đăng nhập vào tài khoản Microsoft của bạn

Phải chắc chắn bạn cũng đăng nhập tài khoản Microsoft. Trên bảng tính Excel, hãy nhìn vào góc trên cùng bên phải. Nếu bạn thấy tên và ảnh của mình ở đó, bạn có thể bỏ qua bước này, nếu không hãy nhấp vào liên kết Sign in.

Excel sẽ hiển thị một thông báo yêu cầu xác nhận rằng bạn thực sự muốn cho phép Office kết nối với Internet. Nhấp vào yes , sau đó nhập tài khoản Windows Live của bạn.

  1. Lưu bảng tính Excel vào đám mây

Để an toàn, kiểm tra lại xem chính xác bảng tính nào mà bạn muốn chia sẻ. Trong ví dụ này, tôi sẽ chia sẻ một Holiday Gift List để các thành viên gia đình và bạn bè của tôi có thể xem nó và đóng góp.

Ở bảng tính đang mở, chuyển hướng đến tab FIle , nhấp vào Share trong ngăn bên trái. Invite People là lựa chọn mặc định, bạn bấm Save To Cloud trong khung bên phải.

Sau đó chọn vị trí đám mây để lưu tệp Excel của bạn. OneDrive là tùy chọn đầu tiên theo mặc định, và bạn cần chọn thư mục cần lưu ở ngăn bên trái.

Lưu ý: Nếu bạn không nhìn thấy tùy chọn OneDrive, thì bạn không có tài khoản OneDrive hoặc bạn chưa đăng nhập.

Tôi đã tạo một thư mục Gift Planner và nó sẽ hiển thị trong danh sách Recent Folders . Bạn có thể chọn bất kỳ thư mục nào khác bằng cách nhấp vào nút Browse bên dưới danh sách  Recent Folders hoặc tạo một thư mục mới theo cách thông thường bằng cách nhấp chuột phải vào bất kỳ nơi nào trong phần bên phải của hộp thoại Save As và chọn New> Folder. Khi đã có thư mục thích hợp, nhấp vào nút Save.

  1. Chia sẻ bảng tính bạn đã lưu

Bảng tính Excel của bạn đã được đưa lên mạng và bạn có thể xem nó trên One Drive. Nếu bạn muốn chia sẻ bảng tính trực tuyến với người khác, bạn chỉ cần làm thêm một bước nữa – chọn một trong các tùy chọn sau trong Excel 2013 và 2016:

(1)Invite People  (mặc định). Chỉ cần nhập địa chỉ email của người mà bạn muốn chia sẻ bảng tính Excel. Khi bạn nhập, Excel sẽ tự động so sánh đầu vào của bạn với tên và địa chỉ trong Danh bạ và hiển thị một danh sách tùy chọn để bạn lựa chọn. Nếu bạn muốn thêm nhiều địa chỉ, gõ dấu chấm phẩy như bình thường để tách phần tên. Ngoài ra, bạn có thể nhấp vào biểu tượng Search Address Book để tìm địa chỉ liên lạc trong danh bạ trực tuyến của bạn.

Bạn có thể cài đặt viewing or editing permissions (cho phép chỉnh sửa hoặc chỉ xem) cho các địa chỉ liên hệ bằng cách chọn tùy chọn tương ứng từ danh sách ở bên phải. Nếu bạn thêm nhiều người, quyền đó sẽ được áp dụng cho tất cả, nhưng bạn có thể thay đổi quyền cho từng người cụ thể sau đó.

Bạn cũng có thể thêm personal message (lời nhắn riêng) cho lời mời. Nếu bạn không nhập gì, Excel sẽ tự thêm một lời mời chung chung cho bạn.

Cuối cùng, bạn có thể chọn yêu cầu người dùng phải đăng nhập vào tài khoản Windows Live của họ trước khi họ có thể truy cập bảng tính trực tuyến của bạn. Tôi không thấy việc này cần thiết, nhưng tùy bạn.

Khi hoàn tất, nhấp vào nút Share . Mỗi địa chỉ liên hệ sẽ nhận được một email có chứa liên kết đến tệp bạn đã chia sẻ. Họ chỉ cần nhấp vào liên kết để mở bảng tính Excel trực tuyến, trên OneDrive.

Trước khi nhấp vào nút Share, Excel sẽ hiển thị danh sách các địa chỉ mà bạn chia sẻ tệp. Nếu bạn muốn xóa một người nào đó khỏi danh sách hoặc chỉnh sửa quyền, hãy nhấp chuột phải vào tên và chọn tùy chọn tương ứng.

(2)Sharing Link giúp bạn chia sẻ bảng tính trực tuyến với nhiều người nhanh hơn bằng cách gửi cho họ một địa chỉ liên kết tới file của bạn, ví dụ như sử dụng Outlook hoặc danh sách gửi thư. Bạn chọn tùy chọn Get a Sharing Link trong ngăn bên trái và lấy View Link hoặc Edit Link hoặc cả hai trong ngăn bên phải.

(3)Post to Social Networks (đăng lên mạng xã hội). Có lẽ không cần nói thêm nhiều về tùy chọn này, nhưng tôi cũng có vài nhận xét sau. Nếu bạn đã chọn tùy chọn chia sẻ này nhưng không thấy danh sách các mạng xã hội ở khung bên phải, hãy nhấp vào Connect social networks và bạn sẽ có thể chọn Facebook, Twitter, Google, LinkedIn và các tài khoản khác.

(4)Email. Nếu bạn muốn gửi bảng tính Excel của bạn dưới dạng tệp đính kèm (tệp Excel thông thường, PDF hoặc XPS) cũng như fax internet, hãy chọn Email ở bên trái và chọn tùy chọn thích hợp ở bên phải.

Mẹo: Nếu bạn muốn giới hạn các vùng trong bảng tính Excel mà người dùng khác có thể xem, hãy chuyển sang File> Info và nhấp vào Browser View Options . Bạn sẽ có thể chọn trang và các mục được đặt tên bạn muốn hiển thị trên Web.

Thế là xong! Bảng tính Excel của bạn đã trực tuyến và được chia sẻ với những người dùng khác mà bạn chọn. Và thậm chí nếu bạn không chia sẻ bất kỳ ai, thì đây là một cách dễ dàng để truy cập từ bất cứ đâu, bất kể bạn đang ở văn phòng, làm việc ở nhà hay đang đi du lịch.

Làm việc với bảng tính trong Excel Online

Nếu bạn là một người thành thạo lưu trữ đám mây, hẳn bạn sẽ không gặp bất kỳ vấn đề nào khi làm chủ Excel Online.

Làm thế nào để tạo một bảng tính trong Excel Online

Để tạo một bảng tính mới, nhấp vào một mũi tên nhỏ bên cạnh Create và chọn Excel workbook từ danh sách.

Để đổi tên bảng tính trực tuyến của bạn, hãy nhấp vào tên tệp mặc định và nhập tên mới.

Để tải bảng tính hiện có lên lên Excel Online, hãy nhấp vào nút Upload  trên thanh công cụ OneDrive và chọn tệp trên máy tính của bạn.

Làm thế nào để chỉnh sửa bảng tính trong Excel Online

Một khi bạn đã mở bảng tính trên Excel Online, bạn có thể làm việc với nó bằng cách sử dụng Excel Web App gần giống như cách bạn sử dụng Excel bình thường: nhập dữ liệu, sắp xếp và lọc, tính toán bằng công thức và trình bày dữ liệu trực quan bằng biểu đồ.

Chỉ có một sự khác biệt đáng kể giữa bảng tính Excel trên web và máy tính. Excel Online không có nút Save vì nó sẽ tự động lưu bảng tính của bạn. Nếu bạn cần thay đổi một cái gì đó, hãy nhấn Ctrl + Z và Ctrl + Y để hoàn tác hoặc làm lại. Hoặc bạn có thể sử dụng các nút Undo / Redo trên Home Tab > Undo group.

Nếu bạn đang cố chỉnh sửa một số dữ liệu nhưng không được, rất có thể bạn đang ở trong chế độ chỉ xem. Để chuyển sang chế độ chỉnh sửa, nhấp Edit Workbook > Edit in Excel Web App và thực hiện các thay đổi nhanh chóng trực tiếp trong trình duyệt web của bạn. Để có thêm các tính năng phân tích dữ liệu nâng cao hoặc kết nối với nguồn dữ liệu bên ngoài, hãy nhấp vào  Edit in Excel để chuyển sang phiên bản Excel trên máy tính.

Khi bạn lưu bảng tính trong Excel, nó sẽ được lưu lại nơi bạn đã tạo nó, tức là trong OneDrive.

Mẹo: Nếu bạn muốn thực hiện thay đổi nhanh chóng nhiều bảng tính, cách nhanh nhất là mở danh sách các tệp trên OneDrive của bạn, tìm bảng tính bạn muốn, nhấp chuột phải vào nó và chọn hành động cần thiết.

Cách chia sẻ bảng tính Excel trực tuyến với người dùng khác

Để chia sẻ bảng tính Excel trên web, hãy nhấp Share > Share with People và sau đó chọn một trong hai cách sau:

  • Invite People và nhập địa chỉ email của những người mà bạn muốn chia sẻ bảng tính hoặc
  • Get a link để dán nó vào một tin nhắn email, trang web hoặc trang mạng xã hội

Bạn cũng có thể chọn cho phép xem hoặc chỉnh sửa các địa chỉ liên hệ.

Khi nhiều người đang chỉnh sửa bảng tính cùng một lúc, Excel Online hiển thị sự hiện diện của họ và các cập nhật ngay lập tức, miễn là mọi người đang chỉnh sửa trong Excel Online, không phải Excel trong máy. Khi bạn nhấp vào một mũi tên nhỏ bên cạnh tên của người đó ở góc trên cùng bên phải của bảng tính của bạn, thậm chí bạn có thể xem chính xác ô nào đang được chỉnh sửa vào lúc này.

Cách khoá các ô nhất định để chỉnh sửa trong một bảng tính được chia sẻ

Nếu bạn chia sẻ trực tuyến với nhiều người, bạn có thể giới hạn quyền chỉnh sửa cho các thành viên trong nhóm đối với các ô, hàng hoặc cột nhất định trong tài liệu Excel trên OneDrive. Để làm điều này, bạn cần phải chọn phạm vi mà bạn cho phép chỉnh sửa trong Excel của máy tính và sau đó bảo vệ bảng tính.

  1. Chọn phạm vi ô mà người dùng có thể chỉnh sửa, vào tab Review và nhấp vào “Allow Users to Edit Ranges” ” trong nhóm Changes.
  2. Trong hộp thoại Allow Users to Edit Ranges, nhấp vào nút New , xác minh rằng phạm vi chính xác và nhấp vào Protect Sheet. Nếu bạn muốn cho phép người dùng chỉnh sửa nhiều dãy, hãy nhấp vào nút New …một lần nữa.
  3. Nhập password hai lần và tải bảng tính được bảo vệ lên OneDrive

Sử dụng Excel Web App để nhúng bảng tính trực tuyến lên trang web hoặc blog

Nếu bạn muốn xuất bản bảng tính Excel của bạn trên trang web hoặc blog, hãy thực hiện 3 bước này trong Excel Web App:

  1. Với bảng tính mở trong Excel Online, nhấp vào Share > Embed,, và sau đó nhấp vào nút Generate.
    2. Tiếp theo, bạn quyết định chính xác cách bảng tính của mình xuất hiện trên web. Có những tùy chọn sau:
  • Phần What to show. Nó cho phép bạn nhúng toàn bộ bảng tính hoặc một phần chẳng hạn một dãy ô, bảng, vv
  • Appearance. Trong phần này, bạn có thể tuỳ chỉnh sự xuất hiện của bảng tính (hiển thị hoặc giấu các dòng lưới và tiêu đề cột, hay liên kết tải xuống).
  • Interaction. Cho phép hoặc không cho phép người dùng tương tác với bảng tính của bạn – sắp xếp, lọc và nhập vào ô. Nếu bạn cho phép nhập, những thay đổi mà người khác làm trong các ô trên web sẽ không được lưu trong bảng tính gốc. Nếu bạn muốn chọn một ô nào đó khi trang web mở, hãy chọn hộp kiểm ” Always start with this cell selected” và sau đó nhấp vào ô mà bạn muốn hiển thị trong phần xem trước.
  • Kích thước. Nhập chiều rộng và chiều cao cho trình xem bảng tính, tính bằng pixel. Để xem trước bảng tính sẽ trông như thế nào với kích thước bạn đã chọn hãy nhấp vào liên kết ” View actual size “ở đầu bản xem trước. Chỉ cần lưu ý là bạn được  chỉ định tối thiểu 200 x 100 pixel và tối đa là 640 x 655 pixel. Nếu bạn muốn sử dụng kích thước khác ngoài các giới hạn này, bạn phải sửa đổi mã bằng bất kỳ trình chỉnh sửa HTML nào hoặc trực tiếp trên trang web hoặc blog của mình.
  1. Cuối cùng, bạn nhấp vào liên kết Copy  bên dưới phần Embed code và dán mã HTML (hoặc đánh dấu JavaScript) vào blog hoặc trang web của bạn.

Lưu ý: Mã nhúng là một iframe, vì vậy cần đảm bảo rằng trang web của bạn hỗ trợ iframes và trình chỉnh sửa blog cho phép đăng bài với iframe.

 

VBA Excel ArrayList Excel VBA

ArrayList là một thư viện nằm trong “System.Collections” của .NET Framework. Cho phép lưu trữ dữ liệu (items) có kích cỡ lớn, kích thước của mảng lưu trữ tự động tăng theo yêu cầu, cho phép truy xuất tới các items, sắp xếp các items đã nạp vào ArrayLis.
Yêu cầu: Hệ thống phải cài đặt .NET Framework v1.1 trở lên.

1. Khai báo ArrayList

1.1. Kiểu khai báo sớm

(Không có Tooltip khi gọi ArrayList, phải thiết lập trong Tools/References)
– Trong cửa sổ VBA, Tools menu, References.
– Tìm và check vào mục “mscorlib.dll” trong cửa sổ References – VBAProject.
Khai báo trong code:

Dim oArrList As New ArrayList
1.2. Kiểu khai báo muộn

(Không có Tooltip khi gọi ArrayList, không cần thiết lập trong Tools/References).
Khai báo trong code: 

Dim oArrList As Object
Set oArrList = CreateObject("System.Collections.ArrayList")
2. Các thuộc tính

2.1. Count

oArrList.Count

Trả về số lượng phần tử (Items) thực sự tồn tại trong ArrayList.
Ví dụ:

Sub CountProperty()
    'oArrList.Count'
    Dim oArrList As Object, i As Long, arr
    Set oArrList = CreateObject("System.Collections.ArrayList")
    arr = Array(20, 50)
    For i = 1 To 5
        oArrList.Add i
    Next i
    oArrList.Add arr
    MsgBox oArrList.Count    '6'
End Sub
2.2. Capacity
oArrList.Capacity

Trả về số lượng các phần tử hoặc đặt (thiết lập) số lượng các phần tử mà ArrayList có thể lưu trữ.
+ Các lỗi xảy ra đặt số lượng các phần tử cho ArrayList:
– Khi giá trị của Capacity nhỏ hơn số lượng phần từ đã tồn tại trong ArrayList (count).
– Khi giá trị của Capacity trả về ArrayList có kích thước vượt dung lượng bộ nhớ có thể dùng của hệ thống (OutOfMemoryException).
+ Capacity luôn luôn lớn hơn hoặc bằng Count. Nếu Count vượt quá Capacity trong khi thêm các phần tử, Capacity  sẽ tự động tăng lên bằng cách tái phân bổ lại mảng nội bộ trước khi sao chép các phần tử cũ và thêm các phần tử mới.
+ Có thể giảm Capacity bằng cách dùng phương thức TrimToSize hoặc bằng cách thiết lập giá trị Capacity cụ thể (nhưng phải đảm bảo >=  Count, nếu không sẽ xảy ra lỗi). Khi giá trị của Capacity được xác định cụ thể, mảng nội bộ cũng được phân bổ lại để đáp ứng dung lượng đã xác định.
Ví dụ:

Sub CapacityProperty()
    'oArrList.Capacity'
    Dim oArrList As Object, vCnt As Long, vCty As Long
    Set oArrList = CreateObject("System.Collections.ArrayList")
    For i = 1 To 5
        oArrList.Add i
    Next i
    vCnt = oArrList.Count       '5'
    vCty = oArrList.Capacity    '8'
    oArrList.Capacity = 5
    MsgBox oArrList.Capacity    '5'
End Sub
2.3. Item
oArrList.Item(Index)

Trả về giá trị của Item theo chỉ số (index) chỉ định trong ArrayList, hoặc gán giá trị mới cho Item theo chỉ số của Item đó.
Lưu ý: Chỉ số (index) của Item có giá trị từ 0 tới Count-1.
Ví dụ:

Sub ItemProperty()
    'oArrList.Item(Index)     -FirstIndex = 0'
    Dim oArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    For i = 1 To 5
        oArrList.Add "Value-" & i
    Next i
    oArrList.Item(4) = 100
    MsgBox oArrList.Item(0) 'Value-1'
    MsgBox oArrList.Item(4) '100'
End Sub

3. Các phương thức

3.1. Add

oArrayList.Add Item

Thêm một Item vào vị trí cuối cùng (end) của ArrayList.
Item có thể là một trị đơn, hoặc một mảng (array).
Item nhận kiểu dữ liệu bất kỳ (kiểu số hoặc chuỗi), giá trị của Items có thể trùng nhau.
Chỉ số đầu tiên của Item trong ArrayList bằng 0, cho dù Option Base 1.
Ví dụ:

Sub AddMethod()
    'oArrList.Add Item   -Adds a item to the end of the ArrayList'
        'Item: number, string, array'
        'First index = 0'
    Dim oArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    Dim Arr1, Arr2(1 To 2, 1 To 1), itemArr, itemList
    Arr1 = Array(10, 12)
    Arr2(1, 1) = 50
    Arr2(2, 1) = "Example"
    'Adds items to oArrList:'
    oArrList.Add 20
    oArrList.Add "TextA"
    oArrList.Add Arr1
    oArrList.Add Arr2
    
    For Each itemList In oArrList
        If IsArray(itemList) = True Then
            For Each itemArr In itemList
                MsgBox itemArr
            Next itemArr
        Else
            MsgBox itemList
        End If
    Next itemList
    'Result: 20, "TextA", 10, 12, 50 , "Example" '
End Sub
3.2. AddRange
oArrList.AddRange ICollection

Thêm một đối tượng ICollection vào vị trí cuối cùng của ArrayList. 
Icollection: Có thể là Stack, Queue, Hashtable, SortList, ArrayList
Ví dụ:

Sub AddRangeMethod()
    'Adds the elements of an ICollection to the end of the ArrayList.'
    'oArrList.AddRange ICollection'
    Dim oArrList As Object, ArList1 As Object, itemList
    Set oArrList = CreateObject("System.Collections.ArrayList")
    Set ArList1 = CreateObject("System.Collections.ArrayList")
    ArList1.Add 10
    ArList1.Add 20
    oArrList.Addrange ArList1
    For Each itemList In oArrList
        MsgBox itemList
    Next
    'Result: 10, 20'
End Sub
3.3. Clear
oArrayList.Clear

Xóa toàn bộ các Items trong ArrayList.
Ví dụ:

Sub ClearMethod()
    'oArrList.Clear'
    Dim oArrList As Object, i As Long
    Set oArrList = CreateObject("System.Collections.ArrayList")
    For i = 1 To 5
        oArrList.Add i
    Next i
    oArrList.Clear
    MsgBox oArrList.Count    '0'
End Sub
3.4. Clone
oArrayList.Clone

Tạo một bản sao từ ArrayList đã có.
Ví dụ:

Sub CloneMethod()
    'oArrList.Clone'
    Dim oArrList As Object, i As Long, newArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    For i = 1 To 5
        oArrList.Add i
    Next i
    Set newArrList = oArrList.Clone
    MsgBox newArrList.Count '5'
End Sub
3.5. Contains
oArrList.Contains(Item)

Kiểm tra sự tồn tại của một Item trong ArrayList. Trả về True nếu Item đã tồn tại trong ArrayList, ngược lại trả về False.
Ví dụ:

Sub ContainsMethod()
    'oArrList.Contains(Item)'
    Dim oArrList As Object, i As Long, valItem
    Set oArrList = CreateObject("System.Collections.ArrayList")
    For i = 1 To 5
        oArrList.Add "Value-" & i
    Next i
    valItem = oArrList(0)
    MsgBox oArrList.Contains(valItem)   'True'
End Sub
3.6. IndexOf
oArrList.IndexOf(Item, index)

Trả về vị trí đầu tiên tìm thấy Item chỉ định, dò tìm từ vị trí Index chỉ định so với vị trí đầu tiên trong ArrayList (FirstIndex = 0).
Ví dụ:

Sub IndexOf()
    'oArrList.IndexOf(Item, index)'
    Dim oArrList As Object, i As Long
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-3"
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-1"
    i = oArrList.IndexOf("Value-1", 0)  'i=0'
    i = oArrList.IndexOf("Value-1", 1)  'i=3'
    i = oArrList.IndexOf("Value-1", 4)  'i=5'
End Sub
3.7. Insert
oArrList.Insert Index, Item

Chèn thêm một Item vào ArrayList theo vị trí (Index) chỉ định.
Index: Nhận giá trị từ 0 tới oArrList.Count. Gặp lỗi khi Index < 0 hoặc Index > Count.
Ví dụ:

Sub InsertMethod()
    'oArrList.Insert Index, Item'
    Dim oArrList As Object, i As Long
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Insert 0, 100
    oArrList.Insert 1, 200
    For i = 1 To 5
        oArrList.Add i
    Next i
    oArrList.Insert 4, 30
    oArrList.Insert oArrList.Count, 50
    MsgBox oArrList.Item(oArrList.Count - 1)    '50'
End Sub
3.8. InsertRange
oArrList.InsertRange Index, ICollection

Chèn thêm một đối tượng ICollection vào ArrayList theo vị trí (Index) chỉ định.
Index: Nhận giá trị từ 0 tới Count.
Ví dụ:

Sub InsertRangeMethod()
    'Inserts the elements of an ICollection into the ArrayList at the specified index.'
    'oArrList.InsertRange Index, ICollection'
    Dim oArrList As Object, ArList1 As Object, itemList
    Set oArrList = CreateObject("System.Collections.ArrayList")
    Set ArList1 = CreateObject("System.Collections.ArrayList")
    ArList1.Add 10
    ArList1.Add 20
    oArrList.Add "Item1"
    oArrList.InsertRange 1, ArList1
    For Each itemList In oArrList
        MsgBox itemList
    Next
    'Result: "Item1", 10, 20'
End Sub
3.9. LastIndexOf
oArrList.LastIndexOf(Item)

Trả về vị trí (Index) cuối cùng của Item tìm thấy trong ArrayList.
Ví dụ:

Sub LastIndexOfMethod()
    'oArrList.LastIndexOf(Item)'
    Dim oArrList As Object, i As Long
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-3"
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-1"
    i = oArrList.LastIndexOf("Value-1") 'i=5'
End Sub
3.10. Remove
oArrList.Remove Item

Xóa một Item chỉ định trong ArrayList. Nếu Item chưa tồn tại trong ArrayList thì không xảy ra lỗi.
Nếu Item có nhiều giá trị như nhau thì sẽ xóa Item xuất hiện đầu tiên.
Ví dụ:

Sub RemoveMethod()
    'oArrList.Remove Item'
    Dim oArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-3"
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-3"
    oArrList.Remove "Value-1"
    MsgBox oArrList.Item(0)     ' "Value-2" '
End Sub
3.11. RemoveAt
oArrList.RemoveAt Index

Xóa một Item trong ArrayList theo chỉ số Index chỉ định.
Index: Có giá trị từ 0 tới Count-1.
Ví dụ:

Sub RemoveAtMethod()
    'oArrList.RemoveAt Index'
    Dim oArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-3"
    oArrList.Add "Value-4"
    oArrList.RemoveAt  2
    MsgBox oArrList.Item(2)     ' "Value-4" '
End Sub
3.12. RemoveRange
oArrList.RemoveRange IndexFrom, NumberOfItems

Xóa các Items có trong ArrayList từ vị trí chỉ định, số lượng Items cần xóa được chỉ định.
IndexFrom: Vị trí Item đầu tiên cần xóa. Index có giá trị từ 0 tới Count-1.
NumberOfItems: Số Item cần xóa. NumberOfItems có giá trị từ 0 tới (Count – Index).
Ví dụ:

Sub RemoveRangeMethod()
    'oArrList.RemoveRange IndexFrom, NumberOfItems '
    Dim oArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-3"
    oArrList.Add "Value-4"
    oArrList.RemoveRange 0, 2
    MsgBox oArrList.Item(0)     ' "Value-3" '
End Sub
3.13. Reverse 
oArrList.Reverse

Đảo ngược vị trí toàn bộ các Items có trong ArrayList.
Ví dụ:

Sub ReverseMethod()
    'oArrList.Reverse '
    Dim oArrList As Object, i As Long
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    oArrList.Add "Value-3"
    oArrList.Add "Value-4"
    oArrList.Reverse
    For i = 0 To oArrList.Count - 1
        MsgBox oArrList.Item(i) ' "Value-4","Value-3","Value-2","Value-1"   '
    Next i
End Sub
3.14. Sort
oArrList.Sort

Sắp xếp các Items trong ArrayList theo thứ tự A-Z.
Ví dụ:

Sub SortMethod()
    'oArrList.Sort '
    Dim oArrList As Object, i As Long
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-3"
    oArrList.Add "Value-2"
    oArrList.Add "Value-4"
    oArrList.Add "Value-0"
    oArrList.Sort
    For i = 0 To oArrList.Count - 1
        MsgBox oArrList.Item(i) '"Value-0", "Value-1","Value-2","Value-3","Value-4"'
    Next i
End Sub
3.15. ToArray
oArrList.ToArray

Sao chép các Item trong ArrayList vào một mảng (Array). Mảng trả về là mảng một chiều, chỉ số cận dưới của mảng luôn băng 0, cho dù thiết lập Option Base 1.
Ví dụ:

Sub ToArrayMethod()
    'oArrList.ToArray '
    Dim oArrList As Object, Arr()
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add Array(15, 40)
    oArrList.Add 200
    Arr = oArrList.ToArray
End Sub
3.16. ToString
oArrList.ToString

Trả về tên đối tượng hiện hành, tức là “System.Collections.ArrayList”.
Ví dụ:

Sub ToStringMethod()
    'oArrList.ToString '
    Dim oArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    MsgBox oArrList.ToString        '"System.Collections.ArrayList"'
End Sub
3.17. TrimToSize
oArrList.TrimToSize

Sử dụng để giảm vùng nhớ của Collection nếu không có Item mới sẽ được thêm vào.
Khi sử dụng phương thức TrimToSize thì Capacity = Count.

Để thiết lập lại ArrayList về trạng thái ban đầu, ta sử dụng phương thức Clear trước khi gọi TrimToSize. Việc cắt một ArrayList trống sẽ đặt Capacity của ArrayList về giá trị mặc định.
Ví dụ:

Sub TrimToSizeMethod()
    'oArrList.TrimToSize '
    Dim oArrList As Object
    Set oArrList = CreateObject("System.Collections.ArrayList")
    oArrList.Add "Value-1"
    oArrList.Add "Value-2"
    MsgBox "Count = " & oArrList.Count & vbNewLine & _
            "Capacity = " & oArrList.Capacity   '2-4'
    oArrList.TrimToSize
    MsgBox "Count = " & oArrList.Count & vbNewLine & _
            "Capacity = " & oArrList.Capacity   '2-2'
End Sub

4. Ứng dụng

Lọc loại trùng, sort mảng, tạo số ngẫu nhiên không trùng…

4.1. Một số hàm

Hàm lọc loại trùng 1 cột của Range

'// Loc loai trung mot cot'
Function UniqueColumnArrayList(ByVal Rng As Range) As Variant
    If Rng.Count = 1 Then UniqueColumnArrayList = Rng.Value: Exit Function
    Dim oArrList As Object, i As Long, j As Long, Arr(), Result(), sKey As Variant
    Set oArrList = CreateObject("System.Collections.ArrayList")
    Arr = Rng.Value
    For i = LBound(Arr, 1) To UBound(Arr, 1)
        sKey = Arr(i, 1)
        If sKey <> "" Then
            If oArrList.Contains(sKey) = False Then
                oArrList.Add sKey
                j = j + 1
                ReDim Preserve Result(1 To j)
                Result(j) = sKey
            End If
        End If
    Next i
    UniqueColumnArrayList = Result
End Function

Hàm Sort mảng 1 chiều

'// Sort mang 1 chieu'
Function Sort1DArrayList(ByVal Source1D, Optional ByVal IsNumber As Boolean = True, _
                        Optional ByVal Order As Boolean = True) As Variant
'IsNumber: True - Du lieu kieu so, False - Du lieu kieu chuoi'
'Order: True - Sort A-Z, False - Sort Z-A'
    If IsArray(Source1D) = False Then Exit Function
    Dim oArrList As Object, itemArr
    Set oArrList = CreateObject("System.Collections.ArrayList")
    For Each itemArr In Source1D
        If IsNumber = False Then itemArr = CStr(itemArr)
        oArrList.Add itemArr
    Next itemArr
    oArrList.Sort
    If Order = False Then oArrList.Reverse
    Sort1DArrayList = oArrList.ToArray
End Function

Tải file ví dụ: ArrayList

VBA Excel SortedList Excel VBA

  1. Loạt các bài viết có liên quan chuyên đề VBA:
  2. VBA Excel Hộp thoại thông báo
  3. VBA Excel Biến trong VBA Excel
  4. VBA Excel sử dụng Scripting Dictionary
  5. VBA Excel Biến trong VBA Excel
  6. VBA Excel Workbook, worksheet
  7. VBA Excel Range, Cells
  8. VBA Excel Hàm trong Excel VBA
  9. VBA Excel Events, Application Object
  10. VBA Excel Function and Sub Excel VBA
  11. VBA Excel Array Mảng trong Excel VBA
  12. VBA Excel FileSystemObject trong Excel VBA
  13. VBA Excel Collection trong Excel VBA
  14. VBA Excel Hashtable trong Excel VBA
  15. VBA Excel Stack trong Excel VBA
  16. VBA Excel Queue trong Excel VBA
  17. VBA Excel SortedList Excel VBA
  18. VBA Excel ArrayList Excel VBA
  19. VBA Excel Ví dụ về Scripting Dictionary
  20. Sách VBA Excel 2016 power programming with vba (pdf)

SortedList là một thư viện nằm trong “System.Collections” của .NET Framework.
SortedList lưu trữ các Items theo Keys tương ứng thành cặp, được sắp xếp theo các Keys, cho phép truy cập tới Item theo Key hoặc chỉ mục (index) ứng với Item đó.

Yêu cầu: Hệ thống phải cài đặt .NET Framework v1.1 trở lên.

1. Khai báo SortedList

 

1.1. Kiểu khai báo sớm

(Không có Tooltip khi gọi SortedList, phải thiết lập trong Tools/References)
– Trong cửa sổ VBA, Tools menu, References.
– Tìm và check vào mục “mscorlib.dll” trong cửa sổ References – VBAProject.
Khai báo trong code:

Dim oSList  As New SortedList
1.2. Kiểu khai báo muộn 

(Không có Tooltip khi gọi SortedList, không cần thiết lập trong Tools/References).
Khai báo trong code: 

Dim oSList As Object
Set oSList = CreateObject("System.Collections.SortedList")

2. Các thuộc tính

 

2.1. Count

oSList.Count

Trả về số lượng phần tử (Items) thực sự tồn tại trong SortedList.
Ví dụ:

Sub CountProperty()
    'oSList.Count'
    Dim oSList As Object, i As Long
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, i
    Next i
    oSList.Add "Key-", Array(2, 5)
    MsgBox oSList.Count    '6'
End Sub
2.2. Capacity
oSList.Capacity

Trả về số lượng các phần tử hoặc đặt (thiết lập) số lượng các phần tử mà SortedList có thể lưu trữ.
+ Các lỗi xảy ra đặt số lượng các phần tử cho SortedList:
– Khi giá trị của Capacity nhỏ hơn số lượng phần từ đã tồn tại trong SortedList (count).
– Khi giá trị của Capacity trả về SortedList có kích thước vượt dung lượng bộ nhớ có thể dùng của hệ thống (OutOfMemoryException).
+ Capacity luôn luôn lớn hơn hoặc bằng Count. Nếu Count vượt quá Capacity trong khi thêm các phần tử, Capacity  sẽ tự động tăng lên bằng cách tái phân bổ lại mảng nội bộ trước khi sao chép các phần tử cũ và thêm các phần tử mới.
+ Có thể giảm Capacity bằng cách dùng phương thức TrimToSize hoặc bằng cách thiết lập giá trị Capacity cụ thể (nhưng phải đảm bảo >=  Count, nếu không sẽ xảy ra lỗi). Khi giá trị của Capacity được xác định cụ thể, mảng nội bộ cũng được phân bổ lại để đáp ứng dung lượng đã xác định.
Ví dụ:

Sub CapacityProperty()
    'oSList.Capacity'
    Dim oSList As Object, vCnt As Long, vCty As Long, i As Long
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, i
    Next i
    vCnt = oSList.Count       '5'
    vCty = oSList.capacity    '16'
    oSList.capacity = 5
    MsgBox oSList.capacity    '5'
End Sub
2.3. Item
oSList.Item(Key)
'Hoặc:'
   oSList(Key)

Trả về giá trị của Item theo Key chỉ định trong SortedList, hoặc gán giá trị mới cho Item theo Key của Item đó.
– Nếu gán một giá trị cho một Item theo một Key chưa tồn tại trong SortedList thì SortedList tự động thêm Key đó, và Item đó có giá trị vừa đưa vào. 
Ví dụ:

Sub ItemProperty()
    'oSList.Item(Key) '
    'oSList(Key) '
    Dim oSList As Object, i As Long
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, ""
    Next i
    oSList.Item("Key-1") = 100
    MsgBox oSList("Key-1") '100'
    oSList("KeyA") = 20
    MsgBox oSList.Count     '6'
End Sub

3. Các phương thức

 

3.1. Add

oSList.Add Key, Item

Thêm một Item vào SortedList theo Key chỉ định.
Key: Phải duy nhất trong SortedList và khác null. Key nhận kiểu dữ liệu hoặc là số hoặc là chuỗi. 
Item: Nhận kiểu dữ liệu bất kỳ (kiểu số hoặc chuỗi, null), giá trị của Items có thể trùng nhau,có thể là một trị đơn, hoặc một mảng (array).
Chỉ số đầu tiên của Key/ Item trong SortedList bằng 0.
Khi một Item được thêm vào, nó được chèn vào SortedList theo thứ tự sắp xếp chính xác theo Keys, và chỉ mục (Index) của nó được thiết lập tương ứng phù hợp theo Key.

Ví dụ:

Sub AddMethod()
    'oSList.Add Key, Item '
        'Key: OR number OR string, <>null'
        'Item: number, string, array'
        'First index = 0    '
    Dim oSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add "5", 20
    oSList.Add "KeyA", "Item2"
    oSList.Add "KeyB", ""
    oSList.Add "KeyC", Array(12, 40)
End Sub
3.2. Clear
oSortedList.Clear

Xóa toàn bộ các Items trong SortedList.
Ví dụ:

Sub ClearMethod()
    'oSList.Clear'
    Dim oSList As Object, i As Long
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add i, ""
    Next i
    oSList.Clear
    MsgBox oSList.Count    '0'
End Sub
3.3. Clone
oSortedList.Clone

Tạo một bản sao từ SortedList đã có.
Ví dụ:

Sub CloneMethod()
    'oSList.Clone'
    Dim oSList As Object, i As Long, newSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add i, ""
    Next i
    Set newSList = oSList.Clone
    MsgBox newSList.Count   '5'
End Sub
3.4. Contains / ContainsKey
 oSList.Contains(Key)
 oSList.ContainsKey(Key)

Kiểm tra sự tồn tại của một Key trong SortedList. Trả về True nếu Key đã tồn tại trong SortedList, ngược lại trả về False.
Lưu ý: Key chỉ định kiểm tra phải cùng kiểu dữ liệu (số hoặc chuỗi) với kiểu dữ liệu của Key đã có trong SortedList, nếu không xảy ra lỗi. 
Ví dụ:

Sub ContainsMethod()
    'oSList.Contains(Key)'
    Dim oSList As Object, i As Long, sKey As String
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, i
    Next i
    sKey = "Key-2"
    MsgBox oSList.Contains(sKey)   'True'
End Sub

 

Sub ContainsKeyMethod()
    'oSList.ContainsKey(Key)'
    Dim oSList As Object, i As Long, sKey As String
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, i
    Next i
    sKey = "Key-5"
    MsgBox oSList.ContainsKey(sKey)   'True'
End Sub
3.5. ContainsValue
oSList.ContainsKey(Key)

Kiểm tra sự tồn tại giá trị của một Item trong SortedList. Trả về True nếu giá trị đó đã tồn tại trong SortedList, ngược lại trả về False.
Ví dụ:

Sub ContainsValueMethod()
    'oSList.ContainsKey(Key)'
    Dim oSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add "KeyA", 2
    oSList.Add "KeyB", ""
    oSList.Add "KeyC", "Item3"
    MsgBox oSList.ContainsValue(2)    'True'
    MsgBox oSList.ContainsValue("")   'True'
    MsgBox oSList.ContainsValue("Item4")   'False'
End Sub
3.6. GetByIndex
oSList.GetByIndex(Index)

Trả về giá trị của một Item trong SortedList theo chỉ mục (Index) chỉ định.
Ví dụ:

Sub GetByIndexMethod()
    'oSList.GetByIndex(Index) //Index = 0 : Count-1 / Return: Item'
    Dim oSList As Object, i As Long, sKey
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, "Value-" & i
    Next i
    sKey = oSList.GetByIndex(0)
    MsgBox sKey     '"Value-1"'
End Sub
3.7. GetKey
oSList.GetKey(Index)

Trả về một Key có trong SortedList theo chỉ mục (Index) chỉ định.
Index: Có giá trị từ 0 tới Count-1.
Ví dụ:

Sub GetKeyMethod()
    'oSList.GetKey(Index) //Index = 0 : Count-1 '
    Dim oSList As Object, i As Long, sKey
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, i
    Next i
    sKey = oSList.GetKey(0)
    MsgBox sKey     '"Key-1"'
End Sub
3.8. GetKeyList
oSList.GetKeyList

Trả về một đối tượng IList (System.Collections.IList) chứa toàn bộ Keys có trong SortedList.
Ví dụ:

Sub GetKeyListMethod()
    'oSList.GetKeyList '
    'Return an IList object (System.Collections.IList) containing the keys in the SortedList object.'
    Dim oSList As Object, i As Long, KeyList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, i
    Next i
    Set KeyList = oSList.GetKeyList
    MsgBox KeyList.Item(0)     '"Key-1"'
End Sub
3.9. GetValueList
oSList.GetValueList

Trả về một đối tượng IList (System.Collections.IList) chứa toàn bộ Items có trong SortedList.
Ví dụ:

Sub GetValueListMethod()
    'oSList.GetValueList '
    'Return an IList object (System.Collections.IList) containing the values in the SortedList object.'
    Dim oSList As Object, i As Long, ValueList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    For i = 1 To 5
        oSList.Add "Key-" & i, i
    Next i
    Set ValueList = oSList.GetValueList
    MsgBox ValueList.Item(4)     '5'
End Sub
3.10. IndexOfKey
oSList.IndexOfKey(Key)

Trả về vị trí của Key chỉ định trong SortedList (FirstIndex = 0).
Nếu Key chỉ định không có trong SortedList thì kết quả trả về -1.

Các phần tử trong SortedList được sắp xếp chính xác theo Keys. Khi một phần tử được thêm, nó được chèn vào SortedList theo thứ tự sắp xếp chính xác, và lập chỉ mục (Index) điều chỉnh cho phù hợp. Khi một phần tử được loại bỏ, việc lập chỉ mục cũng điều chỉnh cho phù hợp. Do đó, chỉ mục của cặp Key/ Item cụ thể có thể thay đổi khi các phần tử được thêm vào hoặc xoá khỏi SortedList.
Ví dụ:

Sub IndexOfKeyMethod()
    'oSList.IndexOfKey(Key)
    Dim oSList As Object, idex As Long
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add "1", ""
    oSList.Add "Z", ""
    oSList.Add "A", ""
    idex = oSList.IndexOfKey("1")   'idex=0'
    MsgBox idex
    idex = oSList.IndexOfKey("Z")   'idex=2'
    MsgBox idex
    idex = oSList.IndexOfKey("A")   'idex=1'
    MsgBox idex
End Sub
3.11. IndexOfValue
oSList.IndexOfValue(Item)

Trả về vị trí của Item chỉ định trong SortedList (FirstIndex = 0).
Nếu Item chỉ định không có trong SortedList thì kết quả trả về -1.
Ví dụ:

Sub IndexOfValueMethod()
    'oSList.IndexOfValue(Item)'
    Dim oSList As Object, idex As Long
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add "1", 20
    oSList.Add "Z", 20
    oSList.Add "A", "Item3"
    idex = oSList.IndexOfValue(20)          'idex=0'
    MsgBox idex
    idex = oSList.IndexOfValue("Item3")     'idex=1'
    MsgBox idex
    idex = oSList.IndexOfValue("Item4")
    MsgBox idex                             'idex=-1'
End Sub
3.12. Remove
oSList.Remove Key

Xóa một phần tử trong SortedList theo Key chỉ định. Nếu Key chưa tồn tại trong SortedList thì không xảy ra lỗi.

Khi một phần tử được loại bỏ, việc lập chỉ mục (Index) của các phần tử được điều chỉnh cho phù hợp. Do đó, chỉ mục của cặp Key/ Item cụ thể có thể thay đổi khi các phần tử được thêm vào hoặc xoá khỏi SortedList.
Ví dụ:

Sub RemoveMethod()
    'oSList.Remove Key'
    Dim oSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add "Key-1", ""
    oSList.Add "Key-2", ""
    oSList.Remove "Key-1"
    MsgBox oSList.GetKey(0)     ' "Key-2" '
End Sub
3.13. RemoveAt
oSList.RemoveAt Index

Xóa một Item trong SortedList theo chỉ số Index chỉ định.
Index: Có giá trị từ 0 tới Count-1.
Ví dụ:

Sub RemoveAtMethod()
    'oSList.RemoveAt Index //Index = 0 : Count-1 '
    Dim oSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add "1", ""
    oSList.Add "Z", ""
    oSList.Add "A", ""
    oSList.RemoveAt 1
    MsgBox oSList.GetKey(1)     ' "Z" '
End Sub
3.14. SetByIndex
oSList.SetByIndex Index, Item

Thay đổi giá trị của Item trong SortedList theo chỉ mục (Index) chỉ định.
Ví dụ:

Sub SetByIndexMethod()
    'oSList.SetByIndex Index, Item //Index = 0 : Count-1 '
    Dim oSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add 0, 100
    oSList.Add 1, 500
    oSList.Add 2, 10
    oSList.SetByIndex 0, "Item-1"
    MsgBox oSList.GetByIndex(0)
End Sub
3.15. ToString
oSList.ToString

Trả về tên đối tượng hiện hành, tức là “System.Collections.SortedList”.
Ví dụ:

Sub ToStringMethod()
    'oSList.ToString '
    Dim oSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    MsgBox oSList.ToString        '"System.Collections.SortedList"'
End Sub
3.16. TrimToSize
oSList.TrimToSize

Thiết lập số phần tử tồn tại thực tế có trong SortedList.
Khi sử dụng phương thức TrimToSize thì Capacity = Count.

Để thiết lập lại SortedList về trạng thái ban đầu, ta sử dụng phương thức Clear trước khi gọi TrimToSize. Việc cắt một SortedList trống sẽ đặt Capacity của SortedList về giá trị mặc định.
Ví dụ:

Sub TrimToSizeMethod()
    'oSList.TrimToSize '
    Dim oSList As Object
    Set oSList = CreateObject("System.Collections.SortedList")
    oSList.Add "Key-1", 1
    oSList.Add "Key-2", 2
    MsgBox "Count = " & oSList.Count & vbNewLine & _
            "Capacity = " & oSList.capacity   '2-16'
    oSList.TrimToSize
    MsgBox "Count = " & oSList.Count & vbNewLine & _
            "Capacity = " & oSList.capacity   '2-2'
End Sub
4. Ứng dụng

Lọc loại trùng, sort mảng, …

4.1. Một số hàm

Hàm lọc loại trùng 1 cột của Range

'// Loc loai trung mot cot'
Function UniqueColumnSortedList(ByVal Rng As Range) As Variant
    If Rng.Count = 1 Then UniqueColumnSortedList = Rng.Value: Exit Function
    Dim oSList As Object, i As Long, j As Long, Arr(), Result(), sKey As Variant
    Set oSList = CreateObject("System.Collections.SortedList")
    Arr = Rng.Value
    For i = LBound(Arr, 1) To UBound(Arr, 1)
        sKey = Arr(i, 1)
        If sKey <> "" Then
            If oSList.ContainsKey(sKey) = False Then
                oSList.Add sKey, ""
                j = j + 1
                ReDim Preserve Result(1 To j)
                Result(j) = sKey
            End If
        End If
    Next i
    UniqueColumnSortedList = Result
End Function

Hàm lọc loại trùng và sort mảng 1 chiều

'// Loc loai trung va sort mang 1 chieu'
Function Sort1DSortedList(ByVal Source1D, Optional ByVal IsNumber As Boolean = True, _
                        Optional ByVal Order As Boolean = True) As Variant
'IsNumber: True - Du lieu kieu so, False - Du lieu kieu chuoi'
'Order: True - Sort A-Z, False - Sort Z-A'
    If IsArray(Source1D) = False Then Exit Function
    Dim oSList As Object, iTemArr
    Set oSList = CreateObject("System.Collections.SortedList")
    For Each iTemArr In Source1D
        If IsNumber = False Then
            iTemArr = CStr(iTemArr)
        Else
            If IsNumeric(iTemArr) = False Then GoTo NextCode
        End If
        If oSList.ContainsKey(iTemArr) = False Then
                oSList.Add iTemArr, ""
        End If
NextCode:
    Next iTemArr
    Sort1DSortedList = GetKeysSortedList(oSList, Order)
End Function

Hàm lấy toàn bộ Keys trong SortedList vào mảng 1 chiều

'// Lay Keys trong SortedList vao array 1D'
Function GetKeysSortedList(oSList As Object, Optional ByVal Order As Boolean = True)
'Order: True - Sort A-Z, False - Sort Z-A'
    Dim Result(), i As Long, index As Long, numKeys As Long
    numKeys = oSList.Count
    ReDim Result(1 To numKeys)
    For i = 1 To numKeys
        If Order = True Then index = i - 1 Else index = numKeys - i
        Result(i) = oSList.GetKey(index)
    Next i
    GetKeysSortedList = Result
End Function

Hàm lấy toàn bộ Items trong SortedList vào mảng 1 chiều

'// Lay Items trong SortedList vao array 1D'
Function GetItemsSortedList(oSList As Object, Optional ByVal Order As Boolean = True)
'Order: True - Sort A-Z, False - Sort Z-A'
    Dim Result(), i As Long, index As Long, numItems As Long
    numItems = oSList.Count
    ReDim Result(1 To numItems)
    For i = 1 To numItems
        If Order = True Then index = i - 1 Else index = numItems - i
        Result(i) = oSList.Item(oSList.GetKey(index))
    Next i
    GetItemsSortedList = Result
End Function

 

Tải file ví dụ: SortedList