хотите выбрать ячейку с указанным c условием - PullRequest
0 голосов
/ 10 апреля 2020

Хотите выбрать строки, значения которых больше или равны «2,5» в столбце «H», а затем хотите выбрать соседние строки для этой строки. так что я могу скопировать их на новый лист. Например (Plz см. Прикрепленное изображение) Я хочу выбрать строки 409 410 411, потому что строка 410 имеет значение, равное «2,5» в столбце «H». Пожалуйста, предложите код VBA, Моя пробная версия код выглядит так Sub Selectrows() Dim lastrow As Long Dim i As Range lastrow = Range("E" & Rows.Count).End(xlUp).row For Each i In Range("H4:H" & lastrow) If i.Value >= 2.5 Then i.Select ActiveCell.Rows("1:1").EntireRow.Select End If Next I End Sub

enter image description here

PS: Извините за мой Engli sh, я новичок в Engli sh и VBA

Проблема с кодом ответа

1 Ответ

0 голосов
/ 10 апреля 2020

Вот возможное улучшение вашего кода (объяснение в комментариях)

Option Explicit

Sub Selectrows()
    Dim lastrow As Long
    Dim cel As Range

    Dim destSht As Worksheet
    Set destSht = Worksheets("myDestinationSheetName") '<-- change "myDestinationSheetName" to your actual destination sheet name

    With Worksheets("mySourceSheetName") ' reference source sheet -  change "mySourceSheetName" to your actual source sheet name
        lastrow = .Range("E" & .Rows.Count).End(xlUp).Row ' get referenced sheet column E last not empty cell row index
        For Each cel In .Range("H4:H" & lastrow).SpecialCells(xlCellTypeFormulas) ' loop through referenced sheet column H cells cointaining formulas from row 4 down to column E las not empty one
            If cel.Value >= 2.5 Then cel.Offset(-1, 0).Resize(3, 1).EntireRow.Copy Destination:=destSht.Cells(destSht.Rows.Count, 1).End(xlUp).Offset(1)
        Next
    End With
End Sub

, как вы видите, я предлагаю

  • , чтобы использовать With .. End With block для ссылки на конкретный c объект (в данном случае Worksheets("mySourceSheetName")) и внутри него используйте точки (.) Перед каждым его дочерним элементом (например, Range, Cells,…), чтобы убедиться, что они принадлежат указанному объекту

  • для использования SpecialCells() метода объекта Range для фильтрации только ячеек с «постоянным» (т.е. не производным от формул) содержимым

  • для использования .Offset() свойство для смещения объекта диапазона, к которому он вызывается (в данном случае cel) на одну строку вверх и нуля в сторону

  • для использования свойства .Resize() для расширения объекта диапазона вызывается (cel.Offset(-1,0) в данном случае) на три строки по высоте и один столбец по ширине

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