Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 7

Access VBA код на 65 тыс. строк формулы вешают Excel

07.02.2016, 16:48. Показов 2616. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Подскажите, пожалуйста, может ли кто-то помочь с кодом на VBA для Access? Ситуация следующая.
  • Есть база данных, она выгружается в Access 2010.
  • На основе этой базы делаются определенные вычисления, которые в итоговом варианте выдаются в виде сводной таблицы.
  • Исходные данные (база) и свод (результат) - в приложении Excel.
  • Выборка базы - урезанная, в полной выгрузке 65 тыс. строк.
  • В серых полях - дополнительные вычисления посредством формул.

Проблема в том, что на 65 тыс. строк формулы вешают Excel.
Вопрос - можно ли написать сразу в Access код VBA, чтобы все нужные формулы считались кодом?

Заранее спасибо!
Вложения
Тип файла: zip Тест.zip (95.6 Кб, 17 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2016, 16:48
Ответы с готовыми решениями:

Access - Excel, код не воспринимает количество строк в Excel более 65000
Добрый день! Есть БД (Access), есть файл Excel, где происходит обработка данных. Код ниже работает отлично, НО он не воспринимает...

Как сместить формулы в VBA при добавлении новых строк в Excel
Имеется очень много формул в таблице, что бы избежать их нечаянного удаления или при добавлении новых строк и столбцов, заполнить их...

Можно ли использовать формулы Excel в коде VBA?
можно ли использовать формулы Excel в коде VBA? например есть такой диапазон: Dim r1 As Range Set r1 =...

26
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
07.02.2016, 17:29
Разумеется можно, в Access тот же VBA, что и в Excel.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 7
07.02.2016, 22:03  [ТС]
Corbis, спасибо за комментарий. С кодом можете помочь?
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
08.02.2016, 01:26
Выкладывайте БД, посмотрим..
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,933
Записей в блоге: 4
08.02.2016, 06:59
что на 65 тыс. строк формулы вешают Excel
может макрос надо написать в екселе?
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 7
08.02.2016, 08:59  [ТС]
shanemac51, добрый день! Думаю, что макрос можно написать и в Excel, и в Access. Главное, чтобы он работал без зависаний программы. Наверное, в Access будет работать быстрее, но, может быть, я ошибаюсь.
Проблема в циклах, которых, видимо, будет немало, поскольку используются формулы суммеслимн и суммпроизв.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
08.02.2016, 09:10
Strecosa, вы собираетесь наконец выложить вашу базу в Access и описать человеческим языком, что именно и каким способом должно быть посчитано?
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 7
08.02.2016, 09:12  [ТС]
Corbis, добрый день!
База (выборка из 87 строк) приложена.
Вложения
Тип файла: rar База.rar (23.7 Кб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 7
08.02.2016, 09:15  [ТС]
Corbis, описание того, что должно быть "на выходе", а также все формулы для вычислений и свод "на выходе", есть в первом письме. Исходная база приложена. Что именно нужно пояснить подробнее?
Спасибо.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,933
Записей в блоге: 4
08.02.2016, 09:20
вы конечно много чего используете(не примере строк 2 и 6)
NNреквизитформула_2значение_2формула_6 
AДата_ 41318 41639
BДата_Квартал 1 4
CДата_год 2013 2013
DДата_месяц 2 12
EДата_Месяц_Имя 02 Февраль 12 Декабрь
FКонтрагент ООО "Ромашка" ООО "Ромашка"
GКонтрагент_от_мемо ГК "Белый медведь" ООО "Ромашка"
HКонтрагент_к_мемо ООО "Ромашка" ГК "Белый медведь"
IДокумент_основание Счет, 1, 05.02.2013 Договор, 07/10-2013, 31.12.2013
JСодержание операции Предоплата за работы Оплата за работы по договору
KДокумент_подтверждение П/П, 459, 13.02.2013 СЧФК, 27, 31.12.2013
LДокумент_сопр_    
M_Номер_операции 212-61282 213-81895
NСумма_документа_руб105000* (1/1000) 10548507978.08* (1/1000) 48507,97808
OДебет_счет_номер 60/1 19/4
PКредит_счет_номер 51 60/1
QСумма_операции_руб105000* (1/1000) 1057399522.08* (1/1000) 7399,52208
RСумма_операции_вал 105000 7399522,08
SExpr1018 БухгалБухгал 
T_Вид_учета Бухгал Бухгал
UКорреспонденция 60/1 - 51 19/4 - 60/1
VSource 2014-2013 2014-2013
WНаименование операции Оплата Начисление
XСумма_руб_знак-105000* (1/1000) -1057399522.08* (1/1000) 7399,52208
YДебет_Ан2_имя    
ZОригинСцепкаIF(Y2<>"", CONCATENATE(Y2, I2, F2) , 0) 0IF(Y6<>"", CONCATENATE(Y6, I6, F6) , 0) 0
AAКол-воНачислCOUNTIFS(Z:Z, Z2, Z:Z, "<>0") 0COUNTIFS(Z:Z, Z6, Z:Z, "<>0") 0
ABДоля для одного начисленияIF(AA2<>0, 1/AA2, 0) 0IF(AA6<>0, 1/AA6, 0) 0
ACПроект/документSUMIFS(AB:AB, I:I, I2) 0SUMIFS(AB:AB, I:I, I6) 1
ADДоля проекта в документеIF(Z2=0, 0, X2/SUMIFS(X:X, I:I, I2, W:W, "Начисление") ) 0IF(Z6=0, 0, X6/SUMIFS(X:X, I:I, I6, W:W, "Начисление") ) 0
AEПовтор_ПрисвоенПроектCOUNTIFS($Z$2:$Z2, Z2, $Z$2:$Z2, "<>0") 0COUNTIFS($Z$2:$Z6, Z6, $Z$2:$Z6, "<>0") 0
AFДокумент для проектаIF(AE2=1, I2, 0) 0IF(AE6=1, I6, 0) 0
AGПрисвоение проектаIF(AND(Y2="", AC2=0) , "Аванс", IF(AND(Y2="", AC2>=1) , INDIRECT(AH2) , IF(Y2<>"", Y2, ) ) ) АвансIF(AND(Y6="", AC6=0) , "Аванс", IF(AND(Y6="", AC6>=1) , INDIRECT(AH6) , IF(Y6<>"", Y6, ) ) ) Вираж -Проект 1
AHтехнич. АдресIF(AND(Y2="", AC2=1) , ADDRESS(SUMPRODUCT ((($AF$2:$AF$88=I2) * ROW($AF$2:$AF$88) ) ) , 25) , IF(AND(Y2="", AC2>1) , IF(AND(LEFT(O2, 2) ="19", Y2="") , ADDRESS(SUMPRODUCT ((($M$2:$M$88=M2) * ($X$2:$X$88=X2/0.18) * ROW($X$2:$X$88) ) ) , 25) , "$AM$1") , 0) ) 0IF(AND(Y6="", AC6=1) , ADDRESS(SUMPRODUCT ((($AF$2:$AF$88=I6) * ROW($AF$2:$AF$88) ) ) , 25) , IF(AND(Y6="", AC6>1) , IF(AND(LEFT(O6, 2) ="19", Y6="") , ADDRESS(SUMPRODUCT ((($M$2:$M$88=M6) * ($X$2:$X$88=X6/0.18) * ROW($X$2:$X$88) ) ) , 25) , "$AM$1") , 0) ) $Y$5
AIСумма_руб_распределеноIFERROR(IF(AC2>1, SUMIFS(X:X, I:I, I2, W:W, "Оплата") * AD2, 0) , 0) 0IFERROR(IF(AC6>1, SUMIFS(X:X, I:I, I6, W:W, "Оплата") * AD6, 0) , 0) 0
AJСуммаНачисления, рубIF(W2="Начисление", X2, 0) 0IF(W6="Начисление", X6, 0) 7399,52208
AKСуммаОплаты, рубIF(AND(W2="Начисление", AI2<>0) , AI2, IF(W2="Оплата", X2, 0) ) -105IF(AND(W6="Начисление", AI6<>0) , AI6, IF(W6="Оплата", X6, 0) ) 0
AL     
AMРаспределено    
AN     
1
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
08.02.2016, 09:27
Цитата Сообщение от Strecosa Посмотреть сообщение
Что именно нужно пояснить подробнее?
ВСЕ. Физический смысл данных, их взаимосвзяь, методику обработки и вычисления. У баз данных другая, чем у электронных таблиц, логика. Если вы хотите получить от базы данных эффективность и скорость, вам нужно забыть о том, что у вас уже сделано в электронной таблице (вы ж сами видите, что оно вас е устраивает), и сделать не "как есть", а "как надо". Поэтому в вашу табличку нас не отправляйте.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 7
08.02.2016, 09:28  [ТС]
Деление на 1000 можно пропустить. Это неважно. Все нужные вычисления начинаются с поля Z. Поля А-Y считаем входящими данными.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 7
08.02.2016, 13:13  [ТС]
Уважаемый texnik-san, в приложении добавлены комментарии к методике вычисления добавленных столбцов. На входе есть таблица в базе. К ней необходимо добавить несколько колонок с вычислениями (методика описана в приложении) и вывести новую таблицу с исходными и добавленными колонками.
Вложения
Тип файла: rar Тест_шаблон.rar (61.7 Кб, 10 просмотров)
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
08.02.2016, 13:57
Strecosa, вы только не сочтите, что я над вами издеваюсь, но я ждала немного другого объяснения.

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

А строки все - для системы равноправные и могут быть пересортированы в любом порядке. Если порядок хочется хранить постоянный - нужно самому позабоиться о том, чтобы добавить в таблицу столбец "номер строки" и заполнить его данными. При этом какими данными заполнишь - такие и будут храниться, система не выполняет автоматическую перенумерацию в случае вставки новых строк или удаления старых. И если не принять специальные меры - то можно создать много строк с одним номером и т.п.

Если одновременно текущее значение ячейки в столбце "Дебет_Ан2_имя" пустое и значение ячейки в столбце "Проект/документ" равно нулю, то возвращаем фиксированное значение "Аванс".
Тут все нормально, эту фразу в контекст аксес перевести можно.

В противном случае, если текущее значение ячейки в столбце "Дебет_Ан2_имя" пустое и значение ячейки в столбце "Проект/документ" больше или равно 1, то возвращаем значение ячейки по адресу, указанному в соответствующей строке столбца "технич. Адрес".
А вот эта фраза лишена смысла, потому что нет "ячеек" и нет "адресов".

Поэтому лучше всего будет рассказать принцип таки нормальным человеческим языком.

Примерно так (чисто образец, все с потолка):

Имеются сведения о поставках (дата, контрагент, тип документа, домер документа, номер договора, сумма) и оплатах (дата, контрагент, номер договора, сумма), и требуется сопоставить, какая оплата относится к какой поставке по таким правилам:
1) должны совпадать названия контрагентов и номера договоров. Поставки без номера договора сопоставляются только с оплатами без номера договора
2) сопоставление поставок и оплат происходит в порядке возрастания даты. Если в одну дату было несколько поставок или оплат, то порядок определяется номером документа
3) если дата первой оплаты раньше даты первой поставки, такой оплате должна быть присвоена метка "аванс"
и т.д.
1
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
08.02.2016, 14:02
Цитата Сообщение от Strecosa Посмотреть сообщение
Уважаемый texnik-san
правильнее будет - уважаемая
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
09.02.2016, 02:23
Цитата Сообщение от texnik-san Посмотреть сообщение
добавить в таблицу столбец "номер строки" и заполнить его данными.
Желаю ТС побольше подобных советов.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
09.02.2016, 02:39
Цитата Сообщение от alvk Посмотреть сообщение
Желаю ТС побольше подобных советов.
Если это ирония/сарказм, то хочется возразить. Не редкость когда в документе требуется определенный порядок. Как его сделать, если в исходной таблице порядок не указан? Никак. Ну не делать же длинючий код для правильной сортировки, когда можно элементарно просто задавать ее в таблице. Так что Номер строки иногда очень полезный атрибут. Более того, был случай, когда для одного справочника задавалось несколько различных сортировок и пришлось создать специальную таблицу сортировок для разных выходных документов.
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
09.02.2016, 03:16
Цитата Сообщение от mobile Посмотреть сообщение
Не редкость когда в документе требуется определенный порядок.
Редкость.
Цитата Сообщение от mobile Посмотреть сообщение
Так что Номер строки иногда очень полезный атрибут.
В справочнике одном я тоже использовал поле для порядкового номера отображения в списке. Но у ТС таблица фактов. А это совсем другое.
0
459 / 246 / 15
Регистрация: 29.10.2014
Сообщений: 1,084
09.02.2016, 17:26
Цитата Сообщение от Strecosa Посмотреть сообщение
Проблема в том, что на 65 тыс. строк формулы вешают Excel
Ну и пусть вешают, чем это плохо?
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
09.02.2016, 18:02
Цитата Сообщение от commun Посмотреть сообщение
Ну и пусть вешают, чем это плохо?
Скорости хочется?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2016, 18:02
Помогаю со студенческими работами здесь

Код склеивания строк, нужно поправить код соединения строк с запятыми для Excel
Есть красивый код но в нем учитывается и пустые строки для соединения и получается не красиво соединение с двумя запятыми как не...

VBA vs Формулы Excel - разные результаты вычислений над числом Пи
Элемент задания имеет вид ctg(pi*a)^2, где рі=3,1415926. В VBA прописывал как 1/(tan(pi*a)^2), аналогично прописывал в MS Excel, только...

Код VBA в Access 2010 работает, в Access 2007 выдает ошибку
Написала код VBA в Access 2010 - работает, в Access-2007 выдает ошибку. В чем причина - подскажите

Почему разработчики Excel'я сделали его ограниченным: 65 тыс. строк на 252 столбца?
Кто знает, почему разработчики Excel'я сделали его ограниченным: 65 тыс. строк на 252 столбца? И, вообще, возможно (физически) сделать его...

Excel+Access с использование VBA
Доброе день, уважаемые форумчане! Задачка: Есть база данных на Access, там же создан запрос. Нужно выгрузить данные полученные в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru