2014-09-04 7 views
4

Я пытаюсь заполнить формулы в столбце С, как это:VBA: Пропустить ячейки в диапазоне

LastRow = Range("A65536").End(xlUp).Row 
Range(Cells(1, 3), Cells(LastRow, 3)).Formula = "=A1*B1" 

И это прекрасно работает. Но можно ли пропустить эти ячейки в столбце C, значение которого, например,> 0?

A B C -> A B C 
3 2 0 3 2 6 
3 4 0 3 4 12 
5 6 5 5 6 5 <- this value is not updated 
+1

@Mehow: возможно :) –

+1

@SiddharthRout ++ на ваш ответ, и я беру мой последний комментарий назад :) – 2014-09-04 08:47:26

ответ

1

Один из способов сделать это с помощью цикла:

Sub test() 

      Dim rngTest As Range 
      Dim rngCell As Range 

      LastRow = Range("A65536").End(xlUp).Row 
      Set rngTest = Range(Cells(1, 3), Cells(LastRow, 3)) 
      Application.Calculation = xlCalculationManual 
      For Each rngCell In rngTest.Cells 
       If Not rngCell <> "" Then 
        rngCell.Formula = "=" & rngCell.Offset(, -2).Address & "*" & rngCell.Offset(, -1).Address 
       End If 
      Next 
      Application.Calculation = xlCalculationAutomatic 
    End Sub 
+0

Спасибо, ваше решение было немного легче понять для меня. Он отлично работает! – gaffcz

6

Для этого вам нужно будет внести небольшое изменение в то, как выглядят ваши данные. Например, вам нужно добавить «Заголовок» в первую строку. Поэтому мы бы сделать это, потому что мы использовали бы AutoFilter

Допустим, что ваши данные выглядит следующим образом

enter image description here

Теперь используйте этот код

Sub Sample() 
    Dim ws As Worksheet 
    Dim copyFrom As Range 
    Dim lRow As Long 

    '~~> Change this to the relevant sheet 
    Set ws = ThisWorkbook.Worksheets("Sheet1") 

    With ws 

     '~~> Remove any filters 
     .AutoFilterMode = False 

     '~~> Get lastrow in column c 
     lRow = .Range("C" & .Rows.Count).End(xlUp).Row 

     '~~> Filter the col C to get values which have 0 
     With .Range("C1:C" & lRow) 
      .AutoFilter Field:=1, Criteria1:="=0" 

      Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible) 

      '~~> Assign the formula to all the cells in one go 
      If Not copyFrom Is Nothing Then _ 
      copyFrom.Formula = "=A" & copyFrom.Row & "*B" & copyFrom.Row 
     End With 

     '~~> Remove any filters 
     .AutoFilterMode = False 
    End With 
End Sub 

Выход

enter image description here

+0

Большое спасибо! :-) – gaffcz

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