Есть ли способ динамически выбрать столбец Excel с помощью VBA? - PullRequest
0 голосов
/ 05 февраля 2020

Задача: мне нужно скопировать значение ячейки из E12 в диапазон E23: E25. Я легко достиг этого, используя простую инструкцию копирования и вставки в редакторе. Но диапазон не всегда фиксирован. Мне удалось зафиксировать начальную точку этого диапазона как: Set rangeStart = Range("E12").End(xlDown).Offset(6, 0). Я не могу использовать это в качестве отправной точки для оператора выбора диапазона следующим образом:

Range("E23:E" & Range("A23").End(xlDown).Row).Select

Вот как я выбираю диапазон, который будет заполнен данными в следующем шаг через оператор вставки. Как мне отредактировать первую половину этого диапазона вызова на что-то более динамичное c? Использование rangeStart вместо E23:E.

Я только начал работать с Excel VBA, так что это может быть очень простой c вопрос. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Прежде всего, я хотел бы остановиться на том, что использование Select в большинстве случаев не рекомендуется. Поскольку вы просто хотите вставить значение в другие ячейки, вы можете просто использовать строку, как в следующем примере:
Range("A1:A10").Value = Range("C2:C11").Value
или
Range("A1:A10").Value = 1
Это заполнит диапазон A1:A10 значениями C2:C11 или целым числом 1 соответственно. Обратите внимание, что два диапазона в первой строке имеют одинаковый размер.

Теперь, динамический c подход к вашей проблеме может быть чем-то вроде следующего примера

'Initialise two range variables
Dim SourceRange As Range, TargetRange As Range
'And integers for target rows
Dim fRow As Long, lRow As Long

With ThisWorkbook 'Assuming the code needs to be performed on the Workbook that hosts the macro
    'Determine target rows
    fRow = 23 'You have not specified how the first row should be determined
    lRow = .Cells(fRow, "E").End(xlDown).Row

    'Populate range vars
    Set SourceRange = .Range("E12")
    Set TargetRange = .Range(.Cells(fRow, "E"),.Cells(lRow, "E"))

    'Paste values to target range
    TargetRange.Value = SourceRange.Value
End With

Обратите внимание, что поскольку вы не указали, как это следует определять, приведенный выше код жестко запрограммирован, чтобы иметь целевой диапазон в столбце E, который начинается в строке 23.

0 голосов
/ 05 февраля 2020

Если у вас есть

Set rangeStart = Range("E12").End(xlDown).Offset(6, 0)

У вас также может быть

Set rangeEnd = Range(rangeStart, Range("E" & Range("A23").End(xlDown).Row)

, который будет формировать диапазон от первой ячейки до второй ячейки.

Но прочитайте ссылка размещена Виталием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...