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

В новом наборе данных (больше данных) я столкнулся с проблемой с диапазоном данных.

ActiveSheet.Range("$A$1:$T$299").AutoFilter Field:=6, Criteria1:= _
  "=Site Reference A", Operator:=xlOr, Criteria2:= _
  "=Site Reference A  Total"
Range("A1:T299").Select
Range("F160").Activate
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy

Мой диапазон данных составляет 1 австралийский доллар: 299 тенге. Как мне сделать это динамичным?

Пример -
Набор данных A состоит из 200 столбцов.
Набор данных B содержит 230 столбцов.

0
Matty Wong 17 Сен 2018 в 16:32

2 ответа

Лучший ответ

Немного длинно, но этот полный код - более безопасный способ найти последнюю строку и последний столбец на листе.

Dim Sht As Worksheet
Dim FiltRng As Range
Dim LastCol As Long
Dim LastRow As Long

Set Sht = ActiveSheet '<-- better not rely on ActiveSheet

LastRow = FindLastRow(Sht)
LastCol = FindLastCol(Sht)

With Sht
    Set FiltRng = .Range(.Cells(1, 1), .Cells(LastRow, LastCol)) ' <-- set the filtered range dynamically
End With

With Sht
    FiltRng.AutoFilter Field:=6, Criteria1:= _
        "=Site Reference A", Operator:=xlOr, Criteria2:= _
        "=Site Reference A  Total"

    ' rest of your code goes here

End With

« ================================================= =========

Function FindLastCol(Sht As Worksheet) As Long

' This Function finds the last col in a worksheet, and returns the column number

Dim LastCell As Range

With Sht
    Set LastCell = .Cells.Find(What:="*", After:=.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, _
                        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
    If Not LastCell Is Nothing Then
        FindLastCol = LastCell.Column
    Else
        MsgBox "Error! worksheet is empty", vbCritical
        End
    End If
End With

End Function

« ================================================= =========

Function FindLastRow(Sht As Worksheet) As Long

' This Function finds the last row in a worksheet, and returns the row number

Dim LastCell As Range

With Sht
    Set LastCell = .Cells.Find(What:="*", After:=.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, _
                        SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
    If Not LastCell Is Nothing Then
        FindLastRow = LastCell.Row
    Else
        MsgBox "Error! worksheet is empty", vbCritical
        End
    End If
End With

End Function
0
Shai Rado 17 Сен 2018 в 13:37

Если в столбце A нет других данных, вы можете использовать динамический именованный диапазон. Просто используйте следующую формулу в качестве диапазона для именованного диапазона, а затем укажите именованный диапазон в своем коде. Имейте в виду, что это работает, только если в столбце A нет других данных.

 =OFFSET($A$1,0,0,COUNTA($A:$A),1)
0
Frank Ball 17 Сен 2018 в 14:31