Cách Lấy Danh Sách Các Sheet Trong Excel

Trong môi trường làm việc với Excel, việc quản lý một workbook chứa nhiều sheet (tệp) thường xuyên gặp phải những thách thức liên quan đến việc theo dõi, kiểm tra, và liên kết dữ liệu giữa các sheet. Đặc biệt là khi bạn đang thiết kế một báo cáo phức tạp, một hệ thống tổng hợp dữ liệu, hoặc một macro tự động, việc có một danh sách đầy đủ các sheet trong workbook sẽ giúp bạn nhanh chóng kiểm tra tính toàn vẹn dữ liệu, thực hiện các thao tác lặp lại, hoặc tạo giao diện người dùng tùy chỉnh.

Dưới đây, chúng ta sẽ đi sâu vào các phương pháp lấy danh sách các sheet trong Excel, từ những cách đơn giản nhất sử dụng tính năng sẵn có của Excel, đến các giải pháp nâng cao với VBA, Power Query, và Office Scripts. Mỗi phương pháp sẽ được trình bày chi tiết, kèm theo ví dụ mã và lời khuyên thực tiễn để bạn có thể lựa chọn giải pháp phù hợp với nhu cầu và môi trường làm việc của mình.

1. Tại sao cần lấy danh sách các sheet trong Excel?

  1. Kiểm tra tính toàn vẹn dữ liệu: Nếu một sheet bị xóa hoặc đổi tên, các công thức, liên kết và macro có thể bị lỗi. Một danh sách cập nhật giúp phát hiện ngay những thay đổi không mong muốn.
  2. Tạo báo cáo tổng hợp: Khi bạn cần tổng hợp dữ liệu từ nhiều sheet vào một sheet báo cáo, danh sách giúp xác định linear path và tránh bỏ sót sheet.
  3. Tự động hóa: Trong việc viết macro hoặc script, bạn thường cần lặp qua từng sheet để thực hiện hành động như xóa, sao chép, hoặc chỉnh sửa.
  4. Dễ dàng tạo giao diện người dùng: Một drop-down list chứa tên sheet giúp người dùng chọn sheet mà không cần phải nhớ tên chính xác.
  5. Tối ưu participer: Khi workbook có quá nhiều sheet, người dùng có thể bị lạc vào các sheet không liên quan. Danh sách giúp tập trung vào các sheet quan trọng.

2. Phương pháp 1: Sử dụng tính năng Name Manager (Quản lý tên)

2.1. Giới thiệu

Excel có một chức năng quản lý tên (Name Manager) cho phép bạn tạo và quản lý các tên đặt cho ô, vùng, hoặc công thức. Mặc dù chủ yếu dùng để đặt tên cho vùng dữ liệu, nhưng chúng ta có thể tạo một tên cho một công thức trả về danh sách tên sheet.

2.2. Cách thực hiện

  1. Mở Name Manager: Formulas → Name Manager.
  2. Tạo tên mới: Click New.
  3. Điền thông tin:
  4. Name: SheetList.
  5. Refers to: =GET.WORKBOOK(1).
  6. Lưu và đóng.

2.3. Kết quả

  • Khi bạn nhập vào ô bất kỳ: =SheetList (nếu tính năng AutoComplete được bật), Excel sẽ hiển thị danh sách tên sheet trong workbook.
  • Bạn cũng có thể sử dụng công thức =INDEX(SheetList,ROW(A1)) để lấy từng tên sheet một theo vị trí.

2.4. Lưu ý

  • Hàm GET.WORKBOOK là một hàm của Excel 4.0 Macro Workbook, vì vậy nó chỉ hoạt động trong Excel 2026 trở lên.
  • Nếu workbook được lưu ở định dạng xlsm, bạn có thể sử dụng macro để cập nhật danh sách một cách tự động.

3. Phương pháp 2: Sử dụng VBA (Visual Basic for Applications)

VBA là công cụ mạnh mẽ nhất để thao tác với workbook. Dưới đây là một số đoạn mã VBA phổ biến để lấy danh sách sheet.

3.1. Lấy danh sách sheet vào một range

Sub GetSheetNames() Dim ws As Worksheet Dim i As Long i = 1 For Each ws In ThisWorkbook.Worksheets ThisWorkbook.Sheets("SheetList").Cells(i, 1).Value = ws.Name i = i + 1 Next ws
End Sub

Giải thích: Đoạn mã này lặp qua tất cả các sheet trong workbook hiện tại, ghi tên sheet vào một sheet tên SheetList (đảm bảo sheet này tồn tại). Nếu sheet SheetList chưa tồn tại, bạn có thể tạo ra trước.

3.2. Tạo một danh sách sheet trong một công thức

Đôi khi bạn muốn sử dụng công thức thay vì macro. Dưới đây là cách tạo một mảng động bằng cách sử dụng Application.Transpose:

Function GetSheetNamesArray() As Variant Dim ws As Worksheet Dim arr() As String Dim i As Long ReDim arr(1 To ThisWorkbook.Worksheets.Count) i = 1 For Each ws In ThisWorkbook.Worksheets arr(i) = ws.Name i = i + 1 Next ws GetSheetNamesArray = Application.Transpose(arr)
End Function

Bạn có thể sử dụng công thức Array trong Excel: =GetSheetNamesArray() và nó sẽ trả về một cột danh sách các tên sheet.

3.3. Lưu ý khi sử dụng VBA

  • Bảo mật macro: Khi mở workbook có macro, Excel sẽ hỏi bạn có cho phép macro hay không. Đảm bảo bạn tin vào nguồn của workbook.
  • Hiệu năng: Nếu workbook chứa hàng nghìn sheet, việc lặp qua tất cả có thể mất thời gian. Hãy cân nhắc tính năng Application.ScreenUpdating = False để giảm thiểu hiện tượng làm chậm.
  • Kích thước workbook: Việc lưu danh sách trong một sheet có thể làm tăng kích thước file. Hãy lưu ý.

4. Phương pháp 3: Sử dụng Power Query

Power Query (trong Excel 2026 trở lên và Office 365) cung cấp một giao diện mạnh mẽ để truy vấn dữ liệu từ nhiều nguồn, bao gồm cả các sheet trong workbook.

4.1. Lấy danh sách sheet bằng Power Query

  1. Mở Power Query: Data → Get Data → From Other Sources → Blank Query.
  2. Mở Advanced Editor và nhập mã M sau:
let Source = Excel.CurrentWorkbook(), #"Filtered Rows" = Table.SelectRows(Source, each Kind = "Sheet"), #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Data", "Kind", "Hidden", "Merge"}), #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Name", "SheetName"}})
in #"Renamed Columns"
  1. Click Done. Kết quả là một bảng chứa tên tất cả sheet trong workbook.

4.2. Lưu ý

  • Power Query chỉ liệt kê các sheet có dữ liệu (không trống). Nếu bạn muốn bao gồm cả sheet trống, hãy điều chỉnh mã M.
  • Bạn có thể chuyển bảng này thành một sheet trong workbook bằng cách chọn Close & Load.

4.3. S baff

Power Query rất thích hợp khi bạn muốn tạo một quy trình tự động và tái sử dụng. Ví dụ: bạn muốn tạo một báo cáo tổng hợp danh LPC… (các)

5. Phương pháp 4: Sử dụng Office Scripts trong Excel Online

Nếu bạn làm việc trong môi trường Office 365 Online, Office Scripts cung cấp cách viết script TypeScript để tự động hóa các tác vụ trong Excel.

5.1. Ví dụ Script

function main(workbook: ExcelScript.Workbook) { let worksheets = workbook.getWorksheets(); let names: string = ; worksheets.forEach(ws => { names.push(ws.getName()); }); // Ghi danh sách vào sheet "SheetList" (có thể tạo mới nếu chưa có) let sheet = workbook.getWorksheet("SheetList") || workbook.addWorksheet("SheetList"); sheet.getRange("A1:A" + names.length).setValues(names.map(name => name));
}

5.2. Cách chạy script

Cách Lấy Danh Sách Các Sheet Trong Excel
Cách Lấy Danh Sách Các Sheet Trong Excel
  • Truy cập Automate → New Script.
  • Dán mã vào, lưu, và chạy.

5.3. Ưu điểm

  • Không cần bật macro trong Excel Desktop.
  • Giao diện trực quan và dễ dàng chia sẻ script trong tổ chức.

6. Phương pháp 5: Sử dụng Công thức trong Excel (không VBA)

Đối với những người không muốn sử dụng VBA, ta có thể dùng công thức array kết hợp với INDEX, ROW, và INDIRECT.

6.1. Công thức

=INDEX(GET.WORKBOOK(1),ROW(A1))
  • GET.WORKBOOK(1) trả về danh sách toàn bộ tên sheet.
  • INDEX(...,ROW(A1)) lấy phần tử thứ ROW(A1) (tức là 1).
  • Kéo công thức xuống để lấy các tên sheet tiếp theo.

6.2. Thực hiện

  1. Nhập công thức vào ô A1.
  2. Kéo xuống A2, A3, … cho tới khi công thức trả về lỗi #SPILL! hoặc #REF!. Khi đó, bạn đã lấy hết danh sách.

6.3. Lưu ý

  • Hàm GET.WORKBOOK chỉ hỗ trợ trong Excel 4 esan.
  • Khi workbook có sheet trống, công thức vẫn hiển thị tên.

7. Phương pháp 6: Dùng Macro Recorder để tạo danh sách

Nếu bạn không quen với việc viết VBA, bạn có thể dùng Macro Recorder để ghi lại các thao tác và sau đó chỉnh sửa mã.

7.1. Bước thực hiện

  1. Mở Developer → Record Macro.
  2. Thực hiện các thao tác: click vào từng sheet, ghi chú tên vào một sheet mới.
  3. Dừng ghi lại.
  4. Mở Visual Basic Editor → VBAProject → Modules → chỉnh sửa mã.

7.2. Ví dụ mã

Macro Recorder thường tạo ra mã tương tự như:

Sub RecordSheetNames() Dim ws As Worksheet Dim i As Long i = 1 For Each ws In Worksheets Worksheets("SheetList").Cells(i, 1).Value = ws.Name i = i + 1 Next ws
End Sub

8. Những lưu ý quan trọng khi làm việc với danh sách sheet

Tình huốngLưu ýGiải pháp
Workbook có sheet trốngMột số phương pháp (Power Query) không hiển thị sheet trống.Sử dụng VBA hoặc lọc trong Power Query để bao gồm sheet trống.
Đổi tên sheetDanh sách sẽ không tự cập nhật trừ khi macro chạy lại.Thêm sự kiện Workbook_Sheet seront renamed trong VBA để tự cập nhật.
Độ lớn workbookLặp qua hàng nghìn sheet có thể chậm.Kiểm tra ThisWorkbook.Worksheets.Count trước khi thực hiện.
Bảo mật macroMacro có thể bị chặn bởi cài đặt bảo mật.Gửi workbook dưới dạng xlsm và yêu cầu người dùng bật macro.
Sao lưu dữ liệuKhi tạo danh sách trong một sheet, dữ liệu có thể bị ghi đè.Sử dụng sheet tĩnh, đặt tên SheetList và bảo vệ sheet.
Đa ngôn ngữĐôi khi tên sheet có ký tự đặc biệt.Sử dụng CStr(ws.Name) trong VBA để xử lý.

9. Ứng dụng thực tế: Tạo Drop-Down List chọn sheet

Khi làm việc với các công thức tham chiếu sheet, một drop-down list giúp người dùng nhanh chóng chọn sheet mà không Hindi.

9.1. Bước thực hiện

  1. Tạo danh sách: Sử dụng một trong các phương pháp ở trên để ghi danh sách sheet vào một vùng dữ liệu, ví dụ A1:A10 trong sheet SheetList.
  2. Định danh vùng: Đánh dấu vùng A1:A10 và đặt tên vùng SheetNames (điều kiện: Formulas → Name Manager → New).
  3. Tạo drop-down:
  4. Chọn ô muốn hiển thị drop-down, ví dụ B1 trong sheet Report.
  5. Đi tới Data → Data Validation → List.
  6. Trong trường Source, nhập =SheetNames.
  7. Sử dụng: Khi người dùng chọn tên sheet, bạn có thể dùng công thức INDIRECT để lấy dữ liệu.

9.2. Công thức tham chiếu

=INDIRECT("'" & B1 & "'!A1")
  • B1 chứa tên sheet đã chọn.
  • Công thức sẽ trả về giá trị ô A1 trong sheet đã chọn.

10. Tối ưu hóa và bảo trì

10.1. Tự động cập nhật danh sách

  • Sự kiện Workbook_SheetActivate: Khi người dùng chuyển sheet, macro tự cập nhật danh sách.
  • Sự kiện Workbook_SheetChange: Khi có thay đổi tên sheet, macro tự cập nhật.
Private Sub Workbook_SheetActivate(ByVal Sh As Object) Call UpdateSheetList
End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Call UpdateSheetList
End Sub Sub UpdateSheetList() ' Mã lấy danh sách như ở phần 3.1
End Sub

10.2. Định dạng và bảo vệ sheet danh sách

  • Đặt sheet SheetList làm protected để tránh người dùng vô tình chỉnh sửa.
  • Sử dụng SetProtectRange trong VBA để bảo vệ vùng danh sách.

10.3. Kiểm tra lỗi

  • Khi có sheet bị xóa, macro cần xử lý lỗi Subscript out of range.
  • Sử dụng On Error Resume Next khi cần bỏ qua lỗi.

11. Bài tập thực hành

  1. Tạo một workbook có 5 sheet: Data1, Data2, Data3, Summary, Report.
  2. Viết macro ListSheets để ghi danh sách các sheet vào sheet Summary trong cột A.
  3. Tạo drop-down trong sheet Report để chọn sheet tên từ danh sách.
  4. Sử dụng công thức INDIRECT trong Report để hiển thị giá trị ô B2 của sheet được chọn.

Tip: Khi hoàn thành, lưu file dưới định dạng .xlsm và bật macro.

12. Kết luận

Lấy danh sách các sheet trong ака Excel là một thao tác cơ bản nhưng vô cùng quan trọng, đặc biệt trong môi trường làm việc với dữ liệu phức tạp. Dựa vào nhu cầu và môi trường làm việc (Excel Desktop, Office 365 Online, môi trường bảo mật cao), bạn có thể chọn một trong các phương pháp sau:

  • GET.WORKBOOK (công thức) – nhanh nhưng hạn chế.
  • VBA – mạnh mẽ, linh hoạt, nhưng yêu cầu bật macro.
  • Power Query – thích hợp cho quy trình tự động và dữ liệu lớn.
  • Office Scripts – giải pháp hiện đại trong Excel Online.
  • Macro Recorder – nhanh chóng cho người mới.

Bằng cách kết hợp các công cụ này, bạn có thể tự động hóa quy trình kiểm tra, tổng hợp và thao tác dữ liệu, từ đó nâng cao hiệu suất làm việc và giảm thiểu sai sót.

Lời khuyên cuối cùng: Hãy luôn ghi lại các macro và script trong một module riêng, đặt tên rõ ràng, và lưu trữ tại một vị trí có thể truy cập được. Điều này không chỉ giúp bạn dễ dàng bảo trì, mà còn acht bảo vệ dữ liệu khi bạn chuyển đổi giữa các phiên bản hoặc chia sẻ workbook với đồng nghiệp.

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận