Bob có một trang tính có tên các thành viên ở phía bên trái và các tháng trong năm ở phía trên cùng. Trong mỗi ô của lưới, anh ta nhập ngày diễn ra các cuộc họp mà thành viên đã tham dự. Bob đang tìm cách để biết ngay ai chưa gặp ai.

Có một số cách để tiếp cận giải pháp cho vấn đề này. Nếu thiết kế bàn của bạn linh hoạt, bạn có thể “đơn giản hóa” mọi thứ bằng cách thay đổi cách bài trí bàn của bạn. Thay vì đặt các tháng trên các cột, bạn có thể chỉ cần đặt mỗi cột là một ngày họp.

Sau đó, mỗi ô có thể chứa một số loại chỉ báo (một số hoặc một ký tự) cho biết người đã tham dự cuộc họp vào ngày cụ thể đó. Sẽ là một quá trình tương đối dễ dàng để tìm ra ai chưa gặp ai:

  1. Chọn thành viên chính, thành viên bạn muốn kiểm tra và di chuyển anh / cô ấy lên đầu bảng dữ liệu của bạn.

  2. Sắp xếp bảng dữ liệu theo chiều ngang trên hàng thành viên chính, để tất cả các cuộc họp mà thành viên chính đã tham dự đều ở cột ngoài cùng bên trái.

  3. Sắp xếp tất cả mọi người trừ thành viên chủ chốt theo chiều dọc trong ba ngày họp đầu tiên. Tất cả những người đã gặp thành viên chủ chốt trong ba cuộc họp đó giờ đều đứng đầu bảng dữ liệu, ngay dưới thành viên chính.

  4. Di chuyển bảng dữ liệu xuống và chọn tất cả những người chưa gặp thành viên chủ chốt và sắp xếp vào ba ngày họp tiếp theo.

  5. Lặp lại các bước 3 và 4 cho đến khi tất cả các ngày họp đã được sắp xếp.

  6. Mọi người còn lại ở cuối bảng dữ liệu (những người không được chọn ở bước 3 và 4) chưa bao giờ gặp thành viên chính.

Nếu bạn không thể thay đổi định dạng bảng của mình, thì giải pháp macro được gọi cho. Có nhiều cách tiếp cận có thể được sử dụng trong macro, nhưng cách sau có lẽ là trực tiếp nhất:

Sub PeopleNotMet()

Dim rTable As Range     Dim rOutput As Range     Dim iCols As Integer     Dim iCol As Integer     Dim iRows As Integer     Dim iRow As Integer     Dim iCompRow As Integer     Dim sNotMet As String     Dim sMet As String

Set rTable = Worksheets("Sheet1").Range("A1").CurrentRegion     Set rOutput = Worksheets("Sheet2").Range("a1")

sNotMet = "X"

sMet = ""



Application.ScreenUpdating = False     With rTable         iRows = .Rows.Count         iCols = .Columns.Count                  .Columns(1).Copy         With rOutput             .PasteSpecial             .PasteSpecial Transpose:=True             Application.CutCopyMode = False             Range(.Offset(1, 1), .Offset(iRows - 1, _               iRows - 1)).Value = sNotMet             Range(.Offset(1, 1), .Offset(iRows - 1, _               iRows - 1)).HorizontalAlignment = xlCenter         End With     End With     With rTable.Cells(1)

For iRow = 1 To iRows - 1             For iCol = 1 To iCols - 1                 For iCompRow = 1 To iRows - 1                     If Not (IsEmpty(.Offset(iRow, iCol))) Then                         If Not (IsEmpty(.Offset(iCompRow, iCol))) Then                             If .Offset(iRow, iCol).Value = _                               .Offset(iCompRow, iCol).Value Then _                               rOutput.Offset(iRow, iCompRow).Value = sMet                         End If                     End If                 Next             Next         Next     End With

Set rTable = Nothing     Set rOutput = Nothing     Application.ScreenUpdating = True End Sub

Macro này giả định một số điều. Đầu tiên, nó giả định rằng bảng dữ liệu ban đầu của Bob nằm trên Sheet1, bắt đầu từ ô A1. Thứ hai, nó giả định rằng bảng “ai chưa gặp ai” phải nằm trên Trang tính2, bắt đầu từ ô A1. Nếu những giả định này là đúng, thì khi bạn chạy macro, bảng được tạo trên Sheet2 sẽ hiển thị tên ở phía bên trái và tên ở phía trên cùng. Các ô giao nhau sẽ không chứa gì (có nghĩa là những người đã gặp nhau) hoặc chữ X viết hoa (có nghĩa là họ chưa gặp nhau).

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (2304) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: