Как вставить данные до следующей пустой ячейки несколько раз в одном столбце? - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь взять один столбец с несколькими блоками информации (т.е. 6 списков, разделенных пробелом 4-5 строк в одном столбце) и вставить идентификатор рядом с каждой записью в списках. В этом случае идентификатор совпадает, поскольку это способ сопоставления всех записей в 1 блоке информации с одним именем.

Список с идентификатором
enter image description here

Каждый список содержит облигации, которые находятся в пределах 1 корзины, и, следовательно, чтобы сопоставить каждую облигацию с их корзиной, я заставляю код вводить название корзины рядом с каждой записью в списке.

Код переходит к первой записи в списке, вводит идентификатор в ячейку, расположенную рядом с ней (например, «ECB»), и расширяет этот же ввод вниз до последней строки. Однако я хотел бы, чтобы код расширялся только до последней записи в списке (например, от I5 до I3457). Следующий фрагмент кода (в данном случае «ECB Extended») будет переходить с I13504 на I17046.

Проблема возникает, когда код Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown)) выполняется в первой ячейке, он не останавливается в последней записи списка, но снижается до самой последней строки всего листа (например, I140454):

Задача
enter image description here

Sub GCPooling_Basket_Matching()

Macro3 Macro
Sheets("GC").Select

'ECB

    Range("I5").Select
    ActiveCell.FormulaR1C1 = "ECB"
    Range("I5").Select
    Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))


'ECB Extended

    Range("I3504").Select
    ActiveCell.FormulaR1C1 = "EXT"
    Range("I3504").Select
    Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))


'INT MXQ

    Range("I17204").Select
    ActiveCell.FormulaR1C1 = "MAXQ"
    Range("I17204").Select
    Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))


'Equity

    Range("I19204").Select
    ActiveCell.FormulaR1C1 = "Equity"
    Range("I19204").Select
    Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))    

End Sub

Кто-нибудь знает способ расширить «ECB» с I5 до I3457 и заставить его остановиться на I3457?

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Если вы не знаете, где начинаются диапазоны, вы можете попробовать такой подход. Я не очень понимаю, как ваши коды соответствуют количеству блоков, так что бит, возможно, потребуется скорректировать.

Sub x()

Dim r As Range, v As Variant, i As Long

v = Array("ECB", "EXT", "MAXQ", "Equity")

For Each r In Columns(1).SpecialCells(xlCellTypeConstants).Areas
    r.Offset(, 1) = v(i)
    i = i + 1
Next r

End Sub

enter image description here

0 голосов
/ 04 июня 2019

См. Ссылку ниже для нескольких идей о том, как обращаться с такими вещами.

https://www.ablebits.com/office-addins-blog/2014/05/02/fill-blanks-excel/

Кроме того, рассмотрите возможность включения Macro Recorder перед тем, как щелкнуть по шагам, чтобы получить код, позволяющий делать подобные вещи снова и снова и снова.

0 голосов
/ 07 января 2019

Я думаю, что вы можете использовать смещение, чтобы избежать вашей проблемы и использовать XlDown для существующих данных. Например, если у вас есть только столбцы A и B и вы хотите автоматически заполнить ECB и ETF на C, как показано ниже:

enter image description here

Вы можете использовать этот код, и вы не будете использовать то, что BruceWayne сказал вам, чтобы заботиться о наилучшей практике:

Sub jason()

Range(Range("B5").Offset(0, 1), Range("B5").End(xlDown).Offset(0, 1)) = "ECB"
Range(Range("B22").Offset(0, 1), Range("B22").End(xlDown).Offset(0, 1)) = "ETF"

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