#excel #vba
Вопрос:
Я хотел бы установить различную формулу для отрицательных и положительных значений.
Мой приведенный ниже код считается допустимым, но работает только формула для отрицательных значений.
Dim wks As Worksheet
Dim sunString As String
Dim rng3 As Range
sunString = "-"
Set wks = ThisWorkbook.ActiveSheet
Set rng3 = wks.Range("F2:F" amp; lRow)
With rng3
If InStr(sunString, "-") > 0 Then
Range("W2:W" amp; lRow).Formula = "=R2-U2-V2"
Else
Range("W2:W" amp; lRow).Formula = "=R2 U2 V2"
End If
Вторая формула (утверждение else) вообще не работает.
Что здесь не так?
Комментарии:
1. Что такое
rng3
? Вы ничего не назначили ему (илиlRow
ему )…. И ваш тест в настоящее время эквивалентенIf InStr("-", "-") > 0 Then
2. Вам необходимо предоставить более подробную информацию, включая данные.
3. Я добавил данные rng3
4.
With rng3
Он ни для чего не используется, вы вообще не ссылаетесь на него внутри блока with. Вы намеревалисьInStr
или.Formula
хотели посмотреть на какую-то ценность внутриrng3
?
Ответ №1:
Почему бы не использовать единую формулу, включающую условие, и не избавиться от ненужного зацикливания?
Sub LoopRange()
Dim wks As Worksheet
Dim lRow As Long
Dim rng As Range
Set wks = ThisWorkbook.ActiveSheet
lRow = wks.Cells(wks.Rows.Count, "F").End(xlUp).Row
Set rng = wks.Range("W2:W" amp; lRow)
rng.Formula = "=IF(F2<0,R2-U2-V2 ,R2 U2 V2)"
End Sub
Если данные в столбце F не являются числовыми, вы можете использовать эту формулу для проверки -
.
rng.Formula = "=IF(LEFT(F2)=""-"",R2-U2-V2 ,R2 U2 V2)"
Комментарии:
1. Он по-прежнему использует только вторую формулу R2 U2 V2
2. Что именно у вас есть в колонке F? Являются ли данные числовыми или текстовыми?
3. смотрите скриншот выше. Я думаю, это цифровой текст. Не число, а текстовая строка.
4. Я также попробовал что-то вроде этого: rng5. Формула = «=ЕСЛИ(F2=’ — ‘,R2-U2-V2 ,R2 U2 V2)», но я получаю ошибку, определенную объектом или приложением
5. Я добавил в свой ответ формулу, которая будет проверять текстовые значения, начиная с
-
.