Excel VBA编写支持单元格引用的素数判断prime函数问题求助
现有代码问题梳理
- 单元格取值逻辑错误:
Range("x")会尝试读取名称为x的工作簿/工作表区域,而非参数x传入的单元格地址,需删除x两侧的引号 - 素数判断逻辑错误:
- 循环起始值设为1会导致所有数模1都为0,直接误判
- 每次循环都直接覆盖返回值,最终结果仅保留最后一次循环的判断结果,不符合素数「仅能被1和自身整除」的判断规则
- 函数调用错误:VBA 原生没有
ROUNDOWN方法,调用工作表函数需指定WorksheetFunction前缀,也可直接用Int()对平方根取整简化写法 - 变量溢出风险:
Integer类型最大仅支持到32767,判断更大数值会触发溢出,建议替换为Long类型 - 缺少边界校验:小于2的数值天然不是素数,需提前判断过滤
修正后可运行代码
Function prime(x As String) As Boolean Dim i As Long, y As Long ' 读取参数对应单元格的值 y = Range(x).Value ' 小于2的数直接返回非素数 If y < 2 Then prime = False Exit Function End If ' 2是唯一的偶素数,直接返回真 If y = 2 Then prime = True Exit Function End If ' 偶数直接返回非素数 If y Mod 2 = 0 Then prime = False Exit Function End If ' 从3开始循环到平方根,步长为2跳过偶数 For i = 3 To Int(Sqr(y)) Step 2 If y Mod i = 0 Then prime = False Exit Function ' 找到可整除的数,直接返回结果 End If Next i ' 循环结束未找到可整除的数,是素数 prime = True End Function
用法说明
在工作表任意单元格输入公式 =prime("B1") 即可判断B1单元格存储的数值是否为素数,返回TRUE代表是素数,返回FALSE代表非素数。
内容的提问来源于stack exchange,提问作者Kannn
相关产品推荐
相关产品推荐

