首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在excel中所有可能的10个数字的组合和重复。

在excel中所有可能的10个数字的组合和重复。
EN

Stack Overflow用户
提问于 2016-09-07 10:31:36
回答 2查看 1.9K关注 0票数 1

如何在Excel中生成长度为5的数字{0、1、2、3、4、5、6、7、8、9}的所有可能组合。我知道重复有10^5种可能的组合。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-07 12:10:23

对elene的代码做了一点修改。

代码语言:javascript
运行
复制
Sub AllCombinations()
    Dim nums(): nums = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    Dim arValues(99999, 4)
    Dim n1 As Integer, n2 As Integer, n3 As Integer, n4 As Integer, n5 As Integer, x As Long

    For n1 = 0 To UBound(nums)
        For n2 = 0 To UBound(nums)
            For n3 = 0 To UBound(nums)
                For n4 = 0 To UBound(nums)
                    For n5 = 0 To UBound(nums)
                        arValues(x, 0) = nums(n1)
                        arValues(x, 1) = nums(n2)
                        arValues(x, 2) = nums(n3)
                        arValues(x, 3) = nums(n4)
                        arValues(x, 4) = nums(n5)
                        x = x + 1
                    Next
                Next
            Next
        Next
    Next

    Range("A1").Resize(100000, 5).Value2 = arValues

End Sub
票数 2
EN

Stack Overflow用户

发布于 2016-09-07 15:03:41

这可能运行得更快一些:

代码语言:javascript
运行
复制
Sub combinations()
Dim wb As Workbook, i As Integer, strFileName As String

'Create Temp Workbook for data source
Set wb = Workbooks.Add
With wb.ActiveSheet
    .Range("A1").Value = "Integer"
    For i = 0 To 9
        .Range("A" & i + 2).Value = i
    Next i
End With
strFileName = "C:\Temp\Temp.xlsx"
wb.SaveAs strFileName
wb.Close False

'Create List using Temp Workbook as source(s)
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array("ODBC;DBQ=" & strFileName & ";DefaultDir=C:\temp;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;FIL=exce"), Array("l 12.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;")), Destination:=Range("$A$1")).QueryTable
    .CommandText = Array( _
    "SELECT `Sheet1$`.Integer, `Sheet1$_1`.Integer, `Sheet1$_2`.Integer, `Sheet1$_3`.Integer, `Sheet1$_4`.Integer" & Chr(13) & "" & Chr(10) & "FROM `" & strFileName & "`.`Sheet1$` `Sheet1$`, `" & strFileName & "`.`Sheet1$` `Sheet1$_1`, `", strFileName & "`.`Sheet1$` `Sheet1$_2`, `" & strFileName & "`.`Sheet1$` `Sheet1$_3`, `" & strFileName & "`.`Sheet1$` `Sheet1$_4`")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = False
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = "Table_Query_from_Temp"
    .Refresh BackgroundQuery:=False
End With

'Convert back to range
ActiveSheet.ListObjects("Table_Query_from_Temp").Unlist

'Delete top row
Rows("1:1").Delete

'Delete Temp file
Kill strFileName
End Sub

比原版快得多。对于数组方法来说,可能不是很多。至少这是一种不同的技术。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39367480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档