Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 След.
Может ли запуск PQ-скриптов из VBA увеличить их время выполнения против обычного запуска?, Теоретический вопрос
 
Действительно, замена
Код
RefreshAllAndWait


на
Код
ThisWorkbook.RefreshAll
DoEvents


вернула время выполнения к "около 15 минут".


Дмитрий(The_Prist) Щербаков, огромное спасибо за идею
Может ли запуск PQ-скриптов из VBA увеличить их время выполнения против обычного запуска?, Теоретический вопрос
 
Добрый день, уважаемые

Есть файл xlsx с pq (Power Query) скриптами внутри. Они доставали с гос.сайта инфу и добавляли ее к локальным данным. Все это дело отрабатывало где-то за 15 +/- пару минут
Внезапно для меня формат данных с гос.сайта поменялся. Теперь ту часть кода pq, что доставала данные, пришлось засунуть в VBA (не умеет pq делать такие штуки).
То есть получился такой код:

Код
Sub ProcessAndDownloadExchangeRates()
...
тут код, который достает данные
...
а затем вызывается выполнение pq-скриптов
RefreshAllAndWait
End Sub

Sub RefreshAllAndWait()    
' Запускаем обновление всех запросов Power Query    
ThisWorkbook.RefreshAll    
' Ждем завершения обновления    
Dim conn As WorkbookConnection    
Dim allDone As Boolean    
Do        
DoEvents ' Позволяет Excel обновить интерфейс        
allDone = True        
For Each conn In ThisWorkbook.Connections            
On Error Resume Next ' Игнорируем ошибки, если свойство Refreshing недоступно            
If conn.Type = xlConnectionTypeOLEDB Or conn.Type = xlConnectionTypeModel Then                
If conn.Refreshing Then                    
allDone = False                    
Exit For                
End If            
End If            
On Error GoTo 0        
Next conn    
Loop Until 
allDone    
MsgBox "Все запросы Power Query успешно обновлены!", vbInformation
End Sub
[CODE][/CODE]

VBA-код без вызова обновления pq-скриптов выполняется около минуты. За то с вызовом обновления - около часа. То есть, грубо говоря, pq выполняется этот самый час.

У меня возник вот такой вопрос - почему так происходит? Почему время работы просто pq-запросов и их же, но вызванных через VBA так сильно различается? Машина та же (да, барахло, но работает), скрипты те же (более того, часть кода убрал потому как VBA ее теперь делает), данные те же. А время выполнения столь разительно различается - в 3-4 раза медленнее из-под VBA.

Изменено: AlexDen - 28.01.2025 09:02:14 (форматирование съехало - поправил)
Поменять адрес и индекс в рамках одной строки местами
 
Цитата
написал:
Вариант формулой.Код=ЕСЛИОШИБКА(СЖПРОБЕЛЫ(ЛЕВСИМВ(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("обл";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-200))&", "&СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("обл";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-100;150))&", "&СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("обл";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-200;150))&", "&СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("обл";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))+50;1000000);ПОВТОР(" ";100);""));
ЕСЛИОШИБКА(СЖПРОБЕЛЫ(ЛЕВСИМВ(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("край";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-200))&", "&СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("край";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-100;150))&", "&СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("край";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-200;150))&", "&СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("край";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))+50;1000000);ПОВТОР(" ";100);""));
ЕСЛИОШИБКА(СЖПРОБЕЛЫ(ЛЕВСИМВ(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("Респ";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-200))&", "&СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("Респ";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-100;150))&", "&СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("Респ";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))-200;150))&", "&СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПСТР(ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100));НАЙТИ("Респ";ПОДСТАВИТЬ(D2;",";ПОВТОР(" ";100)))+50;1000000);ПОВТОР(" ";100);""));
D2)))
я ж говорил, придут старшие товарищи и сделают как надо
Поменять адрес и индекс в рамках одной строки местами
 
Цитата
написал:
Финальный результат: индекс, область, город, улица.
вот вы меня конечно извините, но этот результат давно есть.
ваша задача - протянуть столбцы с I по R до конца вашего диапазона адресов
я открыл свой файл из сообщение #8 и сделал скриншот - снова его положу в виде PDF. тут в столбце R:
индекс, обл/край/респ если есть, прочий адрес
я не пойму, что еще вы хотите - все уже есть

вообще, покажите, что у вас получилось - мы как будто про разные файлы говорим. дайте сюда кусок вашего файла
Изменено: AlexDen - 20.12.2024 07:23:26
Возможно ли макросом сохранить новую книгу на исходную?
 
Цитата
написал:
когда-то давно
это ведь был DOS или Windows 95/98? Другие операционки такого не позволяют - прямой доступ к диску
Возможно ли макросом сохранить новую книгу на исходную?
 
Цитата
написал:
как восстановить файл, перезаписанный поверх с тем же именем
он практически гарантировано не перезапишется на то же место диска - ФС об этом позаботится.

Hugo меня опередил

так что смысла в этом действе нет - изначальный файл останется на диске, хоть и без записей в ФС, так что найти его вполне возможно
Изменено: AlexDen - 19.12.2024 17:03:32
Возможно ли макросом сохранить новую книгу на исходную?
 
Цитата
написал:
место на диске затереть
отмонтировать текущий том, затереть ФС...

мне кажется, это - самозатирание - неправильное решение в принципе
Изменено: AlexDen - 19.12.2024 16:54:04
Возможно ли макросом сохранить новую книгу на исходную?
 
мне почему-то кажется, что прямо так не получится

вот если текущий файл "сохранить как" временный, первоначальный перезаписать новым, а дальше я не знаю, может ли он сам себя удалить или нет. по идее, не сможет.

может, как вариант, скрипт просто очистит весь файл от всего, в том числе и скриптов, оставит один пустой лист. только сможет ли он самосохраниться и закрыться - не знаю

Upd:

GPTChat считает, что Workbook_Open может не только очистить всю книгу, но и сам  себя удалить, а после  сохранить. Не могу проверить сейчас - далеко от экселя
Изменено: AlexDen - 19.12.2024 16:44:05
Power Query ссылка в запросе на шаг из другого запроса.
 
Цитата
написал:
не понял про "текущий вид"...

их два, те, что предложили вы - где через запись, и где через метаданные. оба обращаются к не последней записи Запрос1:

Код
// Запрос2
let
    Источник = Запрос1[шаг1]
in
    Источник

и

// Запрос2
let
    Источник = Value.Metadata(Запрос1)[ннада]
in
    Источник


в любом случае, спасибо за разъяснения. то есть, в принципе обращаться к конкретному (не последнему) шагу другого запроса можно, но и оптимизацией кода можно получить аналогичный результат.
Power Query ссылка в запросе на шаг из другого запроса.
 
Да, я тоже просветился! AlienSx, спасибо!

Заодно вопрос возник у меня.
В текущем виде Запрос2 ссылается на шаг1 из Запроса1
Не будет ли быстрее с точки зрения выполнения сделать Запрос0, которы будет копией Запроса1 по шаг1 включительно, а затем Запрос1 (шаг2 и далее) и Запрос2, которые будут ссылаться на Запрос0?

Это не про критику, это для понимания механизмов работы PQ.

Типа такого:
Код
// Запрос0
let
    Источник = Excel.CurrentWorkbook(){[Name="Таб1"]}[Content],
    шаг1 = Table.RemoveLastN(Источник,2)
in
    шаг1

// Запрос1
let
    Источник = Запрос0,
    шаг2 = Table.RemoveLastN(Источник,2)
in
    шаг2

// Запрос2
let
    Источник = Запрос0
in
    Источник
Изменено: AlexDen - 19.12.2024 10:25:36
Поменять адрес и индекс в рамках одной строки местами
 
Цитата
написал:
У нас вот так получилось445043, г   Тольятти,  ул Коммунальная влд 32А в идеале вот так 445043, Самарская обл, г Тольятти, ул Коммунальная влд 32
вот же, как вам нужно в колонке R (скриншот):

(не понял я как картинки приложить)


либо у вас область называется не только " обл" или " область", но и, к примеру, " Обл" (" Область") - в этом случае, да, в колонку К название области не попадет. На этот случай добавьте еще одну колонку (S например) с формулой из столбца К, где " обл" замените на " Обл" (или как у вас еще область решили назвать), аналогично с краем и республикой. и в колонку R добавьте добавленные колонки (S, может еще какие) по аналогии

Нет, возни много будет. Мне кажется, проще сделать так:
у вас республика называется "Респ." и "Респ" - глобально в столбце замените "Респ" и "Респ.", а потом "Респ.." и "Респ.". После этого в строке 1291 примера Ингушетия тоже найдется в колонке М (респ), и, соответственно, дальше окажется на правильном месте в итоговом адресеС областями и краями аналогично

А для строки 1264 примера - "г Салехард, АО. Ямало-Ненецкий Маяковского ул 13в,  629003" проще руками сделать - что-то я пропустил автономные округа. Вряд ли их у вас будет много

Ну и в строке 1304 примера "Уфа, Башкортостан Рубежная ул 174,  450018" Башкортостан конечно не найдется - он же без "Респ."
Изменено: AlexDen - 19.12.2024 09:28:04
Поменять адрес и индекс в рамках одной строки местами
 
как вариант
Excel 365, колонка final (колонка R)
(старшие товарищи будут смеяться)
Изменено: AlexDen - 18.12.2024 12:06:01
Диапазон чисел в одной ячейке
 
может тогда на отдельном листе в столбец (раз документов так много, что столбцов не напасешься) добавлять документы с номерами, а в соседнем - номера ящиков для них?
номера документов - автозаполнением

а если грамотные товарищи напишут скрипт, куда вводится номер начального документа, конечного и номер ящика, то скрипт сам будет заполнять этот лист
Изменено: AlexDen - 13.12.2024 17:58:44
Разделить текст в строке формулой
 
Цитата
написал:
 без формул тут .
и правда, Flash Fill работает! не знал... (хотя нет, пару раз встречался когда Excel мне вдруг начинал предлагать заполнить ячейки "по образцу", но мне тогда это было категорически не нужно и я отвергал его попытки испортить мне данные. а это, оказывается, был Flash Fill)
век живи - век учись
Изменено: AlexDen - 11.12.2024 15:06:02
Разделить текст в строке формулой
 
Код
=LEFT(A1,FIND(" ",A1,FIND(" ",A1,1)+1)-1)
Код
=ЛЕВСИМВ(A1;НАЙТИ(" ";A1;НАЙТИ(" ";A1;1)+1)-1)


если строка с ФИО в А1 и Ф, И и О разделены пробелом
Изменено: AlexDen - 11.12.2024 13:47:39
Защита Excel с AD (Active Directory)
 
Цитата
написал:
горшочек, не вари.
мне ли с модераторами спорить
Защита Excel с AD (Active Directory)
 
а можно без всякого ZIP-а обойтись. запаролить листы и открывать их тем скриптом в автозапуске

отменил скрипт - нет доступа к листам
Изменено: AlexDen - 06.12.2024 08:27:55
Защита Excel с AD (Active Directory)
 
Цитата
написал:
читайте про то как запустить файл не запуская макросы :-)
на этот случай я бы предложил файл "шифровать" - заменять, не знаю, "А" на "№" и расшифровывать как раз скриптом "в автостарте"
то есть, без "расшифровки" файл будет выглядеть не так, как ожидалось

а еще лучше запаковать правильный файл в какой-нить ZIP с паролем, этот бинарник перевести в текстовый вид и сохранить на листе. при открытии преобразовывать его обратно в ZIP с паролем, а пароль лежит в папке-файле, где через AD прописаны разрешения читать ее кому надо. а вот это уже будет не балалайка с заменой букв на другие, а вполне серьезное шифрование

З.Ы. я давно-давно видел похожее - в компьютерном журнале напечатали текст бинарника, предложили его набить в HEX-редакторе, "сохранить как" ZIP-файл (а может RAR? не важно) и распаковать. внутри был то ли исходник чего-то то ли еще что-то полезное
Изменено: AlexDen - 06.12.2024 08:29:07
Защита Excel с AD (Active Directory)
 
а если VBA-скрипт "в автостарте" файла разместить, который сразу закрывает файл если пользователи "не те" (то есть, не из списка)?

что-то вроде такого: VBA. Получить имя учетной записи Microsoft Office 365, под которой Excel открывает файлы с sharepoint? (решено)
Изменено: AlexDen - 06.12.2024 07:59:59
VBA. Обойти ограничение на длину пути к файлу в 255 символов
 
Цитата
написал:
необходимо ежедневно формировать заново, чтобы не отслеживать все изменения внесенные другими людьми,
а нельзя ли тут, как часть процесса, использовать функционал архиваторов (тот же tar к примеру, да все нормальные архиваторы вроде такое умеют делать), который позволяет "архивировать файлы, измененные за последние сутки"? этот архив локально распаковывать, и работать уже с ним, а результат добавлять к предыдущим - как-то так
Изменено: AlexDen - 04.12.2024 08:44:31
VBA. Обойти ограничение на длину пути к файлу в 255 символов
 
SUBST тоже запрещен? вроде не требует админовских прав. если не запрещен, им можно было было бы папку с длинным именем, в том числе и сетевую, обозвать вирт. диском (X: какой-нибудь) и уже внутри него работать.
Изменено: AlexDen - 04.12.2024 08:38:08
Как ускорить миллионы вычислений, ~20млн. ячеек с переменными сильно тормозят
 
A132, вопрос может не в тему, но, скажите, а зачем эти миллионы комбинаций (я не говорю что не нужны)? Просто интересно, что это за задача такая. Статистика?
Как ускорить миллионы вычислений, ~20млн. ячеек с переменными сильно тормозят
 
Цитата
написал:
Столько данных лучше выгружать в отдельный  файл и считывать их от туда когда требуется.
CSV?
Промежуточные итоги, subtotal
 
Цитата
написал:
с формулой работает, а вот как бы обойтись без её отображения?
покрасить в цвет фона например
Power Pivot: date table и сортировка месяцев в календарном порядке, январь 2025 года идёт раньше декабря 2024 года
 
А вы уверены, что ваша дата имеет именно формат "дата", а не "строка"?
Я у себя посмотрел - независимо от представления, дата с типом "дата" сортируется правильно
Саундинг по крену и дифференту, Саундинг по крену и дифференту
 
Цитата
написал:
off: Яхта Беда продолжала свой путь...
ну дык, "как вы яхту назовете, так она и поплывет". как вопрос задан, такой и ответ будет.
Саундинг по крену и дифференту, Саундинг по крену и дифференту
 
Цитата
написал:
Но ячейка B3 должна показывать всегда положительный результат, от 0 до 1,567метра.
на листе "Крен" я сделал одну сторону положительной - "крен налево", другую отрицательной - "крен направо". возможно, поэтому вылезают отрицательные числа.

Цитата
написал:
например дифферент коровой 1,5 должен показывать -152, а крен 1градус налево должен показывать 41, а не 63. И если задать дифферент 1,8 то в ячейках ошибки.
понимаете, вы же не дали методику расчета. то что придумал GPTChat вовсе не обязано соответствовать  - он вообще может полную лажу написать при таких вводных условиях. Сам я представления не имею, как должен производиться расчет (я и нечто плавающее и больше прогулочного катера в жизни видел, может, пару раз, и то с приличного расстояния). вы тоже не балуете информацией. поделитесь методичкой, что с какого листа брать, к чему прибавлять. она же у вас есть? без нее эти цыфирки можно бесконечно складывать-вычитать-делить-умножать (и получить число "пи", "е в 10-й степени" или вообще вызвать ацкого сотону)



Цитата
написал:
И если задать дифферент 1,8 то в ячейках ошибки.
правильно, у вас в этих ячейках ничего не записано. при ручном расчете вы же как-то этот момент разрешаете?

Итого, дайте методику расчета. С ней грамотные читатели форума (это точно не я) помогут прикрутить правильные формулы. Самую тяжелую часть вы сделали - оцифровали. Осталось понять, как использовать это все.
Изменено: AlexDen - 19.11.2024 08:50:59
Саундинг по крену и дифференту, Саундинг по крену и дифференту
 
Цитата
написал:
Зделал я вот такую табличку,  а что делать дальше, куда формулы вставлять, чтоб она считала, ума не приложу.
я вашу таблицу слегка модифицировал - привел в соответствие с указаниями из #7 (ваши оригинальные листы скрыл, и про "Вместимость" вселенский разум в виде GPT chat-а ничего не сообщал, так что не знаю что с ней делать)
что-то считает, во всяком случае, не ругается (повторюсь, я не вдавался в математику, я не знаю что эти цыфирки в действительности обозначают (да, какие-то поправочные величины, таблицы Брадиса в детстве читал))

формулы в ячейках B1, B2 и B3
Изменено: AlexDen - 18.11.2024 12:12:12
Унификация адресов с различными данными и написанием
 
я когда-то похожую задачу делал для улиц города. названия заводились как попало, с ошибками, пропусками, "по-старому" (советское название), "по-новому" (пост-советское название), иногда микрорайон/район приделывали зачем-то, да с номерами домов, корпусов, даже подъездов и квартир. ужасное занятие было. мне еще полгода потом снились эти адреса... за то узнал какие где микрорайоны, районы, улицы...

подход был примерно такой в приложении вашей задачи:
0. проиндексировать первоначальный список - чтобы потом можно было связать ваш новый список (где все разделено как положено) с исходником (зачем? вы же в процессе будете всякую сортировку делать по разным полям, выборки и т.д.
1. все перевести в нижний регистр и выкинуть ненужные знаки вроде "длинных пробелов" и прочей пакости, которая мешает работать со строками (что бы не разбираться, "Киров", "киров", "КИРОВ", "к_иров" и т.д. это одно и то же или разное)
2. найти приемлемый разделитель полей - у вас это явно пробел
3. первоначально поделить по разделителю
4. откинуть сразу все, где явно прописано "гор.", "пос.", "г." и т.д. в колонку "Город", все что про области в "Область" и тд (самая нудная часть работы, зато  процентов 90-95 списка закроет)
5. оставшаяся часть списка, которую завели настолько "оригинально", что ни в какие рамки не лезет не поддается логике - ее руками придется

а может и правда, воспользоваться предложением Алексей Абраменко чем тратить, как минимум, недели жизни?
почему 01.01.2019 эксель меняет на янв.193, формат даты
 
Цитата
написал:
11.11.2024
ага!!!! да у вас день и месяц поменялись местами!(шучу, по делу ничего не скажу - не к профи)
Страницы: 1 2 3 4 След.
Наверх