【问题标题】:Determine prime number from specified range从指定范围确定素数
【发布时间】:2020-05-25 19:31:49
【问题描述】:

我对 VBA 很陌生。我在excel电子表格的A列(即A1:A100)中有一个从1到100的指定数字列表。我希望我的代码在同一工作表的 B 列中的每个数字 1 到 100 旁边打印它是否是素数 [输出:“素数”或“非素数”] 的结果。这就是我到目前为止所拥有的。逻辑有效,但问题是代码在 n=1 之后似乎没有循环。任何建议如何使这项工作?

Sub primenumber()

Dim i As Integer
Dim divisor As Integer

Dim rng As Range, n As Range
Set rng = Range("A1:A100")

Worksheets("Sheet1").Activate


For Each n In rng
Debug.Print n
    divisor = 0
    For i = 1 To n
        If n Mod i = 0 Then
        divisor = divisor + 1
        End If
    Next i
    'Debug.Print i
        If divisor = 2 Then
        ActiveSheet.Range("B1").Value = "Prime"
        Else
        ActiveSheet.Range("B1").Value = "Not Prime"
        End If
Next n
End Sub

【问题讨论】:

标签: excel vba


【解决方案1】:

如果您只想查看原始程序中需要更改哪些内容以使其正常工作

抱歉,您说您已经在 A1:A100 中有数字 1-100,所以唯一的问题是目前所有结果都将转到 B1。

因此,否则逻辑是好的,您只需进行一些更改即可使其正常工作:

Sub primenumber()

Dim i As Integer
Dim divisor As Integer

Dim rng As Range, n As Range
Set rng = Range("A1:A100")

Worksheets("Sheet1").Activate


For Each n In rng
Debug.Print n
    divisor = 0
    For i = 1 To n
        If n Mod i = 0 Then
        divisor = divisor + 1
        End If
    Next i
    'Debug.Print i
        If divisor = 2 Then
        n.Offset(0, 1).Value = "Prime"
        Else
        n.Offset(0, 1).Value = "Not Prime"
        End If
Next n
End Sub

【讨论】:

    【解决方案2】:

    A1A100 中的 1 到 100,试试这个:

    Sub primenumber()
        With Range("B2")
            .FormulaArray = "=IF(OR(A2=2,A2=3),""prime"",IF(AND((MOD(A2,ROW(INDIRECT(""2:""&A2-1)))<>0)),""prime"",""not prime""))"
        End With
        Range("B2").Copy Range("B3:B100")
        Range("B2:B100").Value = Range("B2:B100").Value
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多