2016-03-14 5 views
1

У меня есть формула, которая ищет значение «Date:» в столбце A и вставляет формулу в соседнюю ячейку B, но я не могу понять, как сделать динамическую формулу.Вставить формулу с динамической строкой

Итак, если у меня есть значение в A6 и в A8 - я бы хотел, чтобы вставленная формула имела тот же номер строки T6 и T8. Сейчас он использует один и тот же номер строки каждый раз.

Sub Check() 
 
Dim rng As Range 
 
Dim i As Long 
 
    
 

 
Set rng = Range("A8:A48") 
 
    
 
For Each cell In rng 
 
    'test if cell is empty 
 
    If cell.Value = "Date:" Then 
 
     'write to adjacent cell 
 

 
     cell.Offset(0, 1).Formula = "=TEXT(T8,""mmm-dd-yyyy"")&"" | ""&V8&"" - ""&U8&"" | Dept: ""&W8" 
 
     
 
    End If 
 
Next 
 
End Sub

ответ

0

Используйте стиль R1C1 форматирования:

Sub Check() 
    Dim rng As Range 
    Dim i As Long 
    Dim cell As Range 'Remember to declare cell as a range. 

    'Qualify your ranges with at least the sheet name. 
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A8:A48") 

    For Each cell In rng 
     'test if cell is empty 
     If cell.Value = "Date:" Then 
      'write to adjacent cell 

      'cell.Offset(0, 1).Formula = "=TEXT(T8,""mmm-dd-yyyy"")&"" | ""&V8&"" - ""&U8&"" | Dept: ""&W8" 
      cell.Offset(0, 1).FormulaR1C1 = "=TEXT(RC20,""mmm-dd-yyyy"")&"" | ""&RC22&"" - ""&RC21&"" | Dept: ""&RC23" 

     End If 
    Next 
End Sub 

RC20 означает эту строку, столбец 20. R1C20 означает, строка 1, столбец 20. RC[-1] означает эту строку, один столбец влево.
http://www.numeritas.co.uk/2013/09/the-%E2%80%98dark-art%E2%80%99-of-r1c1-notation/

+0

Большое спасибо, это сработало отлично! –

1

Вы можете прочитать в .Row свойстве cell объекта и использовать его в формуле.

Как так:

Sub Check() 
    Dim rng As Range 
    Dim i As Long 
    Dim lRow As Long 

    Set rng = Range("A8:A48") 

    For Each cell In rng 
     'test if cell is empty 
     If cell.Value = "Date:" Then 
      'write to adjacent cell 

      lRow = cell.Row 'Get the current row 

      'Use the lRow variable in the formula to create the formula dynamically 
      cell.Offset(0, 1).Formula = "=TEXT(T" & lRow & ",""mmm-dd-yyyy"")&"" | ""&V" & lRow & "&"" - ""&U" & lRow & "&"" | Dept: ""&W" & lRow & "" 

     End If 
    Next 
End Sub 

Я считаю, что формула быть установлена ​​правильно. Быстрый тест показал, что он выводит действительную формулу. Дайте мне знать, если что-то нуждается в настройке.

1

Установить переменную для значения строки и преобразовать его в строку для вашей формулы вставки, как так

Sub Check() 
    Dim i As Integer 
    Dim j As String 

    'for each row 
    For i = 8 To 48 
     If Cells(i, 1).Value = "Date:" Then 
      'set the string for use in the formula 
      j = Trim(Str(i)) 
      Cells(i, 2).Formula = "=TEXT(T8,""mmm-dd-yyyy"")& "" | "" &V" & j & "& "" - "" &U" & j & "&"" | Dept: ""&W" & j & "" 
     End If 
    Next 
End Sub 

Если диапазон действительно этот ограниченный, вы бы лучше установления условной формулы прямо на вашем листе:

=IF(A8="Date:",TEXT(T8,"mmm-dd-yyyy") & " | " & V8 & " - " & U8 & " | Dept: " & W8,"") 

Это отобразит текст только при условии, что A8 = Дата :. Перетаскивание формулы вниз увеличит номер строки

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