Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Использование автофильтра в VBA Excel Добавлено: 26.01.05 11:55  

Автор вопроса:  econ | ICQ: 212749159 
Приветствую!
Возникла проблема следующего рода:

есть код, который находит конец одинаковых значений строк в столбце фамилия (с помощью автофильтра), добавляет к нему пуст строки и формулы

Код работает у меня на 3 фамилиях нормально, а когда я сделал их на 50
то он говорит мне что процедура слишком большая.
Думаю что надо написать процедуру и сделать доступ к автофильтру не через criterial:="фамилия1", а через индекс фамилий(массив) и присваивать значения автофильтру,
как это сделать фиг его знает все перерыл, примеров програмного кода работы с фильтром пока не нашел, если подскажите что делать буду весьма признателен.

Да начиная со второй записи формулы расчета одинаковы, меняются лиш значения переменных на основе знач последн строки записи фамилии. как описать в процедуре это не знаю...

Вот код:
Sub Макрос1()
Dim fill_data(6)
fill_data(0) = "" - занулено специально
fill_data(1) = "Присутствие на работе, мин:" расчетная строка, складыв. время в зависимости от К строк с данной фамилией
fill_data(2) = "Переналадка, мин:" - то же
fill_data(3) = "Ремонт, мин:"то же
fill_data(4) = "Простой, мин:"то же
fill_data(5) = "Хозработы, мин:"то же
fill_data(6) = "Оплачиваемое время, мин:"то же

Cells(3, 4).Select
Selection.AutoFilter Field:=4, Criteria1:="Айгузин Р. А." '- применяем фильтр
last_row = Cells(65536, 4).End(xlUp).Row '- ищем последнюю строку по данной фамилии
Cells(last_row, 4).Select '- выделяем
Rows("3:3").Select
Selection.AutoFilter '- убираем фильтр
Cells(last_row + 1, 4).Select '- вот № строки к которой добавл пустые
lr = last_row + 1 № строки к котор добавл пустые строки
Rows(lr).Select '
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
For i_ins = 1 To 6 Step 1
' Rows(lr + i_ins).Select '- ПОПЫТКА ВСТАВИТЬ ДОБАВЛЕНИЕ СТРОК В ЦИКЛ чтобы не писать Selection.Insert Shift:=xlDown НЕ ПОЛУЧИЛОСЬ
Cells(last_row + i_ins, 4).Value = "Айгузин Р. А." '- добавляем ФИО1 в добавл пустые строки
Next i_ins

For j = 1 To 6
k1 = last_row + j
Range(Cells(k1, 5), Cells(k1, 17)).SelectCells(k1, 5).Value = fill_data(j) - заполнение пустых строк рядом с фамилией
Next j

lst_r1 = last_row - 1 координаты для ячейки, подлеж. суммированию
lst_r2 = last_row - (last_row - 1) тоже самое

Cells(last_row + 1, 18).Select
ActiveCell.FormulaR1C1 = "=Sum(R[-" & (last_row - 3) & "]C10:R[-" & (last_row - (last_row - 1)) & "]C10)" - формула
Cells(last_row + 6, 18).Select
ActiveCell.FormulaR1C1 = "=Sum(R[-" & (last_row + 2) & "]C19:R[-6]C19)-R[-4]C-R[-3]C-R[-2]C-R[-1]C" - формула

'- ОБРАБОТКА 2-Й ЗАПИСИ даллее обработка 2-й фамилии

Cells(3, 4).Select
Selection.AutoFilter Field:=4, Criteria1:="Белослудцев А. В." '- применяем фильтр
last_row2 = Cells(65536, 4).End(xlUp).Row '- ищем последнюю строку по данной фамилии
'MsgBox last_row2
Cells(last_row2, 4).Select '- выделяем
' MsgBox last_row2 ' - проверим № строки
Cells(3, 4).Select
Selection.AutoFilter '- убираем фильтр
lr2 = last_row2 + 1 ' - строка, где добавляются пустые строки
Rows(lr2).Select '- вот она догожданная координатка
'MsgBox ("выделенная строка № ") & lr2
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку

For i_ins = 1 To 6 Step 1
Cells(last_row2 + i_ins, 4).Value = "Белослудцев А. В."
Next i_ins

For j = 1 To 6
k1 = last_row2 + j
Range(Cells(k1, 5), Cells(k1, 17)).Select
Cells(k1, 5).Value = fill_data(j)
Next j

lst_r21 = last_row2 - (last_row + 6) ' координаты начала второго массива
lst_r22 = last_row2 - (last_row2 - 1) ' ок координаты конца второго массива

Cells(last_row2 + 1, 18).Select
ActiveCell.FormulaR1C1 = "=Sum(R[-" & (lst_r21) & "]C10:R[-" & (lst_r22) & "]C10)"
Cells(last_row2 + 6, 18).Select
ActiveCell.FormulaR1C1 = "=Sum(R[-" & (last_row2 - (last_row + 1)) & "]C19:R[-6]C19)-R[-4]C-R[-3]C-R[-2]C-R[-1]C"

'- ОБРАБОТКА 3-Й ЗАПИСИ

Cells(3, 4).Select
Selection.AutoFilter Field:=4, Criteria1:="Блюденов А. В." '- применяем фильтр
last_row3 = Cells(65536, 4).End(xlUp).Row '- ищем последнюю строку по данной фамилии
'MsgBox last_row2
Cells(last_row3, 4).Select '- выделяем
' MsgBox last_row2 ' - проверим № строки
Cells(3, 4).Select
Selection.AutoFilter '- убираем фильтр
lr3 = last_row3 + 1 ' - строка, где добавляются пустые строки
Rows(lr3).Select '- вот она догожданная координатка
'MsgBox ("выделенная строка № ") & lr2
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку
Selection.Insert Shift:=xlDown '- добавляем строку

For i_ins = 1 To 6 Step 1
Cells(last_row3 + i_ins, 4).Value = "Блюденов А. В."
Next i_ins

For j = 1 To 6
k1 = last_row3 + j
Range(Cells(k1, 5), Cells(k1, 17)).Select Cells(k1, 5).Value = fill_data(j)
Next j

lst_r31 = last_row3 - (last_row2 + 6) ' координаты начала третьего массива
lst_r32 = last_row3 - (last_row3 - 1) ' ок координаты конца третьего массива

Cells(last_row3 + 1, 18).Select
ActiveCell.FormulaR1C1 = "=Sum(R[-" & (lst_r31) & "]C10:R[-" & (lst_r32) & "]C10)"
Cells(last_row3 + 6, 18).Select
ActiveCell.FormulaR1C1 = "=Sum(R[-" & (last_row3 - (last_row2 + 1)) & "]C19:R[-6]C19)--R
хотелось упростить сей код

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 05.02.05 00:11
Элементарно, Ватсон! Просто строка формул Excel ограничена по длине. А твой макрос создает формулу недопустимой длины. Вообще всё это похоже не на код, а на записанный макрос, который кто-то (ты?) прокомментировал. Постарайся обойтись без диапазонов или хоть заменить их значениями.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам