EXCEL VBA - необходимо отфильтровать, а затем автоматически заполнить значение со второй строки до самой нижней строки - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь автоматически заполнить остальные строки до самой нижней строки значениями в ней. Глядя на другие сообщения и собственные исследования и тестирование, я создал код. Однако в моем коде есть фильтр, и значения этих фильтров со временем меняются. Как вы можете видеть в коде, я выбираю AB2 и вставляю «Да», а затем автоматически заполняю его до самого низа или до самого низкого значения в столбце Z. Однако иногда из-за фильтров «Нет» и «Да» вторая строка может быть AB3 или даже AB4 . Есть ли способ автоматизировать эту функцию, где я могу поместить значение Да под первой строкой, а затем автоматически заполнить его, не меняя каждый раз число рядом с AB.

Columns("F:H").Select
Selection.AutoFilter
ActiveSheet.Range("$F$1:$H$13889").AutoFilter Field:=1, Criteria1:="No"
ActiveSheet.Range("$F$1:$H$13889").AutoFilter Field:=3, Criteria1:="Yes"
Range("AB2").Select
ActiveCell.FormulaR1C1 = "Yes"
Selection.AutoFill Destination:=Range("AB2:AB" & Range("Z" & Rows.Count).End(xlUp).Row)
Range(Selection, Selection.End(xlDown)).Select

1 Ответ

2 голосов
/ 06 августа 2020

Это должно сработать, так как вы никогда не знаете, с чего начать писать свое «Да»:

Option Explicit
Sub Test()
    
    'Assuming you are running the code on the same workbook it is written
    'change SheetName for the sheet name where you want it to run,
    'if not, change also ThisWorkbook for Workbooks("WorkbookName.Extension")
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("SheetName")
    
    With ws
        'This is to get the last row with data, so change Z for whichever column
        'has the last row with data
        Dim LastRow As Long: LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row
        'This gets the last column with data, assuming you have all your headers in row 1
        Dim LastCol As Long: LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        'Put your whole range into a variable
        Dim FilterRange As Range: Set FilterRange = .Range("A1", .Cells(LastRow, LastCol))
        'Filter by your criteria
        FilterRange.AutoFilter 1, "No"
        FilterRange.AutoFilter 3, "Yes"
        'Now find the first row without data in column AB
        Dim FirstRow As Long
        LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row
        Set FilterRange = .Range("AB2:AB" & LastRow)
        Dim cell As Range
        For Each cell In FilterRange
            If cell.EntireRow.Hidden = False Then
                FirstRow = cell.Row
                Exit For
            End If
        Next cell
        'Fill all your visible cells in Range AB with Yes
        .Range("AB" & FirstRow & ":AB" & LastRow).SpecialCells(xlCellTypeVisible) = "Yes"
    End With

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