VBA: Как скопировать столбец до последней непустой ячейки из активной ячейки, которая может быть динамической

#vba

#vba

Вопрос:

Я пытался написать код VBA для поиска текста, и если текст найден, он должен пройти 4 строки вниз, а затем выбрать весь столбец оттуда. Пытался написать приведенный ниже код, но не работает

 Sub FindLevel()

    Dim p_text As String
    Dim myrange As Range
    
    Sheets("View").Activate
    
    p_text1 = Sheets("Output").Range("AA6")
    p_text2 = Sheets("Output").Range("AB6")
    
    
 
    For Each Cell In Range("C5:CI5")
        If Cell.Value = p_text1 Then
           last_row = Cells(Rows.Count, 1).End(xlUp).Row
           Cell.Offset(4, 0).Select 'Selected the desired cell
           
           Selection.last_row.Copy
           
           Selection.Copy
           
           Sheets("Output").Activate
           Range("AA7").Select
           ActiveSheet.Paste
           
        End If
    Next
    
End Sub
  

Комментарии:

1. Вы имеете в виду, что хотите выбрать всю СТРОКУ (не столбец)

2. После этой строки: Ячейка. Смещение (4, 0).Выберите — курсор должен двигаться вниз по строке, выделите все непустые ячейки целиком (аналогично стрелке Ctrl shift вниз), а затем вставьте в выходной лист.

3. Ах, хорошо, так что это не весь столбец, это просто диапазон в этом столбце, от определенной начальной строки до последней строки со значениями.

4. да — Не могли бы вы, пожалуйста, сказать мне, как мне перейти к ячейке. Смещение (4, 0).Выберите

Ответ №1:

Я не знаю, что вы подразумеваете под p_text1 и p_text2 .. и я предполагаю, что у вас есть данные поиска в ячейке «AA6»..Тогда код будет выглядеть следующим образом.

 Sub FindLevel()

Dim p_text As String, sh As Worksheets, lastcol As Long, lastrow As Long
Set sh = Worksheets("View")
p_text = Sheets("Output").Range("AA6")

sh.Activate
lastcol = sh.Cells(5, Columns.Count).End(xlUp).Row
For i = 5 To lastcol
'I am assuming that you want to go column wise..Like C5,D5,E5....CI5 from this below line.
'For Each Cell In Range("C5:CI5")
    If sh.Cells(5, i).Value = p_text Then
        sh.Cells(5, i).Offset(4, 0).Select
        lastrow = sh.Cells(Rows.Count, i).End(xlUp).Row
       Range(Selection, sh.Cells(lastrow, i)).Select
       Selection.Copy
       Sheets("Output").Activate
       Range("AA7").Select
       ActiveSheet.Paste
       Exit For
    End If
Next i
End Sub