Попытки разобраться к ничему такому что самому понравится пока не привели...
![Crying or Very sad :cry:](./images/smilies/icon_cry.gif)
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$18").AutoFilter Field:=1, Criteria1:="1"
Rows("2:18").Copy
Sheets("zzz").Cells(1, 1).PasteSpecial
uhm писал(а):У меня код, полученный по записи макроса, сработал после минимальной доработки напильником.
uhm писал(а):Кроме дат что-то еще в числовом формате в колонке В может быть? Если да, то я не уверен, что это вообще возможно - загнать в автофильтр проверку того, что что-то является датой.
uhm писал(а):Мдя... отобрать даты, оказывается, куда проще, чем не даты
uhm писал(а):Пошел думать дальше...
uhm писал(а):А использование автофильтра принципиально? Потому что все проблемы именно в его ограниченности, я все сильнее подозреваю, что без дополнительной колонки или манипуляций с цветами задача не решается. Может быть, проще пройтись циклом по всем строкам области и просто формулами VBA проверить условия и скопировать нужные строки?
Dim firstSheet As Worksheet
Dim dataRange1 As Range, dataRange2 As Range, criteriaRange As Range, targetRange As Range
Set firstSheet = Worksheets(1)
Set dataRange1 = firstSheet.Range("A1:A7")
Set dataRange2 = dataRange1.Offset(ColumnOffset:=1)
Set criteriaRange = firstSheet.Range("C1:C2")
Set targetRange = Worksheets(2).Range("A1")
' создаём исходный диапазон
dataRange1.Value = WorksheetFunction.Transpose(Array("Date", "1/1/08", "1/2/08", Empty, "1/3/08", "test", "1/4/08"))
dataRange2.Value = WorksheetFunction.Transpose(Array("Text", "Row_1", "Row_2", "Row_3", "Row_4", "Row_5", "Row_6"))
' фильтруем диапазон и помещаем результат на второй лист
criteriaRange.Cells(2).Formula = "=IF(N(A2)>0,0,1)"
Application.Union(dataRange1, dataRange2).AdvancedFilter xlFilterCopy, criteriaRange, targetRange
Sub Test()
Sheets(1).Range("B:B").SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Copy Sheets(2).Range("A2")
End Sub
Gloom писал(а):Примерчик:
Gloom писал(а):Примерчик:
- Код: Выделить всё
...
Application.Union(dataRange1, dataRange2).AdvancedFilter xlFilterCopy, criteriaRange, targetRange
firstSheet.Range("A1:B7").AdvancedFilter xlFilterCopy, criteriaRange, targetRange
firstSheet.Range("A2:B7").AdvancedFilter xlFilterCopy, criteriaRange, targetRange
Andrey Fedorov писал(а):
- Код: Выделить всё
firstSheet.Range("A1:B7").AdvancedFilter xlFilterCopy, criteriaRange, targetRange
все работает, но мне не нужно чтобы копировался заголовок таблицы, пытаюсь выполнить
Sub test()
Dim targetRange As Range
Dim criteriaRange As Range
Set targetRange = SecondSheet.Range("A3")
Set criteriaRange = SecondSheet.Range("A1:B2")
Application.ScreenUpdating = False
With firstSheet.Range("A1:B7")
.AdvancedFilter xlFilterInPlace, criteriaRange
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy targetRange
.Parent.ShowAllData
End With
Application.ScreenUpdating = True
End Sub
Сейчас этот форум просматривают: Google-бот и гости: 42