2015-02-11 2 views
0

У меня есть файл, который имеет значения даты в качестве заголовков столбцов, а последний столбец всегда будет помечен как «Grand Total». Я хочу, чтобы просмотреть заголовки столбцов (которые находятся в ячейках D4: I4) и формулы ввода, которые будут заполнены позже.VBA Do До тех пор, пока не будет найдена строка, а затем шаг выхода

Например, если мы проверяем D4, и он не содержит «Гранд Итоги», то мне нужно вход ниже формул в ячейках L4 и L5:

Range("L4").Select 
Application.CutCopyMode = False 
ActiveCell.FormulaR1C1 = _ 
    "=""Weekending ""&TEXT(RC[-8],""mm/dd/yyy"")&"" Compliant?""" 
Range("L5").Select 
ActiveCell.FormulaR1C1 = _ 
"=IF((IF(RC17=""Duplicate"",SUMIF(C2,RC2,C[-8]),RC[-8]))<27,""Compliant"", 
    IF((IF(RC17=""Duplicate"",SUMIF(C1,RC1,C[-8]),RC[-8]))<30,""Approaching Limit"", 
    ""Over""))" 

Тогда он будет идти к ячейке E4, и если он не содержит «Grand Totals», то формулы должны быть введены в ячейки M4 и M5 ... После того, как «Grand Totals» найдены [в верхней части цикла], мне нужно выйти из цикла (но а не суб).

Я попытался собрать воедино биты из кода, который я нашел:

Dim GrTot As String 
Dim rng1 As Range 
Set rng1 = Range("D4:I4") 
GrTot = "Grand Total" 

Range("D4").Select 
Do While ActiveCell.Value <> GrTot 

Но я не знаю, куда идти. Любая помощь приветствуется.

EDIT:

С тех пор я попробовал другой метод, основанный на примере найден here. Это то, что у меня есть в настоящее время:

Dim x As Integer 
Dim y As Integer 
With Worksheets("Pivot") 
x = 4 
Do Until .Cells(4, x).Value = "Grand Total" 
    For y = 12 To 16 
     .Cells(4, y).Formula = "=""Weekending ""&TEXT(RC[-8],""mm/dd/yyy"")&"" 
      Compliant?""" 
     .Cells(5, y).Formula = "=IF((IF(RC17=""Duplicate"",SUMIF(C2,RC2,C[-8]), 
      RC[-8]))<27,""Compliant"",IF((IF(RC17=""Duplicate"", 
      SUMIF(C1,RC1,C[-8]),RC[-8])) 
      <30,""Approaching Limit"",""Over""))" 
    Next y 
    x = x + 1 
Loop 
End With 
End Sub 

Но этот не работает корректно. Он будет проходить через штраф, записывая формулы, как я просил, но он не выходит из цикла, когда он достигает столбца «Общий итог». Что я здесь делаю неправильно?

+0

Просто чтобы прояснить, вы хотите, чтобы проверить каждую ячейку и заполнить в формулах, если она не содержит «Гранд Итоги», или вы на самом деле хотите, чтобы петли до конца, когда вы найдете «Гранд Итоги»? –

+0

Ваша цель звучит просто. Вы должны использовать формулы 'Const' для R1C1, чтобы сделать код более читаемым. Вы переходите из строки 4 в нижнюю часть 'UsedRange'? Вы можете использовать 'Do Not ActiveCell.Value = GrTot', но вы можете закончить бесконечный цикл! Вам нужно быть более ясным. – PatricK

+0

D_Zab, мне нужно оба .... Мне нужно проверить каждую ячейку, если она не содержит «Grand Totals», тогда она должна заполнить формулу, но цикл должен завершиться, как только будут найдены «Grand Totals». Я просто не знаю, как пройти три диапазона за один раз, чтобы выполнить эти шаги. Итак, если D4 =/= «Grand Totals», тогда поместите формулу в L4 и L5, тогда если E4 =/= «Grand Totals», поместите ту же формулу в M4 и M5 и так далее, пока не будут найдены «Grand Totals» , затем выйдите из цикла. –

ответ

1

Петля через каждую ячейку диапазона; если ячейка не имеет значения, вы можете написать все, что есть в ячейке, а затем что-то со смещением. Как только общее количество будет найдено в вашем диапазоне, цикл может выйти и перейти к следующему диапазону.

For Each item In Range 

    If item.Value = GrTot Then 
    Exit For 
    'Perform action on cell 
    item.Value = formula 
    item.offset(0,1).Value = formula 
    item.offset(0,2).Value = formula 

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

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