ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

整數比大小教學VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-1-2 22:19 | 显示全部楼层 |阅读模式
整數比大小教學VBA v1.0.exe
Size: 905208 bytes
Modified: 2010年1月2日, 下午 05:26:14
MD5: 8782A8F9681D7FCA853CF8447B4C58FF
SHA1: 0A05605016716BDE1F38A7CC0F71FD0E30CFA88D
CRC32: 9AB4ADF2

歡迎分享給你認識的啟智班老師!

下載處:

下載網址.zip

168 Bytes, 下载次数: 34

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-2 22:24 | 显示全部楼层

生成數字部分的代碼

Sub 數字1()

    On Error Resume Next
   
    Dim 下限 As Long
    Dim 上限 As Long
    Dim 位數 As Long
   
    下限 = 整數比大小表單.下限項.Value
    上限 = 整數比大小表單.上限項.Value
    位數 = 整數比大小表單.位數項.Value
   
    整數比大小表單.數字1.Visible = True
   
    Randomize
   
    If 整數比大小表單.依範圍項.Value = True Then
        整數比大小表單.數字1.Caption = 範圍取數(下限, 上限)
    Else '依位數
        If 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = False Then
            整數比大小表單.數字1.Caption = 位數取數(位數)
        ElseIf 整數比大小表單.正數項.Value = False And 整數比大小表單.負數項.Value = True Then
            整數比大小表單.數字1.Caption = 位數取數(位數) * -1
        ElseIf 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = True Then
            整數比大小表單.數字1.Caption = 位數取數(位數) * (Int(Rnd * 2) * 2 - 1)
        End If
    End If
   
End Sub

Sub 數字2()

    On Error Resume Next
   
    Dim 下限 As Long
    Dim 上限 As Long
    Dim 位數 As Long
    Dim 限差 As Long
    Dim 數字1 As Long
    Dim 同位數 As Long
    Dim 暫存值 As Long
    Dim 下限差 As Long
    Dim 上限差 As Long
    Dim 範圍陣列() As Variant
    Dim 位數陣列() As Variant
    Dim 限差陣列() As Long
    Dim 範圍數 As Long
    Dim 同位測試 As Boolean
   
    下限 = 整數比大小表單.下限項.Value
    上限 = 整數比大小表單.上限項.Value
    位數 = 整數比大小表單.位數項.Value
    限差 = 整數比大小表單.限差項.Value
    數字1 = 整數比大小表單.數字1.Caption
    同位數 = Len(CStr(Abs(數字1)))
    同位測試 = False
   
    整數比大小表單.數字2.Visible = True
   
    '限差以外範圍陣列
    If 整數比大小表單.依範圍項.Value = True And 整數比大小表單.限差項.Enabled = True And 限差 > 0 And 整數比大小表單.以外項.Value = True Then
        ReDim 範圍陣列(上限 - 下限 + 1) As Variant
        ReDim 限差陣列(限差 * 2 - 1) As Long
        
        For X = 1 To 上限 - 下限 + 1
            範圍陣列(X) = 下限 - 1 + X
        Next X
        
        For Y = 1 To 限差 * 2 - 1
            限差陣列(Y) = 數字1 - 限差 + Y
        Next Y
        
        If 範圍陣列(1) > 限差陣列(1) Then
            N = 1
            For X = 1 To 上限 - 下限 + 1
                For Y = N To 限差 * 2 - 1
                    If 範圍陣列(X) = 限差陣列(Y) Then
                        範圍陣列(X) = ""
                        N = Y + 1
                        Exit For
                    End If
                Next Y
            Next X
        Else
            N = 1
            For Y = 1 To 限差 * 2 - 1
                For X = N To 上限 - 下限 + 1
                    If 範圍陣列(X) = 限差陣列(Y) Then
                        範圍陣列(X) = ""
                        N = X + 1
                        Exit For
                    End If
                Next X
            Next Y
        End If
        
        範圍數 = 0
        For X = 1 To 上限 - 下限 + 1
            If Not 範圍陣列(X) = "" Then
                範圍數 = 範圍數 + 1
                範圍陣列(範圍數) = 範圍陣列(X)
            End If
        Next X
    End If
   
    '限差以外位數陣列
    If 整數比大小表單.依位數項.Value = True And 整數比大小表單.限差項.Enabled = True And 限差 > 0 And 整數比大小表單.以外項.Value = True Then
        ReDim 位數陣列(10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1) As Variant
        ReDim 限差陣列(限差 * 2 - 1) As Long
        
        If 整數比大小表單.正數項.Value = True Then
            For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
                位數陣列(X) = 10 ^ (位數 - 1) - 1 + X
            Next X
        ElseIf 整數比大小表單.負數項.Value = True Then
            For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
                位數陣列(X) = -10 ^ 位數 + X
            Next X
        End If
        
        For Y = 1 To 限差 * 2 - 1
            限差陣列(Y) = 數字1 - 限差 + Y
        Next Y
        
        If 位數陣列(1) > 限差陣列(1) Then
            N = 1
            For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
                For Y = N To 限差 * 2 - 1
                    If 位數陣列(X) = 限差陣列(Y) Then
                        位數陣列(X) = ""
                        N = Y + 1
                        Exit For
                    End If
                Next Y
            Next X
        Else
            N = 1
            For Y = 1 To 限差 * 2 - 1
                For X = N To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
                    If 位數陣列(X) = 限差陣列(Y) Then
                        位數陣列(X) = ""
                        N = X + 1
                        Exit For
                    End If
                Next X
            Next Y
        End If
        
        範圍數 = 0
        For X = 1 To 10 ^ 位數 - 1 - 10 ^ (位數 - 1) + 1
            If Not 位數陣列(X) = "" Then
                範圍數 = 範圍數 + 1
                位數陣列(範圍數) = 位數陣列(X)
            End If
        Next X
    End If
   
    '數字2
    Randomize
   
    If 整數比大小表單.依範圍項.Value = True Then
        If 整數比大小表單.位數同項.Value = True And 整數比大小表單.位數不同項.Value = False Then
            Do
                Randomize
               
                If 整數比大小表單.以內項.Value = True Then
                    下限差 = Application.WorksheetFunction.Max(下限, 數字1 - 限差)
                    上限差 = Application.WorksheetFunction.Min(上限, CLng(數字1) + 限差)
                    暫存值 = 範圍取數(下限差, 上限差)
                Else '限差以外
                    If 限差 = 0 Then
                        暫存值 = 範圍取數(下限, 上限)
                    Else '限差 > 0
                        If 同位測試 = False Then
                            N = 0
                            For X = 1 To 範圍數
                                If Len(CStr(Abs(範圍陣列(X)))) = 同位數 Then
                                    N = N + 1
                                End If
                            Next X
                           
                            If N = 0 Then
                                整數比大小表單.數字2.Caption = "無解"
                                Exit Do
                            End If
                           
                            同位測試 = True
                        End If
                        
                        暫存值 = 範圍陣列(Int(Rnd * 範圍數 + 1))
                    End If
                End If
               
                If Len(CStr(Abs(暫存值))) = 同位數 Then
                    整數比大小表單.數字2.Caption = 暫存值
                    Exit Do
                End If
            Loop
        ElseIf 整數比大小表單.位數同項.Value = False And 整數比大小表單.位數不同項.Value = True Then
            If Len(CStr(Abs(下限))) = Len(CStr(Abs(上限))) And (下限 / 100 * 上限 >= 0 Or Len(CStr(Abs(下限))) = 1) Then
                整數比大小表單.數字2.Caption = "無解"
            Else
                Do
                    Randomize
                    暫存值 = 範圍取數(下限, 上限)
                    
                    If Not Len(CStr(Abs(暫存值))) = 同位數 Then
                        整數比大小表單.數字2.Caption = 暫存值
                        Exit Do
                    End If
                Loop
            End If
        ElseIf 整數比大小表單.位數同項.Value = True And 整數比大小表單.位數不同項.Value = True Then
            整數比大小表單.數字2.Caption = 範圍取數(下限, 上限)
        End If
    Else '依位數
        If 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = False Then
            If 整數比大小表單.以內項.Value = True Then
                下限差 = Application.WorksheetFunction.Max(10 ^ (位數 - 1), 數字1 - 限差)
                上限差 = Application.WorksheetFunction.Min(10 ^ 位數 - 1, CLng(數字1) + 限差)
                整數比大小表單.數字2.Caption = 範圍取數(下限差, 上限差)
            Else '限差以外
                If 限差 = 0 Then
                    整數比大小表單.數字2.Caption = 位數取數(位數)
                Else '限差 > 0
                    If 範圍數 > 0 Then
                        整數比大小表單.數字2.Caption = 位數陣列(Int(Rnd * 範圍數 + 1))
                    Else
                        整數比大小表單.數字2.Caption = "無解"
                    End If
                End If
            End If
        ElseIf 整數比大小表單.正數項.Value = False And 整數比大小表單.負數項.Value = True Then
            If 整數比大小表單.以內項.Value = True Then
                下限差 = Application.WorksheetFunction.Max(-10 ^ 位數 + 1, 數字1 - 限差)
                上限差 = Application.WorksheetFunction.Min(-10 ^ (位數 - 1), CLng(數字1) + 限差)
                整數比大小表單.數字2.Caption = 範圍取數(下限差, 上限差)
            Else '限差以外
                If 限差 = 0 Then
                    整數比大小表單.數字2.Caption = 位數取數(位數) * -1
                Else '限差 > 0
                    If 範圍數 > 0 Then
                        整數比大小表單.數字2.Caption = 位數陣列(Int(Rnd * 範圍數 + 1))
                    Else
                        整數比大小表單.數字2.Caption = "無解"
                    End If
                End If
            End If
        ElseIf 整數比大小表單.正數項.Value = True And 整數比大小表單.負數項.Value = True Then
            整數比大小表單.數字2.Caption = 位數取數(位數) * (Int(Rnd * 2) * 2 - 1)
        End If
    End If
   
    If 整數比大小表單.數字2.Caption = 數字1 Then
        If Not (整數比大小表單.以內項.Value = True And 限差 = 0) Then
            數字2
        End If
    End If
   
End Sub

TA的精华主题

TA的得分主题

发表于 2010-2-15 14:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-2-2 12:45 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 08:33 , Processed in 0.036933 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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