Добрый день! Мне нужно, что бы из таблицы Перечень_накл в столбец F перенеслись названия, которые соответствуют периоду, указанному в ячейке D1. Причем, перенеслись с учетом пордяка, который отражен в диапазоне B2:B15 В столбцах I и j отражены результаты, которые должны получиться для сентября и октября
Добрый день! Мне нужно, что бы из таблицы Перечень_накл в столбец F перенеслись названия, которые соответствуют периоду, указанному в ячейке D1. Причем, перенеслись с учетом пордяка, который отражен в диапазоне B2:B15 В столбцах I и j отражены результаты, которые должны получиться для сентября и октябряAVI
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 d0_ = Cells(2, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(3, 4).Resize(rd_).ClearContents End If With ActiveSheet With .ListObjects("Перечень_накл").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Application.AddCustomList ListArray:=Range("B3:B15") With .Sort .SortFields.Clear .SortFields.Add Key:=Range("D3:D" & rd_), CustomOrder:=Application.CustomListCount .SetRange Range("D2:D" & rd_) .Apply End With Application.DeleteCustomList ListNum:=Application.CustomListCount End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
[/vba] Файл не прикладываю - Excel вылетел, файл не сохранился, макрос восстановил по памяти (кстати, проверьте - мог где-нибудь накосячить)
Вроде вот так работает [vba]
Код
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 d0_ = Cells(2, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(3, 4).Resize(rd_).ClearContents End If With ActiveSheet With .ListObjects("Перечень_накл").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Application.AddCustomList ListArray:=Range("B3:B15") With .Sort .SortFields.Clear .SortFields.Add Key:=Range("D3:D" & rd_), CustomOrder:=Application.CustomListCount .SetRange Range("D2:D" & rd_) .Apply End With Application.DeleteCustomList ListNum:=Application.CustomListCount End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
[/vba] Файл не прикладываю - Excel вылетел, файл не сохранился, макрос восстановил по памяти (кстати, проверьте - мог где-нибудь накосячить)_Boroda_
_Boroda_, Не работает. Я пытался подправить как мог, но все равно не работает
[vba]
Код
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 d0_ = Cells(2, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(3, 4).Resize(rd_).ClearContents End If With ActiveSheet With .ListObjects("Ïåðå÷åíü_íàêë").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Application.AddCustomList ListArray:=Range("B3:B15") With .Sort .SortFields.Clear .SortFields.Add Key:=Range("F2:F" & rd_), CustomOrder:=Application.CustomListCount .SetRange Range("F2:F" & rd_) .Apply End With Application.DeleteCustomList ListNum:=Application.CustomListCount End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
[/vba]
_Boroda_, Не работает. Я пытался подправить как мог, но все равно не работает
[vba]
Код
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 d0_ = Cells(2, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(3, 4).Resize(rd_).ClearContents End If With ActiveSheet With .ListObjects("Ïåðå÷åíü_íàêë").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Application.AddCustomList ListArray:=Range("B3:B15") With .Sort .SortFields.Clear .SortFields.Add Key:=Range("F2:F" & rd_), CustomOrder:=Application.CustomListCount .SetRange Range("F2:F" & rd_) .Apply End With Application.DeleteCustomList ListNum:=Application.CustomListCount End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
Да, забыл строку с Header. Ну тогда и диапазон перепишу с 3-й строки [vba]
Код
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 d0_ = Cells(2, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(3, 4).Resize(rd_).ClearContents End If With ActiveSheet With .ListObjects("Перечень_накл").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Application.AddCustomList ListArray:=Range("B3:B15") With .Sort .SortFields.Clear .SortFields.Add Key:=Range("D3:D" & rd_), CustomOrder:=Application.CustomListCount .SetRange Range("D3:D" & rd_) .Header = xlGuess .Apply End With Application.DeleteCustomList ListNum:=Application.CustomListCount End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
[/vba]
Да, забыл строку с Header. Ну тогда и диапазон перепишу с 3-й строки [vba]
Код
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 d0_ = Cells(2, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(3, 4).Resize(rd_).ClearContents End If With ActiveSheet With .ListObjects("Перечень_накл").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Application.AddCustomList ListArray:=Range("B3:B15") With .Sort .SortFields.Clear .SortFields.Add Key:=Range("D3:D" & rd_), CustomOrder:=Application.CustomListCount .SetRange Range("D3:D" & rd_) .Header = xlGuess .Apply End With Application.DeleteCustomList ListNum:=Application.CustomListCount End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
_Boroda_, что-то не то... Если дату поменять на октябрь то спирт "утекает" низ. И если после работы макроса нажать на дискетку, то файл просто вылетает. ((
_Boroda_, что-то не то... Если дату поменять на октябрь то спирт "утекает" низ. И если после работы макроса нажать на дискетку, то файл просто вылетает. ((AVI
Ага, и у меня вылетает. Думал, что это так моя машинка своё "фи" выражает, ан нет. Ну ладно, все равно создание пользовательских списков сортировки дело неблагодарное По-другому переделал
[vba]
Код
Sub SpisMes() Application.ScreenUpdating = 0 Application.Calculation = 3 r0_ = 3 d0_ = Cells(r0_ - 1, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(r0_, 4).Resize(rd_, 2).ClearContents End If With ActiveSheet With .ListObjects("Перечень_накл").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With r_ = Cells(Rows.Count, 4).End(3).Row If r_ >= r0_ Then n_ = Cells(Rows.Count, 4).End(3).Row - r0_ + 1 With .Sort 'для сортировки невошедших в список .SortFields.Clear .SortFields.Add Key:=Range("D" & r0_) .SetRange Range("D" & r0_).Resize(n_) .Apply End With ar1 = Cells(r0_, 4).Resize(n_, 2) ar0 = Range("B3:B15").Value With CreateObject("Scripting.Dictionary") For i = 1 To UBound(ar0) .Item(ar0(i, 1)) = i Next i For j = 1 To n_ ar1(j, 2) = .Item(ar1(j, 1)) Next j Cells(r0_, 4).Resize(n_, 2) = ar1 End With With .Sort .SortFields.Clear .SortFields.Add Key:=Range("E" & r0_) .SetRange Range("D" & r0_).Resize(n_, 2) .Apply End With Range("E" & r0_).Resize(n_).ClearContents End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
[/vba]
Ага, и у меня вылетает. Думал, что это так моя машинка своё "фи" выражает, ан нет. Ну ладно, все равно создание пользовательских списков сортировки дело неблагодарное По-другому переделал
[vba]
Код
Sub SpisMes() Application.ScreenUpdating = 0 Application.Calculation = 3 r0_ = 3 d0_ = Cells(r0_ - 1, 4) If Not IsDate(d0_) Then Exit Sub d_ = Format(d0_, "m\/d\/yyyy") rd_ = Cells(Rows.Count, 4).End(3).Row If rd_ > 2 Then Cells(r0_, 4).Resize(rd_, 2).ClearContents End If With ActiveSheet With .ListObjects("Перечень_накл").Range .AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, d_) .Offset(1).Columns(1).SpecialCells(xlCellTypeVisible).Copy Cells(3, 4) .AutoFilter Field:=2 End With r_ = Cells(Rows.Count, 4).End(3).Row If r_ >= r0_ Then n_ = Cells(Rows.Count, 4).End(3).Row - r0_ + 1 With .Sort 'для сортировки невошедших в список .SortFields.Clear .SortFields.Add Key:=Range("D" & r0_) .SetRange Range("D" & r0_).Resize(n_) .Apply End With ar1 = Cells(r0_, 4).Resize(n_, 2) ar0 = Range("B3:B15").Value With CreateObject("Scripting.Dictionary") For i = 1 To UBound(ar0) .Item(ar0(i, 1)) = i Next i For j = 1 To n_ ar1(j, 2) = .Item(ar1(j, 1)) Next j Cells(r0_, 4).Resize(n_, 2) = ar1 End With With .Sort .SortFields.Clear .SortFields.Add Key:=Range("E" & r0_) .SetRange Range("D" & r0_).Resize(n_, 2) .Apply End With Range("E" & r0_).Resize(n_).ClearContents End If End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
Правильно. Его же нет в списке столбца В. Сначала сортируем то, что есть в списке для сортировки (по этому списку), затем по алфавиту то, чего в списке сортировки нет.
Правильно. Его же нет в списке столбца В. Сначала сортируем то, что есть в списке для сортировки (по этому списку), затем по алфавиту то, чего в списке сортировки нет._Boroda_
Добрый день! Помогите, пожалуйста, добавить в отчет на Листе3 "Операции со складом" из таблицы на Листе1 по каждой группе (серым выделено то, что нужно добавить для группы "Спирт"). Вообще, возможно ли так сделать?
Добрый день! Помогите, пожалуйста, добавить в отчет на Листе3 "Операции со складом" из таблицы на Листе1 по каждой группе (серым выделено то, что нужно добавить для группы "Спирт"). Вообще, возможно ли так сделать?AVI
Я допускаю, что не очень глубоко вникла в тему, и новый вопрос является уточняющим к предыдущему. Тогда подождём Александра, он в теме и решит наш спор [p.s.]На мой взгляд, давно бы создали новую тему и получили ответ[/p.s.]
Я допускаю, что не очень глубоко вникла в тему, и новый вопрос является уточняющим к предыдущему. Тогда подождём Александра, он в теме и решит наш спор [p.s.]На мой взгляд, давно бы создали новую тему и получили ответ[/p.s.]Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
<<У бурмистра Власа бабушка Ненила Починить избенку лесу попросила. Отвечал: нет лесу, и не жди - не будет!" "Вот приедет барин - барин нас рассудит,..>> (Н.Некрасов)
<<У бурмистра Власа бабушка Ненила Починить избенку лесу попросила. Отвечал: нет лесу, и не жди - не будет!" "Вот приедет барин - барин нас рассудит,..>> (Н.Некрасов) RAN