Выберите Range до определенной строки VBA - PullRequest
0 голосов
/ 04 октября 2018

Я работаю над электронной таблицей, которая форматирует отчет, извлекаемый извне из приложения.Большая часть моего форматирования выполнена, но для одной его части мне просто нужно выбрать все ячейки в диапазоне A9: I Z , где Z - количество строк до определенной строки (не включая саму строку)).

Здесь - пример листа.Мне нужно все из A1: I649 выделено, это строка прямо над ячейкой A650, в которой всегда есть строка «*** Total».Этот отчет является динамическим, поэтому длина меняется каждый день, но я отформатировал его так, чтобы *** Итого всегда отображалось внизу.Я просто не могу понять, как выбрать все до следующей части моего сценария.Я уже настроил остальную часть своего кода, мне просто нужно прибить эту часть.

Я сделал сокращенное изображение для визуального элемента.В этом случае мне нужен A10: I30, чтобы быть моим выбранным диапазоном, так как это строка прямо перед *** Всего

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Мне удалось это решить.Возможно, он немного неаккуратный, но он работает:

Sub LeanCut()
Dim lrow As Long
'This part is finding the cell with "~~~ Total" and deleting it and everything below       
Cells.Find(What:="~*~*~* Total", After:=[A1], LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
        Rows(ActiveCell.Row & ":" & Rows.Count).Delete
'This part just selects everything from A10:I (last row with data)
lrow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
Range("A10:I" & lrow).Select

End Sub

Как я уже сказал, он немного неаккуратный, но я не лучший в VBA, и он делает то, что хотел.Просто превращает *** Total в пустую строку и выбирает все, что имеет значения от A10 и ниже.

0 голосов
/ 04 октября 2018

try,

dim rng as range, m as variant

with worksheets("sheet1")
    m = application.match("~*~*~*total", .range("I:I"), 0)
    if not iserror(m) then
        set rng = .range(.cells(9, "A"), .cells(m - 1, "I"))
        debug.print rng.address(0, 0)
        rng.select
    end if
end with

Обратите внимание на escape-символы (~ или тильда), которые используются для удаления подстановочных знаков звездочек.

...