ARTICLE · 1349440
VBA之Excel应用第六章第五节 求余计算(Mod)与质数的检验
《VBA之Excel应用》(版权10178983)是非常经典的,是我推出的第七套教程,定位于初级,目前是第一版修订。这套教程从简单的录制宏开始讲解,一直到窗体的搭建,内容丰富,实例众多。大家可以非常容易的掌握相关的知识,这套教程共三册,十七章,都是我们在利用EXCEL工作过程中需要掌握的知识点,希望大家能掌握利用。今日讲解的内容是VBA之Excel应用第六章第五节求余计算(Mod)与质数的检验

【分享成果,随喜正能量】这个世界,不需要争论有无。有或没有是由个人认知所决定的,就如同你进入一个黑暗的房间里,是看不见其中的摆设的,只有开灯时,你才会看到物品的所在。这个灯其实就是打开你认知的灯。
第六章第五节求余计算(Mod)与质数的检验
大家好,我们这讲讲解的是求余计算(Mod)与质数的检验。求余数是算术中经常做的一种计算,这种计算利用VBA也是可以做到的,这就是Mod运算。这讲中,我们还要讲解质数的检验,当然也是利用的Mod运算。
1Mod 运算符
Excel VBA中的Mod运算符给出除法的余数,将两个数字相除,仅返回余数。
语法:result = number1 Mod number2
参数:
① result 必需。任何数值变量或属性。
② number1必需。任何数值表达式。
③ number2 必需。任何数值表达式。
l这种运算支持所有数值类型。包括无符号和浮点类型和Decimal类型。
lMod操作的结果保留被除数的符号,number1 因此它可以是正数也可以是负数。结果始终处于(- number2 ,number2 )范围内。
l如果 number1 或 number2 是浮点值,则返回相除的浮点余数。结果的数据类型是最小的数据类型。
l使用浮点数时,请记住,内存中不一定有精确的十进制表示形式。这可能会导致某些操作产生意外结果。
2质数判断的代码及讲解
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。最小的质数是2。
目前为止,人们未找到一个公式可求出所有质数。那么如何判断一个数是否为质数呢?我们下面提供一个VBA代码来做这个判断。
下面看我给出的代码:
Sub mynzE() '质数的判断
DimmyTem As Integer, myNumber As Long
myTem= 0
myNumber= InputBox("请输入需要测试的自然数(小于2147483647)")
MsgBox"您录入的数值是 " & myNumber & ",下面将开始质数的测试,这可能需要些时间!"
Fori = 1 To myNumber
IfmyNumber Mod i = 0 Then
myTem= myTem + 1
EndIf
Next
IfmyTem = 2 Then
MsgBoxmyNumber & " 是一个质数!"
Else
MsgBoxmyNumber & " 不是一个质数!"
EndIf
End Sub
代码截图:

代码解读: 1)Dim myTem As Integer, myNumber As Long
以上代码声明了两个变量,myTem作为测试的中间结果,myNumber是我们需要测试的数值。
2) myTem = 0
对作为测试的中间结果赋初始值。
3)myNumber = InputBox("请输入需要测试的自然数(小于2147483647)")
要求用户录入需要测试的数值。注意我们给出的变量的数据类型是long型,这种类型的数据最大值是2147483647,我们只能录入小于2147483647这个值。
4)For i = 1 To myNumber
IfmyNumber Mod i = 0 Then
myTem= myTem + 1
EndIf
Next
以上利用了mod运算来验证数值是否为质数,如果存在了其他数值可以被这个数整除,myTem会累加。
5)If myTem = 2 Then
MsgBoxmyNumber & " 是一个质数!"
Else
MsgBoxmyNumber & " 不是一个质数!"
End If
以上代码根据中间测试结果myTem来判断这个数值是否为质数,如果只存在两次整除,那么这个数就是质数。
3质数判断的代码运行效果
我们最后看看实际的测试效果,点击运行按钮:

这个时候会弹出一个对话框,要求我们录入测试的数值:

我们录入一个数值后点击确定:

再次点击确定:

今日内容回向:
1)什么是Mod运算?
2)测试质数的思路是怎样的?
3)我们录入数值后会弹出一个对话框:MsgBox "您录入的数值是 " & myNumber & ",下面将开始质数的测试,这可能需要些时间!",为了节约时间,代码上述思路,代码应该做什么改进?
本讲内容参考程序文件:工作簿06.xlsm
我20多年的VBA成果全在下面的资料中: 















































































