ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: aborr

[求助]請問各位大俠,有方法統計1-49數字組合數量?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-29 20:15 | 显示全部楼层
太感謝了,完全正確,Northwolves大俠非常謝謝您,在8樓的連結,發現我提的問題被高手收集了,很好,更謝謝您這位高手花時間幫助解決問題,謝謝

TA的精华主题

TA的得分主题

发表于 2006-10-29 20:41 | 显示全部楼层
QUOTE:
以下是引用aborr在2006-10-29 20:15:32的发言:
在8樓的連結,發現我提的問題被高手收集了

剛剛 Mr. Excel 有類似的問題, 所以介紹給大家

TA的精华主题

TA的得分主题

发表于 2006-10-29 20:42 | 显示全部楼层

列出組合 1 (Jay Petrulis):

Option Explicit

Sub RunLottoSpecial()
    Call LottoSpecial(49, 101)
End Sub

Sub LottoSpecial(Num As Long, TargetVal As Long)
   
    Dim a As Integer, _
        b As Integer, _
        c As Integer, _
        d As Integer, _
        e As Integer, _
        f As Integer
   
    Dim Counter As Long, _
        NumCols As Long, _
        i As Long
   
    Dim arrResults
   
    Application.ScreenUpdating = False
   
    For a = 1 To Num - 5
        For b = a + 1 To Num - 4
            For c = b + 1 To Num - 3
                For d = c + 1 To Num - 2
                    For e = d + 1 To Num - 1
                        For f = e + 1 To Num
                            If a + b + c + d + e + f = TargetVal Then
                                Application.StatusBar = Counter
                                Counter = Counter + 1
                                With ActiveSheet
                                    If Counter Mod 65536 = 0 Then
                                        .Cells(65536, i + 1) = a & "," & b & "," & c & "," & d & "," & e & "," & f
                                        i = i + 1
                                    Else
                                        .Cells(Counter Mod 65536, i + 1) = a & "," & b & "," & c & "," & d & "," & e & "," & f
                                    End If
                                End With
                            End If
                        Next f
                    Next e
                Next d
            Next c
        Next b
    Next a
    Application.StatusBar = False
    Application.ScreenUpdating = True
End Sub


TA的精华主题

TA的得分主题

发表于 2006-10-29 20:44 | 显示全部楼层

列出組合 2 (Output as Text File):

Sub MultipleLottoSums()
 
  Dim i As Long
  On Error GoTo Er
  Make_TextFile
  Open ActiveWorkbook.Path & "Report.txt" For Output As #1
        For i = 101 To 101   ' Change your Range (Depends on your PC)
           Application.StatusBar = "Finding combination ....Total sum = " & i
                Call LottoSpecial(49, i)
        Next i
           Application.StatusBar = ""
        Close #1
        MsgBox "Check text file .... " & ActiveWorkbook.Path & "\Report.txt"
Exit Sub
Er:
MsgBox "Error"
End Sub

Sub LottoSpecial(Num As Long, TargetVal As Long)
   
    Dim a As Integer, _
        b As Integer, _
        c As Integer, _
        d As Integer, _
        e As Integer, _
        f As Integer
   
    Dim Counter As Long, _
        NumCols As Long, _
        i As Long
    Dim arrResults
    Dim varTemp As String
   
    For a = 1 To Num - 5
        For b = a + 1 To Num - 4
            For c = b + 1 To Num - 3
                For d = c + 1 To Num - 2
                    For e = d + 1 To Num - 1
                        For f = e + 1 To Num
                            If a + b + c + d + e + f = TargetVal Then
                                       varTemp = a & "," & b & "," & c & "," & d & "," & e & "," & f
                                       Write #1, varTemp
                                       varTemp = ""
                            End If
                        Next f
                    Next e
                Next d
            Next c
        Next b
    Next a
End Sub
 
Sub Make_TextFile()
Open ActiveWorkbook.Path & "\Report.txt" For Output As #1
Close #1
End Sub

TA的精华主题

TA的得分主题

发表于 2006-10-30 01:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

 

'nMin = Sheets("Sheet1").Range("A1")
'nMax = Sheets("Sheet1").Range("A2")

Option Explicit

Sub LottoSpecial(Num As Long, TargetVal As Long)
   
    Dim a As Integer, _
        b As Integer, _
        c As Integer, _
        d As Integer, _
        e As Integer, _
        f As Integer
   
    Dim Counter As Long, _
        NumCols As Long, _
        i As Long
   
    Dim arrResults
   
    Application.ScreenUpdating = False
   
    For a = 1 To Num - 5
        For b = a + 1 To Num - 4
            For c = b + 1 To Num - 3
                For d = c + 1 To Num - 2
                    For e = d + 1 To Num - 1
                        For f = e + 1 To Num
                            If a + b + c + d + e + f = TargetVal Then
                                Application.StatusBar = Counter
                                Counter = Counter + 1
                                With ActiveSheet
                                    If Counter Mod 65536 = 0 Then
                                        .Cells(65536, i + 1) = a & "," & b & "," & c & "," & d & "," & e & "," & f
                                        i = i + 1
                                    Else
                                        .Cells(Counter Mod 65536, i + 1) = a & "," & b & "," & c & "," & d & "," & e & "," & f
                                    End If
                                End With
                            End If
                        Next f
                    Next e
                Next d
            Next c
        Next b
    Next a
    Application.StatusBar = False
    Application.ScreenUpdating = True
End Sub

Sub MultipleLottoSums()

    Dim nMin As Integer, _
        nMax As Integer

    Dim i As Long
   
    Dim Wks As Worksheet

    nMin = Sheets("Sheet1").Range("A1")
    nMax = Sheets("Sheet1").Range("A2")

    With ThisWorkbook
        For i = nMin To nMax
            Set Wks = .Worksheets.Add
            With Wks
                .Activate
                .Name = "Sum_to_" & i
                Call LottoSpecial(45, i)
            End With
        Next i
    End With
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 07:56 , Processed in 0.020165 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表