макрос для Excel!

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

soulthiefer
Сообщения: 39
Зарегистрирован: 21 сен 2007, 15:05

Aent
ааааааааааааааааа шикарно!!!!!!!!! просто супер !!!!!
класс!!!!!!
ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПА-СИ-БО!!!!

один вопросик почему он берет последнюю строчку по первой таблице я так понимаю это организованно здесь :
n = Cells(Cells.Rows.Count, 1).End(xlUp).Row

как сделать чтоб он сметрел не по первой колонке а по всем четырем ? потому что бывает что и 3-я или 4-я самая длинная !!!
и можете если не сложно разъяснить функции :
If Application.WorksheetFunction.CountIf([F:I], v)
If Application.WorksheetFunction.CountIf(Cells(1, m).Resize(n, 1), v)
If Application.WorksheetFunction.Sum(Range(Cells(k, 6), Cells(k, 9)))
Range(Cells(k, 6), Cells(k, 9)).ClearContents
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

soulthiefer,
я, честно говоря, из вашей постановки предположил, что раз у вас ТАБЛИЦА то
она прямоугольная и соответственно все столбцы имеют одинаковое количество строк ...
Если это не так, просто берите максимальное значение. Или сразу

Код: Выделить всё

n =cells(1).specialcells(xlCellTypeLastCell).row
Help по WorksheetFunction по прежнему доступен в Excel ...
На всякий случай подскажу что CountIf это по русски СЧЁТЕСЛИ...

Application.WorksheetFunction.CountIf([F:I], v) подсчитывает количество
вхождений числа v в колонках F : I. Если это число больше 0 то соответствующее повторяющееся значение мы уже включали в отчёт

Application.WorksheetFunction.CountIf(Cells(1, m).Resize(n, 1), v) подсчитывает
количество вхождений числа v в ранг, получаемый расширением ячейки в столбце
m 1-й строки на n строк.

Application.WorksheetFunction.Sum(Range(Cells(k, 6), Cells(k, 9))) подсчитывает
сумму очередной строки отчёта. Она будет равна v только если вхождение v не
кратное. В этом случае мы НЕ УВЕЛИЧИВАЕМ k (номер строки) и очищаем
строку отчёта Range(Cells(k, 6), Cells(k, 9)).ClearContents
Cобственно, поскольку ненужные строки затираются, это важно только для последней строки. Cоответственно можно выиграть несколько микросекунд
вынеся эту проверку из цикла и соответствующим образом её изменив.
(Последнюю строку надо очищать если в ней три пустых ячейки).
Андрей Энтелис,
aentelis.livejournal.com
soulthiefer
Сообщения: 39
Зарегистрирован: 21 сен 2007, 15:05

Aent
еще раз огромное спасибо !!!! работа теперь неописуемо обегчилась и ускорилась )))! !!! вы гений !
еще один вопрос чтоб больше не доставать (
если я захочу увеличить количество сравниваемых столбцов что я должен поменять ?
не сочтите за дерзость и назойлевость !!!
спасибо
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

soulthiefer писал(а):что я должен поменять ?
1) В циклах по i и по m вместо 4 реальное количество колонок
2) В выражении 5 + m вместо 5 :
номер_колонки_с_которой_должен_начинаться_отчёт - 1
Андрей Энтелис,
aentelis.livejournal.com
Ответить