|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
09.12.2007, 11:02 | #1 |
Пользователь
Регистрация: 31.10.2007
Сообщений: 24
|
Как в VBA определить нижнюю границу базы данных
Есть база данных Фамилия/Имя/Оклад/Премия
1) Надо произвести суммирование Оклад+Премия = Общий заработок по всем ячейкам. Проблема: данный отчет каждый раз применения макроса имеет одинаковое количество столбцов, но каждый раз разное количество строк. Надо что бы общий заработок считался только в пределах базы данных. 2) Удалить те строчки, где зарплата превышает 20 000 руб. Гипотетический пример: http://stream.ifolder.ru/4481290 Помогите пожалуйста. Последний раз редактировалось Leanna; 09.12.2007 в 11:04. |
10.12.2007, 20:54 | #3 | ||
Пользователь
Регистрация: 31.10.2007
Сообщений: 24
|
pashulka спасибо большое за помощь, я сейчас пытаюсь овладевать VBA для эксель, и хочу понять твои записи.
Цитата:
Что делает End я не особо поняла (пыталась поднять справку, но она на английском и это непонимаение только усилилось), для чего вообще надо указывать 2 аргумента у Range, я раньше видела только что разве Range ("A2:A65536"). А здесь получается не Selection, а выделение первой и последней ячейки.. Цитата:
вниз (.Cells), являются ли они больше нуля. Я так себе это представляю. 3)Хорошо, если мне, например, в столце "F" надо вычислить долю премии в зарплате "= D2/C2" программа мне выдает ошибку. см рисунок внизу. Как сделать верно? 4)И последний вопрос. Если я воспользуюсь формулой iRow = Range("A1").SpecialCells(xlLastCell ).Row Каким образом я могу всю колонку начиная с "Е2" по "Е" + iRow заполнить формулой "= C2+D2" |
||
10.12.2007, 22:16 | #4 | |||
Форумчанин
Регистрация: 03.11.2006
Сообщений: 524
|
1.
Цитата:
Цитата:
Цитата:
2. Нет, стандартная функция рабочего листа =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(2; диапазон) возвращает количество ячеек содержащих числовые значения, причём с учётом фильтрации. Так что, мы просто проверяем, есть ли данные для удаления (без использования SpecialCells(xlVisible / xlCellTypeVisible)) 3. .Offset(0, 1).Formula = "=D2/C2" '.Offset(, 1).Formula = "=D2/C2" 4. Me.Range("E2:E" & Me.[A1].SpecialCells(xlLastCell).Row).Form ula = "=C2+D2" |
|||
11.12.2007, 17:02 | #5 |
Пользователь
Регистрация: 31.10.2007
Сообщений: 24
|
pashulka я попробовала преобразовать предложенный тобою макрос для использования в своих ежедневных задачах, хочу отметить, что считает большие объёмы данных намного быстрее чем через записаный макрорекордером макросом.
Файл вложила см. ниже. Возникли почему-то проблемы с АвтоФильтром, на нем выскакивает ошибка. Почему? И как это исправить? И вопрос по .Value, есть ли какой либо другой способ преобразовать скопом все данные из формул в значения с A1, по F-последнюю ячейку. |
11.12.2007, 22:05 | #6 |
Форумчанин
Регистрация: 03.11.2006
Сообщений: 524
|
1. В первом примере автофильтр уже наличествовал и там мы могли использовать любой из имеющихся столбцов, во втором примере, Вы устанавливаете автофильтр только в первом столбце, но применить его хотите для четвёртого, что не есть хорошо.
Код:
Или скопировать весь диапазон, затем в меню Правка выбрать команду Специальная вставка, затем в появившемся стандартном диалоговом окне установить переключатель напротив Значения и кликнуть кнопку Ok. (программный код Вы, можете получить, просто воспользовавшись макрорекордером, а затем, немного почистить его от мусора, такого как, например, ненужное выделение) |
12.12.2007, 12:13 | #7 |
Пользователь
Регистрация: 31.10.2007
Сообщений: 24
|
pashulka, всё супер спасибо всё работает как надо, пришлось правда фильтр в начало текста выставить через Selection. Потому что with entire row, удаляет и строчку заголовков фильтра, из-за этого удалялись значения которые удалять не надо. В итоге получилось Database3. Я радостно ликую.
Хотелось ещё сказать что от End(xlUp)) пришлось отказаться, потому что при испытании в Primer_poslednei_yacheiki (HideFilter1 и Hidefilter2) Код:
Код:
HideFilter1 правильно выдает конец массива(18), а HideSheet2 выдает значение (7). |
12.12.2007, 22:40 | #8 |
Форумчанин
Регистрация: 03.11.2006
Сообщений: 524
|
Оба варианта дают правильные результаты (несмотря на то, что в первом примере речь идёт о номере строки, а во втором о значении ячейки, что далеко не одно и тоже), только нужно учитывать, что все они имеют свои особенности, в т.ч. и CTRL+END, и CTRL+стрелка вверх/вниз/и т.д.
Так, например, применение SpecialCells(xlLastCell) (и не только) приводит к тому, что выполняется событие Worksheet_SelectionChange() (и аналогичные события книги, приложения), причём в случае с последней ячейкой, это событие будет вызвано дважды. С этим, кстати, можно бороться (см. ниже) но лучше применять тот или иной метод в зависимости от ситуации, а пред'явленный гипотетический пример не содержал и намёка на то, что данные, которые требуется обработать могут находиться в скрытых ячейках. Код:
|
28.11.2008, 18:45 | #9 |
Регистрация: 28.11.2008
Сообщений: 6
|
Здравствуйте!
Прошу Вас помогите ПОЖАЛУЙСТА решить 5-задач на ПАСКАЛЕ. Я вообще ничего не смыслю в этой сфере... - На основании анкетных данных студентов и итогов экзаменационных сессий определить: 1) Фамилии студентов из г. Москвы и процент их числа от общего числа студентов в группе. 2) Фамилии студентов не являющихся жителями г. Москвы, сдавших сессию с одной неудовлетворительной оценкой. 3) Определить списки студентов, сдавших сессию с одной тройкой. 4) Фамилии отличников, жителей г. Москвы и их процент от общего числа отличников в группе. 5) Определить список отличников жителей г. Москвы и их процент от общего числа отличников. Надеюсь на Вашу помощь. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Базы данных | Valera | Помощь студентам | 1 | 13.08.2008 10:38 |
Тип базы данных | Dux | БД в Delphi | 7 | 23.04.2008 17:56 |
базы данных | Gromsky | Помощь студентам | 2 | 03.03.2008 15:45 |