Microsoft技术社区联盟成员,全球领先的Excel2003/2007/2010门户,Office培训学习的最佳社区
设为首页收藏本站|繁體中文 切换到窄版

Excel Home论坛

 找回密码
 免费注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

魔方网表,Excel终结者,永久免费 Excel服务器2010软件和教程下载 培训课券免费大放送啦!
Excel不给力? 何不试试FoxTable! 2012年Excel免费培训班2-6月开课计划 新人必读:ExcelHome最佳学习方法 免费下载Excel行业应用视频教程
精粹:成为Excel高手的捷径 免费下载39集新Excel精粹视频教程 免费学习Excel数据透视表视频教程 入门必看《循序渐进学Excel》视频
超过100个Excel工具 免费学习Excel 2007精粹视频教程 新Office外观-不可思议 搞不定老板要的报表?我们来帮您
  • 344财富
  • 0鲜花
  • 0技术
    • 等级 2EH初级
    积分排行
    3000+
    帖子
    91
    精华
    0
    分享
    0
    发表于 2006-10-29 20:15:32 |显示全部楼层
    太感謝了,完全正確,Northwolves大俠非常謝謝您,在8樓的連結,發現我提的問題被高手收集了,很好,更謝謝您這位高手花時間幫助解決問題,謝謝
  • 3337财富
  • 0鲜花
  • 12技术
  • 积分排行
    380
    帖子
    1558
    精华
    1
    分享
    0
    发表于 2006-10-29 20:41:04 |显示全部楼层
    QUOTE:
    以下是引用aborr在2006-10-29 20:15:32的发言:
    在8樓的連結,發現我提的問題被高手收集了

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

    Have no passion for Excel especially at   "Home"
  • 3337财富
  • 0鲜花
  • 12技术
  • 积分排行
    380
    帖子
    1558
    精华
    1
    分享
    0
    发表于 2006-10-29 20:42:50 |显示全部楼层

    列出組合 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


    Have no passion for Excel especially at   "Home"
  • 3337财富
  • 0鲜花
  • 12技术
  • 积分排行
    380
    帖子
    1558
    精华
    1
    分享
    0
    发表于 2006-10-29 20:44:03 |显示全部楼层

    列出組合 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

    Have no passion for Excel especially at   "Home"
  • 3337财富
  • 0鲜花
  • 12技术
  • 积分排行
    380
    帖子
    1558
    精华
    1
    分享
    0
    发表于 2006-10-30 01:33:10 |显示全部楼层

     

    '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

    Have no passion for Excel especially at   "Home"

    发表回复

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

    发帖时请遵守我国法律,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任。
    回顶部