Код VBA для копирования в конец существующих данных в соседнем поле

#vba #copy-paste

#vba #копировать-вставить

Вопрос:

Предполагается, что мой код макроса VBA вставит столбец C, добавит заголовок, а затем введет формулу в ячейку C2 =text (B2, » мм / дд / гггг «) Затем я хочу скопировать и вставить эту формулу в нижнюю часть данных. Проблема в том, что диапазон меняется с каждой таблицей. Я должен закодировать его, чтобы просмотреть столбец B, перейти к концу данных и скопировать формулу до строки 2?

Просто учусь делать макросы и нужно модифицировать скрипт.

Вот мой код:

 Sub TEST1()
'
' TEST1 Macro
'

'
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "Revised Billed Date"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=TEXT(RC[-1],"" mm/dd/yyyy "")"
    Range("C2").Select
    Selection.Copy
    Range("B2").Select
    Selection.End(xlDown).Select
    Range("C8").Select
    Range(Selection, Selection.End(xlUp)).Select
    ActiveSheet.Paste
    Range("C7").Select
    Selection.End(xlUp).Select
    Range("C2").Select
End Sub
 

введите описание изображения здесь

Ответ №1:

Я считаю, что это решит проблему за вас. Я буду рекомендовать вам научиться использовать With , End with лучше организовывать и иметь более чистый код. Это позволит вам использовать .Range и. .Paste

Все, что я сделал, это развернулся вокруг выбранных ячеек, используя .Offset() , поместил себя в последнюю строку с содержимым столбца B и создал диапазон в столбце C, в который я, наконец, вставлю содержимое скопированной ячейки.

 Sub TEST1()

With ActiveSheet

    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight
    
    .Range("C1").Select
    Selection.FormulaR1C1 = "Revised Billed Date"
    
    .Range("C2").Select
    Selection.FormulaR1C1 = "=TEXT(RC[-1],"" mm/dd/yyyy "")"
    
    Selection.Copy

    ''''''Find last cell with content in column B and go back to column C

    Selection.Offset(0, -1).End(xlDown).Offset(0, 1).Select
    
    '''''Create a range from the end of column C up until below C2 cell  

    .Range(Selection, Selection.End(xlUp).Offset(1, 0)).Select

    .Paste

End With
End Sub