День добрый! Не могу разобраться как быть. Объясняю на примере файла приложенного. Есть таблица с данными лист "Главный". Во втором листе("Сортировка" называется) нужно делать отчеты по датам. Т.е. я ввожу дату нужную мне в серой ячейке, а по ней сортируется данные в листе "Главный" и копируются(отсортированные) в лист "сортировка". Автоматически это делать не нужно, потом кнопку сделать к макросу смогу. Проблема только в сортировке по дате! Не могу автоматически скопировать дату из ячейки и по ней отсортировать. [moder]А в своих темах отписываться религия не позволяет?
День добрый! Не могу разобраться как быть. Объясняю на примере файла приложенного. Есть таблица с данными лист "Главный". Во втором листе("Сортировка" называется) нужно делать отчеты по датам. Т.е. я ввожу дату нужную мне в серой ячейке, а по ней сортируется данные в листе "Главный" и копируются(отсортированные) в лист "сортировка". Автоматически это делать не нужно, потом кнопку сделать к макросу смогу. Проблема только в сортировке по дате! Не могу автоматически скопировать дату из ячейки и по ней отсортировать. [moder]А в своих темах отписываться религия не позволяет?VSpolun
Спасибо.! Вот только просьба, распишите какая команда что выполняет: [vba]
Код
Sub vbr() Dim x Dim i&, v%, r& Dim z(1 To 100000, 1 To 4) Dim dt On Error Resume Next x = Sheets(1).Range("A2:D" & Sheets(1).[a65536].End(xlUp).Row).Value dt = Sheets(2).[g1] r = 0 For i = 1 To UBound(x) If x(i, 4) = dt Then r = r + 1 For v = 1 To 4 z(r, v) = x(i, v) Next End If Next Sheets(2).[a2:d65536].ClearContents Sheets(2).[a2].Resize(r, 4) = z End Sub
[/vba]
Я пока умею макросы через "запись" делать и редактировать такие макросы, там понятно какая команда для чего... а здесь..( Мне это нужно чтобы самому сделать и применить к текущему файлу большому.
Спасибо.! Вот только просьба, распишите какая команда что выполняет: [vba]
Код
Sub vbr() Dim x Dim i&, v%, r& Dim z(1 To 100000, 1 To 4) Dim dt On Error Resume Next x = Sheets(1).Range("A2:D" & Sheets(1).[a65536].End(xlUp).Row).Value dt = Sheets(2).[g1] r = 0 For i = 1 To UBound(x) If x(i, 4) = dt Then r = r + 1 For v = 1 To 4 z(r, v) = x(i, v) Next End If Next Sheets(2).[a2:d65536].ClearContents Sheets(2).[a2].Resize(r, 4) = z End Sub
[/vba]
Я пока умею макросы через "запись" делать и редактировать такие макросы, там понятно какая команда для чего... а здесь..( Мне это нужно чтобы самому сделать и применить к текущему файлу большому.VSpolun
Сообщение отредактировал VSpolun - Среда, 13.11.2013, 14:04
Откомментировал немного. Записывать "обычными" командами (подразумеваю перебором по ячейкам) лениво.
[vba]
Код
Sub vbr() Dim x Dim i&, v%, r& Dim z(1 To 100000, 1 To 4) ' итоговый массив (от 1 до 100000 строки, и с 1 по 4 столбца) Dim dt On Error Resume Next x = Sheets(1).Range("A2:D" & Sheets(1).[a65536].End(xlUp).Row).Value 'массив (от 2й до последней непустой строки, и с 1 по 4 столбца) dt = Sheets(2).[g1] 'ячейка с датой r = 0 ' счетчик строк итогового массива For i = 1 To UBound(x) 'от первого элемента массива Х до последнего If x(i, 4) = dt Then 'если дата в строке совпадает с датой в ячейке r = r + 1 ' For v = 1 To 4 ' то записываем в итоговый массив данные строки z(r, v) = x(i, v) ' Next End If Next Sheets(2).[a2:d65536].ClearContents 'очищаем строки Sheets(2).[a2].Resize(r, 4) = z 'выводим полученный массив на лист End Sub
[/vba]
Откомментировал немного. Записывать "обычными" командами (подразумеваю перебором по ячейкам) лениво.
[vba]
Код
Sub vbr() Dim x Dim i&, v%, r& Dim z(1 To 100000, 1 To 4) ' итоговый массив (от 1 до 100000 строки, и с 1 по 4 столбца) Dim dt On Error Resume Next x = Sheets(1).Range("A2:D" & Sheets(1).[a65536].End(xlUp).Row).Value 'массив (от 2й до последней непустой строки, и с 1 по 4 столбца) dt = Sheets(2).[g1] 'ячейка с датой r = 0 ' счетчик строк итогового массива For i = 1 To UBound(x) 'от первого элемента массива Х до последнего If x(i, 4) = dt Then 'если дата в строке совпадает с датой в ячейке r = r + 1 ' For v = 1 To 4 ' то записываем в итоговый массив данные строки z(r, v) = x(i, v) ' Next End If Next Sheets(2).[a2:d65536].ClearContents 'очищаем строки Sheets(2).[a2].Resize(r, 4) = z 'выводим полученный массив на лист End Sub