Я предполагаю, что вы переводили это с другого языка? Вы действительно должны были указать, какие линии были неудачными и что вы исследовали.
Например, простой поиск при печати в VBA сказал бы, что Print
недействителен, но что Debug.Print
можно использовать для «консольной» записи, т.е. записи в непосредственное окно (которое вы открываете с помощью Ctrl + G ).
“”
: сейчас я не могу вспомнить правильный термин. Это типично при копировании между приложениями, поэтому будьте осторожны. Речевые метки для использования в редакторе Visual Basic должны быть ""
для компиляции.
Если вы поставите Option Explicit
в верхней части своего кода, это даст вам много хороших предупреждений о объявлениях переменных и их написании.
Вы можете перейти от 100 к Integer
, но в этом случае нет преимуществ от Integer
по сравнению с Long
, поэтому использование Long
безопаснее, если в будущем вы решите выйдите за пределы Integer
, и тогда вы рискуете переполниться. Вам также, при достаточно высоком верхнем пределе, нужно вычленить mod
.
Функция MOD возвращает ошибку, если делитель (второй аргумент
в функции MOD), умноженное на 134 217 728, меньше или равно
на оцениваемое число (первый аргумент в MOD
функция).
Microsoft предлагает переработать как =number-(INT(number/divisor)*divisor)
; который, я думаю, вы могли бы заменить INT
на CLng
, чтобы сохранить с Longs.
Option Explicit
Private Sub cmdPrime_Click()
Dim p As Long, n As Long, i As Long, iCounter As Long
p = 1
With ActiveSheet
.Cells(iCounter + 1, 1) = "Prime Numbers are: " 'Debug.Print "Prime Numbers are: "
For n = 2 To 100 ''< As pointed out 1 is not technically a prime btw so can start at 2
For i = 2 To n - 1
If n Mod i = 0 Then ' If n - (CLng(n / i) * i) = 0 Then
p = 0
Exit For
Else
p = 1
End If
Next
If p = 1 Then
iCounter = iCounter + 1
.Cells(iCounter, 1) = n 'Debug.Print n
End If
Next
End With
End Sub
Чтобы сохранить для будущих читателей: дополнительные полезные комментарии от @ ChrisNeilsen.
Чтобы проверить, является ли n
простым, вам нужно только проверить делимость с точностью до квадратного корня из n
. И вам нужно только проверить делимость на ранее обнаруженные простые числа. И вы можете пропустить даже значения n
.