VBA中的排列

时间:2019-04-18 12:46:49

标签: excel vba

我正在尝试创建一个宏,该宏输出从一些数字的列开始的所有可能的排列,其中每个连续的数字都不能大于其上的数字。

因此,我想为excel提供Sheet1中包含15个值的列,范围从19。这些值应按降序排列,以使下面一行的数字永远不能超过上面的数字。

我想做的是输出此列表的新排列,每个新列表一张新纸。

将指定列表中值的上限,因此排列数量将是起始列表和上限值之间的所有值。

有一个条件我不能中断,那就是另一行下面的一行的值不能大于上面一行的值。有一张图片可以解释一下。

到目前为止,我的代码还不到一半,我感到完全迷失了。 我什至不知道如何去考虑这个问题,更不用说编码了。 任何输入将不胜感激。

Sub

    doSomeStuff()

    Dim maxNotch, startNotch, Counter As Integer
    Dim shit As Range

    maxNotch = 3
    startNotch = ThisWorkbook.Sheets("Sheet1").Cells(2, 2)


    Counter = startNotch
    sheetnumber = 2
    For j = st

    artNotch To maxNotch

    Set ws = ThisWorkbook.Sheets.Add(After:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = "Sheet" & sheetnumber

        ThisWorkbook.Sheets("Sheet" & sheetnumber).Cells(2, 2).Value = Counter
    For i = 1 To 3

        ThisWorkbook.Sheets("Sheet" & sheetnumber).Cells(i + 1, 1).Value = 2 + i

        If ThisWorkbook.Sheets("Sheet" & sheetnumber).Cells(i + 1, 2).Value <> Counter Then
           k = Counter - ThisWorkbook.Sheets("Sheet" & sheetnumber - 1).Cells(i + 1, 2).Value
           Debug.Print k
        End If

    Next i


    sheetnumber = sheetnumber + 1
    Counter = Counter + 1
    Next j

    Application.DisplayAlerts = True
End Sub


Function pop()

    (ByVal j As Integer, k As Integer)
    For i = 1 To 3

        ThisWorkbook.Sheets("Sheet" & j + 1).Cells(i + 1, 1).Value = 2 + i
        ThisWorkbook.Sheets("Sheet" & j + 1).Cells(2, 2).Value = Counter


        If ThisWorkbook.Sheets("Sheet" & j + 1).Cells(i + 1, 2).Value <> Cou

    nter Then
            ThisWorkbook.Sheets("Sheet" & j + 1).Cells(i + 1, 2).Value = ThisWorkbook.Sheets("Sheet" & j).Cells(i + 1, 2).Value
        End If
    Next i

End Function

enter image description here

1 个答案:

答案 0 :(得分:0)

我的评论示例,说明了订购情况:

dim pc as long, ws as worksheet
for each ws in worksheets
    with ws
        If ws.name <> "sourcedatasheet" then
            .cells(2,2).resize(pc).value = "" 'export your list; pc = permutation count
            .Range(.Cells(1,2),.Cells(pc+1,2)).Sort key1:=.Cells(1,2), order1:=xlDescending, Header:=xlYes 'used a header because row 1 is blank
        end if
    end with
next

编辑1:

添加if语句以说明某些特定工作表不包括在内