【问题标题】:How to use excel to get permutations of “Yes” and “No” across 6 columns?如何使用excel在6列中获得“是”和“否”的排列?
【发布时间】:2020-11-17 12:39:20
【问题描述】:

您能告诉我如何在 6 列中获得所有是和否的排列吗?

问了一个类似的问题,并为 5 列提供了以下公式:

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

为 5 列提供了以下 VBA 响应:

Option Explicit 
Sub DisplayYesNoPerms()
Dim rows&, cols&
cols = 5
rows = 2 ^ cols
[b2].Resize(rows cols) = YesNoPerms(rows, cols)
End Sub
Function YesNoPerms(rows&, cols&)
Dim i&, j&, 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 n&)
Do 
DecToBin = n Mod 2 & DecToBin
n = n \ 2
Loop While n
End Function

奖励逻辑:

  • 如果第 1 列为否,则第 2 列不能为是。
  • 如果第 3 列为否,则第 4 列不能为是。
  • 如果第 5 列为否,则第 6 列不能为是。

【问题讨论】:

  • 您是否出于特定原因标记了 VBA?您是否有忘记包含在问题中的代码?
  • 我已经添加了上面的VBA代码。

标签: excel vba combinations permutation


【解决方案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 & "," & Mid(sin, i, 1)
    Next i
End Function

Frag() 将字符串转换为逗号分隔的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多