2015-01-16 6 views
-1

Я новичок в vba, и я пытаюсь создать модуль, который принимает значение в столбце C (который должен сказать «In Progress») и делает его «нейтральным» цветом если значение в той же строке в столбце E меньше 0,5 (или 50%), но мне не повезло. У меня есть переменная счетчика, чтобы отслеживать строку, в которой я включен. Любые советы были бы полезными, и если бы вы могли порекомендовать мне хороший источник для обучения vba, я бы очень признателен.Изменение цвета в одном столбце на основе значения в другом

If Range("C1") = "Status" Then 

    Range("C1").Select 

    Do Until ActiveCell.Value = "" 

     If ActiveCell.Offset(1, 0).Value = "In Progress" Then 
      If Range("E" & counter).Value < 0.5 Then 
       ActiveCell.Offset(1, 0).Style = "Neutral" 
      End If 
     End If 

     ActiveCell.Offset(1, 0).Select 

     Columns("C").ColumnWidth = 13 

     counter = counter + 1 

    Loop 

End If 

End Sub

+0

Просить «рекомендовать мне хороший источник для изучения ВирусБлокАда» риски, имеющие этот вопрос закрыт, как [по теме] (http://stackoverflow.com/help/on-topic). Если у вас есть проблемы с кодом, см. [Mcve] (http://stackoverflow.com/help/mcve) о том, как описать проблему. VBA для этого кажется ненужным, если не требуется бесконечное количество раз. – pnuts

+0

Считаете ли вы использование встроенной функции условного форматирования в Excel? – guitarthrower

+0

Спасибо, что ответили. Это кажется достаточно простым, однако это относится к нескольким листам, каждый из которых содержит около 300 строк, поэтому использование модуля поможет сократить время для такой утомительной задачи. – Ken

ответ

0

Непроверенные:

Dim c As Range, sht As WorkSheet 

Set sht = ActiveSheet 
If sht.Range("C1").Value = "Status" Then 

    Set c = sht.Range("C2") 

    Do Until Len(c.Value) = 0 

     If c.Value = "In Progress" Then 
      If c.EntireRow.Cells(1, "E").Value < 0.5 Then 
       c.Style = "Neutral" 
      Else 
       c.Style = "Normal" 
      End If 
     End If 

     Set c = c.Offset(1, 0) 
    Loop 

    sht.Columns("C").ColumnWidth = 13 

End If 
+0

ДА! Это исправлено, спасибо большое – Ken

0

Насколько я понял вашу проблему, и это подходит для вас, вы можете попробовать это. Следующий код ищет значение «Выполняется» во всем столбце A, и если это значение найдено, и одна и та же ячейка строки в столбце C меньше 0,5, то устанавливает цвет ячейки в столбце A «no fill» ,

Sub searchValue() 
    Dim cell As Range 
    For Each cell In Worksheets(1).Columns(1).Cells 
     If cell = "In Progress" Then 
      If cell.Offset(0, 2) < 0.5 Then cell.Interior.ColorIndex = 0 
     End If 
    Next cell 
End Sub 
+0

Спасибо за ваш вклад. Это помогло мне лучше понять мою проблему. – Ken

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