2015-09-10 2 views
2

У меня есть текущий Sub, который упорядочивает данные определенным образом для меня и даже вводит формулу в первой строке рабочего листа, но я столкнулся с проблемой того, что он сможет настроить как далеко заполнить формулу на основе пустого/непустого статуса соседнего столбца. Например, каждый раз, когда я запускаю отчет, я получаю непредсказуемое количество возвращенных записей, которые будут заполнять строки в столбце A, однако, поскольку я хочу извлечь строки из этих возвращенных записей в разные столбцы, мне нужно ввести формулы для каждая итерация в следующих трех столбцах (B, C и D). Есть ли способ вставить строку, которая будет оценивать количество строк в столбце A, которые не являются пустыми, а затем заполнять формулы в столбцах B, C и D этой последней строке? (Я знаю, что таблицы будут делать это автоматически, как только информация будет введена в первой строке, но по логистическим причинам я не могу использовать таблицы).Подпрограмма VBA для заполнения столбца формулы внизу

Мой текущий код, который заполняет формулу в колонке B, Ряд 2:

Range("B2").Select 
ActiveCell.FormulaR1C1 = "=MID(RC[-1],FIND(""By:"",RC[-1])+3,22)" 

Спасибо!

ответ

3

Формула, которую вы на самом деле нужно

=IF(A2="","",MID(A2,FIND("By:",A2)+3,22)) 

вместо

=MID(A2,FIND("By:",A2)+3,22) '"=MID(RC[-1],FIND(""By:"",RC[-1])+3,22)" 

Это проверяет, есть ли что-нибудь в клетке A и затем действовать "соответственно"

Также Excel позволяет ввести формулу в диапазоне от за один раз. Так что если вы хотите, чтобы формула для перехода в клетку сказать, A1:A10, то вы можете использовать этот

Range("A1:A10").Formula = "=IF(A2="","",MID(A2,FIND("By:",A2)+3,22))" 

Теперь, как мы определяем, что 10? т.е. Последняя строка. Простой

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

    '~~> Change the name of the sheet as applicable 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> Find Last Row in Col A 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     .Range("B2:B" & lRow).Formula = "=IF(A2="""","""",MID(A2,FIND(""By:"",A2)+3,22))" 
    End With 
End Sub 

More About How To Find Last Row

+0

Ах, это прекрасно работает! Спасибо! – user3794203

0

Вы можете использовать это, чтобы заполнить столбцы B: D основан на колонке

Range("B2:D" & Range("A" & Rows.Count).End(xlUp).Row).Formula = _ 
    "=MID($A2,FIND(""By:"",$A2)+3,22)" 
Смежные вопросы