2015-02-27 3 views
0

Со следующим кодом я прохожу через диапазон около 200 ячеек [Диапазон («R» & i)], чтобы проверить значение Temp_Sheet.Range («B2») находится в пределах диапазона. Этот код ниже отлично работает.добавить значение, если цикл не отображает значение в пределах диапазона

Вот проблема: если цикл завершен и не находит значение в пределах диапазона, мне нужно значение B2 добавлено в следующую пустую строку. Как мне это сделать? Заранее спасибо за помощь. Могу ли я добавить форматирование в цикле, которое вызовет другую функцию sub/function, если значение не найдено?

For i = 6 To ColarLastRow 
     If ChangeSheet.Range("R" & i).Value = Temp_Sheet.Range("B2") Then 
     ChangeSheet.Range("G" & i) = Sum_Range 
     ChangeSheet.Range("G" & i).Interior.Color = RGB(0, 100, 0) 
     Else: End If 
Next i 

ответ

0

Похоже, уже есть некоторые хорошие ответы, но это то, что я придумал ....

Dim ChangeSheet As Worksheet 
Dim Temp_Sheet As Worksheet 
Dim ValueFound As Boolean 
Set ChangeSheet = Sheets("ChangeSheet") 
Set Temp_Sheet = Sheets("Temp_Sheet") 
ColarLastRow = ChangeSheet.Cells(Rows.Count, 18).End(xlUp).Row 
ValueFound = False 

For i = 6 To ColarLastRow 
     If ChangeSheet.Range("R" & i).Value = Temp_Sheet.Range("B2") Then 
     ChangeSheet.Range("G" & i) = Sum_Range 
     ChangeSheet.Range("G" & i).Interior.Color = RGB(0, 100, 0) 
     ValueFound = True 
     Else: End If 
Next i 

If ValueFound = False Then 
    ChangeSheet.Range("R" & ColarLastRow + 1).Value = Temp_Sheet.Range("B2").Value 
End If 
1

Вам нужно установить некоторый флаг внутри цикла:

Dim AddNew As Boolean 
AddNew = True 

For i = 6 To ColarLastRow 
     If ChangeSheet.Range("R" & i).Value = Temp_Sheet.Range("B2") Then 
     ChangeSheet.Range("G" & i) = Sum_Range 
     ChangeSheet.Range("G" & i).Interior.Color = RGB(0, 100, 0) 
     AddNew = False 
     Else: End If 
Next i 

If AddNew Then 
    'place your code here 
End If 
0
Dim counter as Integer 
counter = 0 
For i = 6 To ColarLastRow 
     If ChangeSheet.Range("R" & i).Value = Temp_Sheet.Range("B2") Then 
     ChangeSheet.Range("G" & i) = Sum_Range 
     ChangeSheet.Range("G" & i).Interior.Color = RGB(0, 100, 0) 
     Counter = counter + 1 
     Else: End If 
Next i 
If counter = 0 then 
ChangeSheet.Range("R" & ChangeSheet.Range("R" & ChangeSheet.Rows.Count).End(xlUp).Offset(1,0) = Temp_Sheet.Range("B2") 
End If 
0
dim Rng as Range 
Set rng = ChangeSheet.Range("R6:R" & ColarLastRow).Find _ 
       (What:=Temp_Sheet.Range("B2"), LookIn:=xlValues) 
'set LookIn:=xlValues, xlFormulas, as appropriate 
'set MatchCase:=True or False, as appropriate 
If Rng is Nothing then 
    ChangeSheet.Range("R" & ColarLastRow+1).Value = 'something 
    'set color here 
Else 
    ChangeSheet.Range("G" & rng.row) = Sum_Range 
End if 

Использование .find будет намного быстрее, чем циклически. Если вам нужно найти несколько вхождений, то после Set Rng = добавить следующее:

Set rng = ChangeSheet.Range("R6:R" & ColarLastRow).Find _ 
       (What:=Temp_Sheet.Range("B2"), LookIn:=xlValues) 
While Not Rng is Nothing 
    'do your stuff here 
    Set rng = ChangeSheet.Range("R" & Rng.Row & ":R" & ColarLastRow).Find _ 
       (What:=Temp_Sheet.Range("B2"), LookIn:=xlValues) 
Wend 
+0

@FreeMan Мне нравится ответ, используя «Найти», но не могли бы вы прояснить вторую часть, если хотите сделать цикл? – Davesexcel

+0

@Davesexcel Я обновил второй пример цикла, код. Если вам нужно обработать каждое возникновение вещи, поместите эту обработку в раздел '' do your stuff here'. Этот код найдет первое вхождение, обработает все, что нужно сделать, а затем найдет следующее вхождение. Он будет продолжать цикл до тех пор, пока ... навсегда, если вы не измените то, что ищете. т. е. поиск 'cell.text =" Fred "', 'set cell.offset (1,0) .text =" Flintstone "'. Если он найдет один cell.text = «Fred», он будет зацикливаться навсегда, так как вы не меняете значение ячейки .... – FreeMan

+0

... Вам нужно было сохранить местоположение 1-й найденной ячейки, а затем проверить на посмотрите, если вы снова нашли эту же ячейку и остановитесь. – FreeMan

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