Определить простое число из указанного диапазона - PullRequest
0 голосов
/ 25 мая 2020

Я новичок в VBA. У меня есть указанный список чисел от 1 до 100 в столбце A (например, A1: A100) в электронной таблице Excel. Я хочу, чтобы мой код печатал результат того, является ли это простым числом [вывод: «Prime» или «Not Prime»] рядом с каждым числом от 1 до 100 в столбце B на том же листе. Это то, что у меня есть. Logi c работает, но проблема в том, что код не зацикливается после 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

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Bu, если вы хотите просто посмотреть, что нужно изменить в вашей исходной программе, чтобы заставить ее работать

Извините, вы сказали, что у вас уже есть номера 1-100 в A1: A100, поэтому единственная проблема заключается в том, что все в настоящий момент результаты собираются в B1.

Так что в противном случае logi c в порядке, и вы можете заставить его работать, просто сделав пару изменений:

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
0 голосов
/ 25 мая 2020

От 1 до 100 дюймов от A1 до A100 , попробуйте следующее:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...