Poul trade forum як збільшити швидкість роботи екселя


Не знаю як реалізовано оновлення. )
Але можу припустити - Excel перераховує формули з кожним надійшли оновленням даних, квантованно якось, чи що.
Це сильно гальмує. У мене на час поновлення з текстовиков (макросом) макрос виключаеет автоматичний перерахунок в книзі, а потім включає знову. Перераховується тільки кінцевий результат з повністю оновленими даними.
Робиться це приблизно так:

Sub test ()
'Вимикаємо автоматичний перерахунок в книзі
Application.Calculation = xlManual

'Тіло макросу імпорту та попередньої обробки даних

'Включаємо автоматичний перерахунок в книзі
Application.Calculation = xlAutomatic


. ще й котирування по DDE приймає в моменті, мабуть? Або MT включати після поновлення з текстовиков, або формули-посилання на MT в осередках прати, а потім макросом відновлювати.


Не, котирування по DDE я в цей момент відключаю, а то б взагалі загнувся комп. І так при прийомі котіроваок практично не фіга більше не можу робити. З імпортом дійсно, включена функція оновлення формул. Справа в тому, що якщо її відключати, то при додаванні нового рядка в неї не копіюються формули, які поруч з даними і потім все це треба робити все вручну тобто скопіювати формули в новий рядок. Напевно все таки ви маєте рацію, і в цьому випадку треба спробувати написати макрос, який запускати після імпорту, а саму опцію відключити, а то ну її нафіг з такою продуктивністю.


На мій погляд, взагалі потрібно (якщо це можливо в принципі) спочатку отримати дані в Excel, а потім їх обробляти. І, на мій погляд, краще все-таки ср-ми VBA.
ЗИ Півгодини чекати - не термін, а на питання "що робити не знаю" на мій погляд гарне рішення - поставити окремий комп на отримання даних.

--------------------
Маленьких цуценят-лабрадорів віддали в добрі руки, але пустунам не сидиться на місці і вони вирішують втекти.

Все це вже втілювали в життя.


Всім велике спасибі за поради. Я зробив трохи по іншому, все текстові файли історії котирувань під'єднав до акцкссу, через sql створив запити з попередньою обробкою і їх кинув на Ексель через той же sql для остаточних розрахунків. Тобто акцксс використовується як проміжний контейнер для зберігання даних. Все запрацювало на кілька порядків швидше. Лнтает, аж душа радіє.

Для nofx, цілком можливо, що все треба програмувати на VBA аж до формул. Але в моїй практиці попався випадок. Скачав приблуди для швидкої побудови матриць кореляцій, які були реалізовані в VBA. Виявилося, що матриця кореляцій зроблена за допомогою вбудованих формул працює швидше ніж код. Це я до того, що не для всіх, особливо для таких як я чайників, все піддається реалізації в коді. Іноді, від великого розуму можна не поліпшити, а погіршити.


формули в осередках швидше працюють ніж розрахунки на VBA. Я поступаю так - макросом вводиться формула в осередок >> простягається до кінця діапазону >> формули в осередках замінюються на значення.

Для перевірки швидкості різних варіантів виконання однієї і тієї ж задачі можна використовувати макрос:

Sub Test () 'макрос вимірювання швидкості виконання
t = Timer
'' ''
Call Test2 'запуск макросу для якого вимірюється швидкість роботи
'' ''
MsgBox (Timer - t) * 1000 "Msec"
End Sub


"Цілком можливо, що все треба програмувати на VBA аж до формул. Але в моїй практиці попався випадок. Скачал приблуди для швидкої побудови матриць кореляцій, які були реалізовані в VBA. Виявилося, що матриця кореляцій зроблена за допомогою вбудованих формул працює швидше ніж код. це я до того, що не для всіх, особливо для таких як я чайників, все піддається реалізації в коді. Іноді, від великого розуму можна не поліпшити, а погіршити. "

Дійсно, табличні функції можуть швидше працювати швидше з таблицею ніж в вигляді VBA коду, але нам нічого не заважає викликати ці ж табличні (НЕ VBA) функції стосовно масиву або Range використовуючи WorksheetFunction

Але наскільки зрозумів Ваш головний затикаючи це не швидкість формул а порядкове наповнення з перерахунком на кожному рядку, так що можна було б істотно поліпшити швидкість через формування таблиці даних в масиві і відправити потім масив а не через підрядник в таблицю, а таблиця вже перерахує всі формули один раз.

Але Ви вибрали більш серйозний варіант.


Хлопців, нід хелп. Необхідно щоб в Ексель виводилися останні 50 рядків з "таблиці всіх угод" Квик. По всій таблиці розрахунок йде занадто довго.

Варіант з БД зрозумілий, подумав Ви маєте на увазі відправляти безпосередньо і не зрозумів як.

Ну якщо Вас влаштовує (хоча рішення досить нераціональне) то можна зробити так. В одну таблицю (точніше лист) виводите з Квик як зараз. Якщо там є хоч одна формула то при додаванні кожного рядка буде перераховуватися. Використовуємо в цьому випадку Worksheets Calculate листа в який йде ТВС. У разі якщо формул немає то за таймером робимо перезапуск.

Пишемо в VBA макрос який бере крайні знизу 50 рядків з цієї таблиці в range (використовуємо LAstUsedRow) і пише весь range на інший аркуш. Запускаємо його як описано в попередньому абзаці.

В результаті боюся що буде у Вас затикаючи в момент роботи макросу т до потік ТВС дуже серйозний.


Скажіть а якщо зробити слід. чином, по DDE в Ексель виводити (онлайн) таблицю всіх угод як зазвичай, дані починають заповнювати рядки в екселя по порядку зверху вниз і потім як небудь вивести, наприклад в інший лист останню отриману рядок, так буде простіше ніж варіант з 50-ю рядками, як таке реалізувати?


У відповідь на.
STMakler писав:
Скажіть а якщо зробити слід. чином, по DDE в Ексель виводити (онлайн) таблицю всіх угод як зазвичай, дані починають заповнювати рядки в екселя по порядку зверху вниз і потім як небудь вивести, наприклад в інший лист останню отриману рядок, так буде простіше ніж варіант з 50-ю рядками, як таке реалізувати?


напишіть скрипт для Квик на купелі (портфель). який буде обробляти в самому Квік таблицю всіх угод в необхідне вам кількість рядків, а потім експортуйте з портфеля в excel


У відповідь на.
Ptem писав:
напишіть скрипт для Квик на купелі (портфель). який буде обробляти в самому Квік таблицю всіх угод в необхідне вам кількість рядків, а потім експортуйте з портфеля в excel


Писав вже такий скрипт, тільки затримка з поточними даними близько 5 хвилин виходить, в екселя як не дивно виходить швидше але постійно прокручувати щоб подивитися останнє значення дуже незручно, але найголовніше що не виходить вивести останній рядок для подальшої обробки, дані то надходять постійно і останнє значення завжди буде в іншому рядку екселя вона буде завжди зміщуватися вниз. треба якось зробити щоб Ексель розумів де знаходиться останній рядок і виводив її окремо.


У відповідь на.
STMakler писав:
. треба якось зробити щоб Ексель розумів де знаходиться останній рядок і виводив її окремо.

--------------------
Маленьких цуценят-лабрадорів віддали в добрі руки, але пустунам не сидиться на місці і вони вирішують втекти.