Ron biết anh ấy có thể sử dụng hàm COMBIN để xác định số lượng các tổ hợp có thể được tạo ra từ một số chữ số. Tuy nhiên, anh ấy đang tự hỏi liệu có cách nào để liệt kê ra tất cả các cách kết hợp.

Không có cách tích hợp nào để liệt kê các kết hợp trong Excel. Tuy nhiên, bạn có thể tạo macro để thực hiện việc liệt kê cho bạn. Nếu bạn muốn tìm các kết hợp duy nhất trong tập hợp các số liên tiếp bắt đầu từ 1, thì tập hợp macro sau sẽ thực hiện thủ thuật. Tất cả những gì bạn cần làm là chạy hàm TestCNR và bạn sẽ nhận được một “ma trận” các ô đại diện cho số lượng tổ hợp 4 chữ số trong bộ giá trị tuần tự từ 1 đến 10.

Sub TestCNR()

Cnr 10, 4 End Sub
Sub Cnr(n, r)

i = 1     For j = 1 To r         Cells(i, j).Value = j     Next

Do Until Finished(n, r, i)

j = FindFirstSmall(n, r, i)

For k = 1 To j — 1             Cells(i + 1, k).Value = Cells(i, k).Value         Next         Cells(i + 1, j).Value = Cells(i, j).Value + 1         For k = j + 1 To r             Cells(i + 1, k).Value = Cells(i + 1, k - 1).Value + 1         Next         i = i + 1     Loop End Sub
Function Finished(n, r, i)

Temp = True

For j = r To 1 Step -1         If Cells(i, j).Value <> j + (n - r) Then             Temp = False         End If     Next     Finished = Temp End Function

Function FindFirstSmall(n, r, i)

j = r     Do Until Cells(i, j).Value <> j + (n - r)

j = j - 1     Loop     FindFirstSmall = j End Function

Macro ghi đè bất kỳ thứ gì có trong trang tính của bạn, vì vậy hãy đảm bảo rằng bạn chạy thử nghiệm với một trang tính trống được hiển thị. Nếu bạn muốn thay đổi kích thước của tập hợp hoặc số phần tử trong tập hợp con, chỉ cần thay đổi các giá trị được truyền trong quy trình TestCNR.

Nếu bạn muốn kéo các kết hợp duy nhất từ ​​một chuỗi ký tự (ví dụ: các chữ cái trong bảng chữ cái), thì bạn cần sử dụng một bộ macro khác. Sau đây sẽ hoạt động tốt; nó giả định rằng các ký tự bạn muốn sử dụng làm “vũ trụ” của mình nằm trong ô A1 và số bạn muốn trong mỗi kết hợp duy nhất nằm trong ô A2.

Sub FindSets()

Dim iA() As Integer     Dim sUniv As String     Dim iWanted As Integer     Dim j As Integer     Dim k As Integer

sUniv = Cells(1, 1).Value     iWanted = Cells(2, 1).Value

ReDim iA(iWanted)

For j = 1 To iWanted         iA(j) = j     Next j

iRow = PutRow(iA, sUniv, 1)



Do Until DoneYet(iA, Len(sUniv))

j = WorkHere(iA, Len(sUniv))

iA(j) = iA(j) + 1         For k = j + 1 To iWanted             iA(k) = iA(k - 1) + 1         Next k         iRow = PutRow(iA, sUniv, iRow)

Loop End Sub
Function DoneYet(iB, n) As Boolean     iMax = UBound(iB)

Temp = True     For j = iMax To 1 Step -1         If iB(j) <> j + (n - iMax) Then             Temp = False         End If     Next     DoneYet = Temp End Function
Function WorkHere(iB, n) As Integer     iMax = UBound(iB)

j = iMax     Do Until iB(j) <> j + (n - iMax)

j = j - 1     Loop     WorkHere = j End Function
Function PutRow(iB, sUniv, i)

iMax = UBound(iB)

sTemp = ""

For j = 1 To iMax         sTemp = sTemp & Mid(sUniv, iB(j), 1)

Next j     Cells(i, 2).Value = sTemp     PutRow = i + 1 End Function

Chạy macro FindSets và các kết hợp khác nhau mong muốn kết thúc trong cột 2. Tuy nhiên, hãy cẩn thận khi chạy macro. Số lượng kết hợp có thể rất lớn rất nhanh chóng.

_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 (11891) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: