Проверка целочисленного значения против значения с плавающей запятой - PullRequest
0 голосов
/ 18 марта 2019

I Мой VBA, кажется, не совсем работает. Мне нужно, чтобы умножить значение в столбце N на 2, если это десятичное число и ничего не делать для всех других значений.

в настоящее время это

Sub multiply()
Dim i, j, k, l As Integer

Dim n As Variant

i = Application.InputBox("enter end row")

j = Application.InputBox("enter factor")

For k = 1 To i

n = Cells(k, 14) * j

If VarType(n) = vbSingle Then Cells(k, 14) = n

Next k

End Sub

Это ничего не делает. Не знаю почему

1 Ответ

1 голос
/ 18 марта 2019

Ваш For цикл может быть записан так:

For k = 1 To i

    If Cells(k, 14) <> Int(Cells(k, 14)) Then 'if it's decimal
        Cells(k, 14) = Cells(k, 14) * j 'then multiply cell by factor
    End If

Next k

Обратите внимание, что я определяю, является ли он десятичным, проверяя, отличается ли Int() этого числа от самого числа.

Пара советов:

  • Если вы всегда ищете конечную строку, вам не нужно запрашивать ввод у пользователя. Вы можете использовать endRow = Cells(1,14).End(xlDown).Row (при условии, что ваши данные начинаются с первой ячейки столбца 14).
  • Используйте более подходящие имена переменных, вы будете благодарны, если будете перечитывать этот код через несколько недель. Например, j должен называться multiplyFactor, i должен называться endRow.
  • Когда вы пишете Dim i, j, k, l As Integer, вы объявляете i, j и k как Variant (тип по умолчанию) и только l как Integer, который вы даже не используете в своем код (по крайней мере, не в том, что вы разместили). Вы должны написать вместо Dim i As Integer, j As Integer, k As Integer, l As Integer.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...