Добрый день! Подскажите, пожалуйста, как сделать так, что бы код переносил данные не только из третьtго столбца таблицы "Расчет", но и десяти столбцов после него?
Добрый день! Подскажите, пожалуйста, как сделать так, что бы код переносил данные не только из третьtго столбца таблицы "Расчет", но и десяти столбцов после него?AVI
Sub qqq_1() Dim r0_, r1_, ar1 Dim oTbl As ListObject Set oTbl = Sheets("Лист2").ListObjects("Расчет") r0_ = 6 With Worksheets("Лист1") r1_ = .Cells(Rows.Count, 4).End(3).Row If r1_ >= r0_ Then .Cells(r0_, 4).Resize(r1_ - r0_ + 1, 10).ClearContents End If With oTbl.Sort .SortFields.Clear .SortFields.Add oTbl.ListColumns("Направление").Range .Apply End With oTbl.Range.AutoFilter 2, .Range("D2") ar1 = oTbl.DataBodyRange.Columns(3).Resize(, 10).SpecialCells(xlVisible) .Cells(r0_, 4).Resize(, 10) = oTbl.HeaderRowRange.Columns(3).Resize(, 10).Value .Cells(r0_ + 1, 4).Resize(UBound(ar1), 10) = ar1 oTbl.DataBodyRange.AutoFilter 2 End With End Sub
[/vba] Если таблица не всегда отсортирована по столбцу Направление, то надо ещё добавить в макрос сортировку.Добавила
Здравствуйте. Вариант [vba]
Код
Sub qqq_1() Dim r0_, r1_, ar1 Dim oTbl As ListObject Set oTbl = Sheets("Лист2").ListObjects("Расчет") r0_ = 6 With Worksheets("Лист1") r1_ = .Cells(Rows.Count, 4).End(3).Row If r1_ >= r0_ Then .Cells(r0_, 4).Resize(r1_ - r0_ + 1, 10).ClearContents End If With oTbl.Sort .SortFields.Clear .SortFields.Add oTbl.ListColumns("Направление").Range .Apply End With oTbl.Range.AutoFilter 2, .Range("D2") ar1 = oTbl.DataBodyRange.Columns(3).Resize(, 10).SpecialCells(xlVisible) .Cells(r0_, 4).Resize(, 10) = oTbl.HeaderRowRange.Columns(3).Resize(, 10).Value .Cells(r0_ + 1, 4).Resize(UBound(ar1), 10) = ar1 oTbl.DataBodyRange.AutoFilter 2 End With End Sub
[/vba] Если таблица не всегда отсортирована по столбцу Направление, то надо ещё добавить в макрос сортировку.ДобавилаPelena
Сначала дополнил код... Потом решил переделать: [vba]
Код
Sub Filtr_() Dim ar0(), ar1() Dim sStr As String Dim i As Long, k As Long, j As Long Const lRw As Byte = 6 With Worksheets("Лист2") i = .UsedRange.Rows.Count: If i < 2 Then Exit Sub ar0 = .Range("C1:N" & i).Value End With
ReDim ar1(1 To i, 1 To 10)
With Worksheets("Лист1") sStr = .Range("D2").Value .Columns(4).Resize(, 10).ClearContents .Range("D2").Value = sStr
For i = 2 To UBound(ar0) If ar0(i, 1) = sStr Then k = k + 1
For j = 1 To 10 ar1(k, j) = ar0(i, j + 1) Next j End If Next i
.Cells(lRw, 4).Resize(k, 10).Value = ar1 End With End Sub
[/vba]
Сначала дополнил код... Потом решил переделать: [vba]
Код
Sub Filtr_() Dim ar0(), ar1() Dim sStr As String Dim i As Long, k As Long, j As Long Const lRw As Byte = 6 With Worksheets("Лист2") i = .UsedRange.Rows.Count: If i < 2 Then Exit Sub ar0 = .Range("C1:N" & i).Value End With
ReDim ar1(1 To i, 1 To 10)
With Worksheets("Лист1") sStr = .Range("D2").Value .Columns(4).Resize(, 10).ClearContents .Range("D2").Value = sStr
For i = 2 To UBound(ar0) If ar0(i, 1) = sStr Then k = k + 1
For j = 1 To 10 ar1(k, j) = ar0(i, j + 1) Next j End If Next i
.Cells(lRw, 4).Resize(k, 10).Value = ar1 End With End Sub