2014-09-29 2 views
-1

2 последних условия не принимаются во внимание при использовании нижеследующего кода. Можете ли вы помочь понять, почему? Также диапазон «r» возвращает мне ожидаемые результаты + 1 ряд. Мне это не удалось изменить. Есть идеи?Кондиционирование не учитывается в a If statment с excel VBA

Dim x As Range 
Dim r As Range 
Dim j As Range 

Set r = Range("J2").End(xlDown) 
Set j = Range("D2").End(xlDown) 
    For Each x In Range("J2", r) 
    If x.Value < 0 And j = ("long") Or j = ("") Then 
    x.Offset(1, 0).Select 
    ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-1]" 
    End If 
    Next 
End Sub 
+0

могли бы Вы более конкретно о том, что проблема? и я не думаю, что вы можете установить такой диапазон (не уверен, хотя). –

+0

Проблема только в 1-м условии работает «если x.Value <0», «j = (« long ») или j = (« »)« не учитываются. Я также пробовал «j.value», J.cells », но он тоже работал. –

+0

возможно' if (x.Value <0) И (j = ("long") Или j = ("")) '? Или некоторые другие комбинации, которые вы пытаетесь достичь с этим заявлением. Имейте в виду порядок выполнения операторов – 2014-09-29 09:55:44

ответ

0

FYI: диапазон r в вашем коде будет последней используемой ячейкой столбца J, начиная с J2. Между ними не должно быть пустой ячейки.

попробовать это:

Sub posted() 
Dim x As Range 
Dim r As Range 
'Dim j As Range 

Set r = Range("J2").End(xlDown) 
'Set j = Range("D2").End(xlDown) 

For Each x In Range("J2", r) 

If (x.Value < 0) And ((x.Offset(, -6).value = "long") _ 
Or (x.Offset(, -6).value = "")) Then 

'''''''''dont know if you want cell value by long or number format of the cell'''' 
'If (x.Value < 0) And ((x.Offset(, -6).NumberFormat = "Number") _ 
Or (x.Offset(, -6) = "")) Then 
''''''''' 

x.Offset(1, 0).Select  
ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-1]" 
End If 
Next 
Set r = Nothing 
End Sub 
+0

Это совершенно то, что я искал (я хотел, чтобы стоимость ячейки была длинной). Большое спасибо за вашу помощь. –