Как использовать Excel для получения перестановок “Да” и “Нет” в 6 столбцах?

#excel #vba #combinations #permutation

#excel #vba #комбинации #перестановка

Вопрос:

Не могли бы вы рассказать мне, как я могу получить все перестановки «да» и «нет» в 6 столбцах?

Был задан аналогичный вопрос, и для 5 столбцов была предоставлена следующая формула:

 =CHOOSE(1 MID(LEFT("00000",5-LEN(DEC2BIN(32-ROW() 1)))amp;DEC2BIN(32-ROW() 1),COLUMN()-1,1),"No","Yes")
  

Следующий ответ VBA был предоставлен для 5 столбцов:

 Option Explicit 
Sub DisplayYesNoPerms()
Dim rowsamp;, colsamp;
cols = 5
rows = 2 ^ cols
[b2].Resize(rows cols) = YesNoPerms(rows, cols)
End Sub
Function YesNoPerms(rowsamp;, colsamp;)
Dim iamp;, jamp;, t$, v
ReDim v(0 To rows -1, 1 To cols)
For i=0 To rows - 1
t= Format(DecToBin(i), String(cols, "0"))
For j=1 To cols
v(i, j) = IIf(Mid(t, j, 1), "No", "Yes")
Next
Next
YesNoPerms = v
End Function
Function DecToBin$(ByVal namp;)
Do 
DecToBin = n Mod 2 amp; DecToBin
n = n  2
Loop While n
End Function
  

Бонусная логика:

  • Если столбец 1 равен «нет», столбец 2 не может быть «да».
  • Если столбец 3 — «нет», столбец 4 не может быть «да».
  • Если столбец 5 равен «нет», столбец 6 не может быть «да».

Комментарии:

1. Вы пометили VBA по определенной причине? У вас есть код, который вы забыли включить в свой вопрос?

2. Я добавил приведенный выше код VBA.

Ответ №1:

Также на основе двоичных шаблонов:

 Sub qwerty()
    Dim i As Long, wf As WorksheetFunction
    Set wf = Application.WorksheetFunction
    With wf
        For i = 0 To 63
            arr = Split(Replace(Replace(frag(.Dec2Bin(i, 6)), "1", "yes"), "0", "no"), ",")
            Range(Cells(i   1, 1), Cells(i   1, 6)).Value = arr
        Next i
    End With
End Sub

Public Function frag(sin As String) As String
    Dim i As Long, L As Long
    frag = Left(sin, 1)
    L = Len(sin)
    If L = 1 Then Exit Function
    For i = 2 To L
        frag = frag amp; "," amp; Mid(sin, i, 1)
    Next i
End Function
  

Frag() преобразует строку в строку, разделенную запятыми.

введите описание изображения здесь