2013-03-26 2 views
0

Я пытаюсь присвоить значение всем нечетным ячейкам в определенном столбце/диапазоне. До сих пор я следующий код взят из другого вопроса, но оно не работает:Excel нечетные строки дают значение

Sub changeClass() 

    Dim r As Range 
    Set r = Range("B16").End(xlDown) 'set the range the data resides in 


    For i = 1 To r.Rows.Count 'merge step 
     If i Mod 2 = 1 Then 'this checkes to see if i is odd 
      r.Cells.Value = "value" 
     End If 
     Else 
      r.Cells.Value = "value2" 
    Next i 


End Sub 

В принципе мне нужно добавить в значение для каждой ячейки в столбце B из ячейки 16 вниз к последней ячейке я NThe столбец, в котором есть данные. В четных строках значение будет одно, а на нечетном - другим.

Большое спасибо!

+1

У вас есть Else после End If, это что приведет к ошибке для начала. – JMK

+0

Когда вы говорите, что он не работает, что вы имеете в виду (помимо проблемы, отмеченной JMK)? – chuff

+0

Кроме того, вы не указываете свой индекс на 'r.Cells'. – wakjah

ответ

1

Попробуйте это, я считаю, что это не работает, потому что вы не acessing каждую отдельную ячейку внутри вашего цикла. В следующем макросе я использую «rng» для представления всего диапазона ячеек и «r» для представления одной ячейки в каждом приращении цикла.

Sub changeClass() 

    Dim rng As Range 
    Dim r As Range 
    Set rng = Range(Cells(16,2),Cells(16,2).End(xlDown)) 

    For i = 1 To rng.Rows.Count 
     Set r = rng.Cells(i) 
     If i Mod 2 = 1 Then ' You may want to test if it is odd based on the row number (depends on your problem...) 
      r.Value = "Odd Value" 
     Else 
      r.Value = "Even Value" 
     End If 

    Next i 

End Sub 
+0

Отлично, спасибо, что много помогает, и я могу видеть, где я сейчас ошибся. Очень ценим, долгое время проводил работу над этим. – Alex

0

вы испортили свое утверждение if, не закрывайте его, прежде чем закрывать его только после того, как вы полностью закончите с ним! ;) Здесь:

Sub changeClass() 

Dim r As Range 
Set r = Range("B16").End(xlDown) 'set the range the data resides in 


For i = 1 To r.Rows.Count 'merge step 
    If i Mod 2 = 1 Then 'this checkes to see if i is odd 
     r.Cells.Value = "value" 
    Else 
     r.Cells.Value = "value2" 
    End if 
Next i 

End Sub 
2
Sub changeClass() 

    Dim r As Range 
    Dim i As Integer 

For Each r In Range("B16:B24") 'Change this range 

i = r.Row 
    If i Mod 2 = 1 Then 'this checks to see if i is odd 
     r.Cells.Value = "ODD" 

    Else 
     r.Cells.Value = "EVEN" 
    End If 

Next r 

End Sub 
0

Вам не нужна петля для этого:

Sub OddRowAlert() 
With Range("B16:B100") 
    .Formula = "=IF((MOD(ROW(B16),2)),""Odd"",""Even"")" 
    .Formula = .Value 
End With 
End Sub 

Просто заменить четной и нечетной в формуле с тем, что вы хотите

Смежные вопросы