Использование свойства Range.End для расширения диапазона нескольких ячеек - PullRequest
0 голосов
/ 06 февраля 2019

Используя приведенные ниже данные и записав в Macro Recorder следующие действия, вы получите следующий код:

Ctrl + C 
Ctrl + Shift + Right Arrow 
Ctrl + R

Starting data with single-cell range selected

Sub Macro1()
    Selection.Copy
    Range(Selection, Selection.End(xlToRight)).Select
    Application.CutCopyMode = False
    Selection.FillRight
End Sub

Data after entering above keyboard strokes

Это то, что я ожидал.Выполнение абсолютно одинаковых нажатий клавиш, когда выбрано несколько ячеек, например, на изображении ниже, дает тот же результат и выдает одинаковый код в Macro Recorder.Однако повторное использование этого кода НЕ дает такого результата, когда выбрано несколько ячеек.Почему свойство Range.End не работает в этом контексте, т.е. расширяет диапазон нескольких ячеек?

Starting data with multi-cell range selected

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Получить LASTROW

Попробуйте:

  • Объявите диапазон с интервалом между ActiveCell для последнего непустого столбца;
  • Используйте для каждого , чтобы ввести все значения в каждой ячейке в диапазоне.

    Public Sub copyLastColumn()
    Dim val As Variant: val = Selection.Value
    Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets(1)
    
    Dim rng As Range: Set rng = sh.Range(ActiveCell, _
                                     sh.Cells(ActiveCell.Row, 
    sh.Cells(ActiveCell.Row, sh.Columns.Count).End(xlToLeft).Column))
    
    For Each el In rng
        el.Value = val
    Next el
    End Sub
    
0 голосов
/ 06 февраля 2019

Это произошло потому, что команды в макросе означают:

  1. Selection = Range ("A1")
  2. Range (Selection, Selection.End (xlToRight)). Select = Range («A1», Range («A1»). End (xlToRight)). Select

Это означает «выбор от ячейки A1 до последней ячейки в строке 1, содержащей данные».

Необходимо сделать различие между Выделением из строки 1 в макросе - это Диапазон («А1») и выделение, которое вы делаете с помощью мыши, прежде чем запускать макрос!

Вот почему, когда вы выбираете 2 соседние ячейки со значениями в них, вы думаете, что макрос ничего не делает - но макрос выполняет свою работу - вы можете быть осуждены в этом, если у вас есть разные значения в ячейках - например, Startв A1 и ST в A2 - после запуска макроса вы увидите, что значения в этих ячейках стали Start и Start

Этот URL можно увидеть больше: https://docs.microsoft.com/en-us/office/vba/api/excel.range.end

0 голосов
/ 06 февраля 2019
Sub copyfill()
With ThisWorkbook.Sheets(REFERENCE)
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    .Range(.Cells(1,"B"),.Cells(1,LastCol).Value = .Cells(1,1).Value
End With
End Sub

Возможно, не ответ на ваш вопрос, но это делает то же самое.Надеюсь, это поможет.

Как уже упоминал Лууклаг, если вы хотите автоматически заполнить диапазон, он должен быть добавлен к непрерывному диапазону.Заполните несколько непрерывных ячеек в col A, затем добавьте значение в B1.Col B выполнит автозаполнение без проблем.Попробуйте сделать то же самое, например, с заполненными A1 и A20, и вы заметите, что col B не заполняется автоматически до 20-й строки.

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