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

Страницы: 1 2 След.
DAX Создание расчетной таблицы через Summarize с переменным условием
 
Владимир, спасибо за ответ/совет. Так и сделаю.
Я просто хотел понять, действительно ли сводная таблица не может создаваться с внешним условием и каждый раз пересчитываться, когда внешнее условие (фильтрация несвязанной таблицы через срез) меняется.
Сейчас еще почитал немного документации у майкрософт, видимо действительно так нельзя, создаваемой сводной таблице по всей видимости плевать на контексты фильтров чего либо, кроме фильтров той таблицы, из которой она собственно строится.
DAX Создание расчетной таблицы через Summarize с переменным условием
 
По DAXу отдельного форума не нашел, смотрю все в эксель пишут, поэтому и я сюда же напишу.
Напишу скорее всего непонятно, но во вложенных примерах все видно и понятно.
Есть 2 несвязанных таблицы. В первой таблице (Заявки) столбцы "Номер заявки" и 3 столбца с датами: дата поступления заявки, дата подписания заявки и дата передачи в лизинг.
Создаю вычисляемую таблицу SlicerTable, с помощью которой можно было бы делать аналог связанных выпадающих списков: типа говоришь "хочу данные по дате поступления заявки", и тебе в срезе показываются только годы, которые есть в столбце "дата поступления заявки". Говоришь "хочу данные по дате подписания договора", и тебе в срезе только годы, которые есть в столбце "дата подписания договора", и т.д.
Сделал SliserTable, вывел 2 среза на лист, все работает.

Дальше есть таблица "Регионы". В ней есть поле с годом. Хочу, чтоб при выборе года в созданном срезе по годам у меня выводились на лист данные из "Регионы" только по выбранному году (напомню, что связи между таблицами нет. Можно конечно сделать костыль через дополнительную таблицу с уникальными годами, но я хочу понять как это без костыля сделать).
Создаю сводную вычисляемую таблицу из таблицы "Регионы", где говорю, что выведи мне регионы, кол-во заявок и сумму для этих регионов, но с условием, что год должен быть равен выбранному году на ранее выведенном срезе по годам. И вот эта операция не работает. Т.е. если я просто создаю сводную таблицу и в условие какой год показывать вбиваю статичную цифру (например, 2020), то сводная строится и все ок. Если же я ей в условие говорю что постройся только по году, равному году в срезе (SELECTEDVALUE), то таблица выводится пустой.
Во вложении эксель и pbix, там все должно быть понятно.

Вопросы:
1. Видимо существует какое-то правило, что в вычисляемой таблице условиями вычисления не могут быть переменные?
2. Как можно это обойти, не строя костыльную таблицу для связывания SlicerTable и "Регионы" по годам?
Selenium работа с Chrome
 
Андрей Лящук, драйвер кладу в папку, куда установил Selenium.
А установил его на Диск C\Users\..имя пользователя...\AppData\Local\SeleniumBasic.

Компьютер не личный, рабочий, я не под админскими правами на нем. Может в этом быть причина тоже?
В настройках браузера сверху надпись "Этим браузером управляет ваша организация". При обычной работе с браузером никаких проблем и ограничений не замечал. Но возможно для обращения к браузеру программным методом нужны права администратора. Как думаете, какова вероятность, что причина в этом?
Selenium работа с Chrome
 
Ну да, это видимо именно несовместимость chromedriver в папке Seleniumа с самой версией Хрома.
Скачал с Гугла 4 последние версии chromedriver, поочереди их поместил в папку с Селениумом, протестил, всегда возникает такая же ошибка, что мол версия Хрома 88.0.4324.150, версия драйвера такая-то.
Теперь остается вопрос где взять chromedriver для Хрома 88.0.4324.150, если его (драйвера) нет на оф.сайте.
Либо ждать, что он скоро появится, либо версию Хрома откатывать на более старую.
Разделение строк по содержимому ячейки
 
Если честно, вообще ничего не понятно.
Есть ячейка B2, в ней прописан текст "От 0,10 (1,0) до 0,63 (6,3) включ.".
Где то видимо есть ряд значений  "0,1", "0,25", "0,63", "1,0", "1,6", "2,5", ... ", лучше указать где именно он есть.
Какую ячейку нужно разделить на количество строк? И что вообще такое "разделить ячейку на строки"?
Selenium работа с Chrome
 
Всем привет!
Скачал селениум, установил, скачал новый chromedriver, заменил в папке селениума родной Chromedriver.exe на вновь скачанный.
Библиотека Selenium в Reference.Tools появилась, установил, пытаюсь работать. Определение переменной как new webdriver/ new chromedriver понимает, не ругается.
Но при .start "Chrome" или .Get "http://блабла"  выдает ошибку Session not created, и чето там про версию Хрома.
Я так понимаю, что для моей версии Хрома нужен другой драйвер. Посмотрел свою версию браузера: Версия 88.0.4324.150 (Официальная сборка), (64 бит).
Залезаю на сайт Гугла с драйверами, нет драйвера для такой версии. Есть для 88.0.4324.96, его как раз и скачал, и с ним как раз и не работает.
Кто нибудь сталкивался? Чего сделать, чтоб заработало? Какой драйвер и где взять? Или дело вообще не в драйвере?
Поиск минимальной даты в ячейках текстового формата через VBA
 
Да, вероятно так и есть.
Ладно, всем большое спасибо за помощь! Значит будет массив + цикл. Я просто думал может какой нибудь Evaluate все это можно было как то просто записать в одну строчку.
Как правильно сделать подсчёт очков турнира
 
Да, с такой структурой таблицы и неизвестным числом игроков формулу врядли напишешь, да и кодом это будет на сотню строк с кучей проверок.
Поменял немного структуру таблицы, в которую вносятся очки. Можно конечно было через банальную умную таблицу и свод это сделать, но я решил заморочиться с Dictionaris, заодно вспомнить как они работают.
Держите.
Изменено: VasiliY_Seryugin - 18.01.2021 13:15:51
Поиск минимальной даты в ячейках текстового формата через VBA
 
Юрий, спасибо за ответ! Но циклом я знаю как сделать.
Суть в том что есть Куб OLAP, из которого даты выгружаются в текстовом формате. И таких дат, допустим, 400 тыс. строк.
И нужно найти минимальную и максимальную даты с минимальными времязатратами. Делать дополнительные столбцы на листе для преобразования 400 тыс. строк не хочется, формулу массива записывать на лист для 400 тыс. строк тоже не хочется.
Циклом в целом это обработать не долго займет, особенно если в массив загнать, но я думал может быть эту формулу можно просто записать и посчитать в VBA, при этом физически не записывая ее на лист (и не использую цикл для решения).
Изменено: VasiliY_Seryugin - 18.01.2021 11:39:39
Поиск минимальной даты в ячейках текстового формата через VBA
 
Всем привет! Думаю простой вопрос для знатоков.
Есть лист, на нем есть Range с датами, записанными в текстовом формате. Нужно через VBA в этом Range найти минимальное значение даты.
При этом не нужно менять формат самих ячеек на листе и записывать формулу на лист (через формулу массива, записываемую на листе, я знаю как это сделать, но хочу понять как это делать, ничего не меняя на листе и не записывая на него).
Как это сделать циклом (в т.ч. массивом + циклом) я тоже знаю. Но мне кажется что есть способ просто записать формулу, которая будет работать как формула массива, через WorksheetFunction, и никаких циклов не понадобится. Итого вопрос звучит примерно так: во вложении пример с попытками записать формулы типа "формул массива" через WorksheetFunction. Как их записать правильно?
VBA делать пока код в цикле выдает ошибку (делать до первой неошибочной попытки)
 
Ребят, всем спасибо за ответы! Вы просто недооценили уровень моего незнания VBA  :)
У меня как раз вот и есть проблема с тем, как записать, что "операция удалась" или "операция не удалась"?

Цитата
vikttur написал:
Do While задача_не_выполнена        '...........    Loop
Вот как это кодом записывается?
Do While [код] = Error или как?

Цитата
vikttur написал:
Do        '...........    Loop Until задача_выполнена
И это как записывается?
Do ... Loop Until [код] <> Error?
Do ... Loop Until [код] IS NOT Error?
Do ... Loop Until [код] NOT IsError?


Цитата
vikttur написал:
 If задача_выполнена Then Exit For
Как записать проверку, что "задача выполнена", т.е. строка кода выполнена и не дала ошибку?

Вот на столько у меня все плохо с VBA.
Логика то операции мне понятна, у меня проблемы с синтаксисом.
VBA делать пока код в цикле выдает ошибку (делать до первой неошибочной попытки)
 
Ігор Гончаренко,  ничего не могу возразить.
Так уж вышло, что знания набираю по ходу практики.
Вот теперь благодаря вам буду знать команду, считывающую номер ошибки, наверняка в будущем пригодится.
Сам бы наверное не скоро до этого дошел тоже;)
VBA делать пока код в цикле выдает ошибку (делать до первой неошибочной попытки)
 
Дмитрий(The_Prist) Щербаков,  Круто! Счетчик ерроров. Я бы сам очень долго додумывался. Спасибо, все работает!
VBA делать пока код в цикле выдает ошибку (делать до первой неошибочной попытки)
 
Спасибо! Вариантов практического решения я сделал уже несколько штук. Например, выгружать на отдельный лист все даты из Куба в столбец (без каких либо других данных, чтоб не увеличивать время выгрузки), затем находить последнюю заполненную ячейку в столбце и использовать ее значение как переменную для подстановки в Куб с данными.

Либо, допустим, сделать предположение, что последняя доступная дата в Кубе точно не меньше, чем Сегодня-365 дней. И далее ввсести какую нибудь переменную m, равную сегодня минус 365, и останавливать цикл, если m < ячейка, показывающая дату Куба, на которую удалось выгрузить данные. тогда первая же выгрузившаяся (существующая) дата из Куба позволит остановить цикл.

Так что практически задача решена, меня просто интересует как останавливать цикл, если конкретная операция удалась. Ну или делать его, пока операция не удастся.
VBA делать пока код в цикле выдает ошибку (делать до первой неошибочной попытки)
 
Есть цикл, который пытается подставить в базу (аналитический Куб) сегодняшнюю дату и выгрузить на нее определенные данные. Если сегодняшней даты в Кубе нет, то он должен подставлять сегодняшнюю дату -1, если и ее нет, то еще -1 и т.д. до первого успеха.
Как выглядит (записывается) команда в начале цикла Do While (или Do until), чтоб он выполнял цикл, пока операция подстановки не даст НЕ ошибку?

Что-то типа Do while not iserror [операция кода] Loop

Вариант выше не работает. У самого знания матчасти недостаточно чтоб корректно написать.

Текст кода ниже. Все кроме "Do while Not IsError" работает.

Код
Sub Macron1()

Dim i As Long
Dim segodnya, Dt As Date
Dim DtText As String
Dim Pvt As Object

Set Pvt = ThisWorkbook.Worksheets(1).PivotTables("СводнаяТаблица1")
segodnya = Format(Now, "YYYY-MM-DD")

i = 0

Do While Not IsError
    Dt = Format(segodnya - i, "YYYY-MM-DD")
    DtText = Dt

    On Error Resume Next
    Pvt.PivotFields( _
        "[Дата отчета].[Дата отчета].[Дата отчета]").VisibleItemsList = Array( _
        "[Дата отчета].[Дата отчета].&[" & DtText & "T00:00:00]")
    i = i + 1
Loop

End Sub
Как умножить все значения диапазона на 1 внутри формулы?
 
Спасибо всем! Все работает.
СУММПРОИЗВ великая вещь.
Как умножить все значения диапазона на 1 внутри формулы?
 
Есть база (КУБ OLAP), из которой выгружаются даты договоров (столбец А) и суммы договоров (столбец В). Даты в столбец А выгружается в текстовом формате (база такая).
Нужно найти, допустим, сумму всех договоров, заключенных после 30.06.2019.
Как можно не создавая дополнительный столбец (где дата будет умножаться на 1 или обрабатываться через --), и не изменяя формата столбца А с выгруженными датами, изменить формат столбца с датами (диапазона) в самой формуле?
Т.е. нужно решение по типу СУММЕСЛИ(диапазон*1;">30.06.2019";диапазон суммирования) . Пример во вложении.
Количество значений в диапазоне, не встречающихся в другом диапазоне
 
Спасибо, работает!
Сейчас буду разбираться как.

А не подскажете еще ответ на такой вопрос: я могу как то выделить нужный мне массив формулой, допустим для подсчета кол-ва значений в нем.
Работает ли это по аналогии с VBA связками адреса начала/конца массива.
Что-то типа =СЧЕТЗ(А5:А&ПОИСКПОЗ...?

Пытаюсь сделать и через СЦЕПИТЬ, и через &, и с кавычками, и без кавычек, но не хочет таким образом работать.
Это бы мне здорово упростило жизнь.
Подсчет уникальных значений в отфильтрованном столбце
 
Пжлст.
Количество значений в диапазоне, не встречающихся в другом диапазоне
 
Вопрос такой: компания заключает договоры с контрагентами. Нужно посчитать кол-во пришедших новых контрагентов в каждый год.
Есть таблица с годом заключения договора и ID контрагентов, с которыми в этот год заключили договоры. ID уже отDISTINCTчены до уникальных значений.
Задача найти кол-во новых ID в каждый конкретный год, не встречающихся в таблице в предыдущие этому году года.

Вопрос решил, но через создание дополнительного столбца, что не есть хорошо. Хотелось бы без него. И это точно возможно, очевидно через СМЕЩ (я даже заготовки для нее приготовил в столбцах H-J, но что то сам не смог пока осилить).
Просьба помочь с решением. Вариант решения записать в ячейку L4.
Также просьба объяснить, почему формула в столбце D не работает на подсчет новых контрагентов (по аналогии как работает в столбце C).

Пример во вложении.
Обращение к Workbooks.worksheets.range из другой книги
 
Цитата
VasiliY_Seryugin написал: ...я видимо не так объясняю
Нет, все таки при запуске из другой книги не работает все равно без предварительного Activate книги "Пример"  :sceptic:

P.S.
Юрий, вы правы. Иногда стоит еще раз очень внимательно все перечитать снова и снова, и тогда, вероятно, с какого-то раза станет все-таки понятно :)

Вот как мой код должен выглядеть:
Код
Workbooks("Пример.xlsm").Worksheets("Лист1").Range(Workbooks("Пример.xlsm").Worksheets("Лист1").Cells(3, 1), Workbooks("Пример.xlsm").Worksheets("Лист1").Cells(3, 9).End(xlDown)).ClearContents

Всем спасибо!
Обращение к Workbooks.worksheets.range из другой книги
 
Все ребят, я видимо не так объясняю.
В любом случае спасибо за помощь, с ней я разобрался чего не так делаю.

Вот это не работает:
Код
Workbooks("Пример.xlsm").Worksheets("Лист1").Range("A3:I3", Cells.End(xlDown)).Copy

Но вот так работает:
Код
Workbooks("Пример.xlsm").Worksheets("Лист1").Range(Cells(3, 1), Cells(3, 9).End(xlDown)).Copy

Просто синтаксиса не знаю, отсюда и все проблемы.
Обращение к Workbooks.worksheets.range из другой книги
 
Так вот я как раз и не хочу активировать лист и выделать несколько раз диапазон селектом.
У меня есть Книга1, в которой есть макрос.
Нужно чтоб при запуске этого макроса он обращался к Книге2, листу1, выделял на этом листе диапазон "A3:I3", затем через Ctrl+Shift+вниз выделял весь диапазон до конца вниз, и затем очищал выделенное (или копировал, допустим). Вот как это можно максимально коротко записать в коде?
Обращение к Workbooks.worksheets.range из другой книги
 
Я понял, что я не правильно обращаюсь к диапазону, чтоб его очистить.
Можно ли одной строкой написать код, который будет выделять начальный диапазон "A3:I3", потом выделять все до конца вниз (End(exlDown)), и это дело удалять.

Вот эта красная конструкция у меня не правильная, выявлено опытным путем:
Workbooks("Пример.xlsm").Worksheets("Лист1").Range("A3:I3", Cells.End(xlDown)).Copy

Если в примере, который я скидывал выше, добавить вверх одну пустую строку (т.е. таблица будет начинаться не с A1, а с A2), то такое выделение диапазона вниз от заданного горизонтального диапазона оказывается не работает.

Вкладываю пример. Если не сложно, помогите сделать чтоб выделялся диапазон с A3:I3 и до конца вниз.

Опять же - одной строкой кода. Макрорекордером можно сделать так:
Код
Range("A3:I3).select
Range(selection, Selection.End(xlDown)).clear

А вот эти все selectы и selection на одну строчку обращения можно заменить?
Обращение к Workbooks.worksheets.range из другой книги
 
Спасибо. Т.е. обращение селектом к диапазону, находящемуся в другой книге, без Activate не написать получается?
Изменено: VasiliY_Seryugin - 06.07.2020 20:17:34
Обращение к Workbooks.worksheets.range из другой книги
 
А еще подскажете, если мне, например, просто нужно выделить этот диапазон, т.е. команда select на конце, вместе Clear, то оно уже почему-то не работает.
Код
Sub Макрон_1_3()
Workbooks("Пример.xlsm").Worksheets("Лист1").Range("A2:I2", Workbooks("Пример.xlsm").Worksheets("Лист1").Cells.End(xlDown)).Select
End Sub


Селектом как к диапазону чужой книги обратиться?

Чтобы, допустим, потом через With selection шрифт поменять, формат ячеек, выравнивание ячеек и т.п.
Изменено: VasiliY_Seryugin - 06.07.2020 19:24:26
Обращение к Workbooks.worksheets.range из другой книги
 
Цитата
k61 написал:
или одной строкой:

Ага, это то что нужно!
Я понял чего не так делаю. Спасибо!
Обращение к Workbooks.worksheets.range из другой книги
 
K61, спасибо за ответ, но через with мне понятно как делать.
А можно ли это сделать одной строчкой?

Просто в оригинале код у меня выглядит примерно так (фрагмент):
Цитата
Workbooks("Книга1").Worksheets("1").Range("A5:C5", Cells.End(xlDown)).Copy
   Workbooks("Книга2").Worksheets("блаблабла").Range("A4").PasteSpecial _
   Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

   Workbooks("Книга1").Worksheets("1").Range("E5:K5", Cells.End(xlDown)).Copy
   Workbooks("Книга2").Worksheets("блаблабла").Range("D4").PasteSpecial _
   Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

   Workbooks("Книга1").Worksheets("1").Range("D5", Cells.End(xlDown)).Copy
   Workbooks("Книга2").Worksheets("блаблаблаI").Range("K4").PasteSpecial _
   Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Т.е. многократный перенос данных из Книги1 в Книгу2 значениями.
И каждый раз перед каждой командой активировать книги или делать With не хочется.

Хочется понять, как обращение к соответствующему диапазону на каком-либо листе другой книги можно записать в одну строку, чтоб было как в коде выше (он как раз не работает из за такого обращения к книгам).
Изменено: VasiliY_Seryugin - 06.07.2020 19:08:37
Обращение к Workbooks.worksheets.range из другой книги
 
Ребят, владею VBA на уровне макрорекордера, поэтому даже элементарных вещей не могу сам осилить.
Поискал через поисковик похожие запросы, но понятного мне ответа не нашел.
Вопрос такой: почему VBA ругается, когда я хочу совершить действие с диапазоном, находящимся в другой книге (в данном случае очистить диапазон), через такое обращение (указание книги, листа и диапазона):
Код
Workbooks("Книга1").worksheets("Лист1").range("A1:B2", Cells.End(xlDown)).ClearContents


Если вначале активировать Книгу1, то ругаться не будет:
Код
workbooks("Книга1").activate
worksheets("Лист1").range("A1:B2", Cells.End(xlDown)).ClearContents


Но ведь как то же можно эту простую команду записать одной строкой, не активируя предварительно книгу, а сразу к ней обращаясь для дальнейших действий?
Как это сделать?


Во вложении пример.
Откройте пример, создайте новую книгу и скопируйте туда кнопки 1 и 2.
При запуске из новой книги Кнопка1 НЕ будет работать (при запуске из родной книги работает).
Кнопка2 работает из любой книги, т.к. в ней стоит предварительная активация нужной книги.
Кнопка3 создана для удобства, чтоб можно было очищенный диапазон восстановить для новых тестов.

Хочу понять, как обратиться к книге "Пример" из другой книги одной строкой, предварительно не используя "Пример".Activate
Извлечь ИНН из текста
 
Вот тут же на форуме нашел вариант формулы с извлечением из строки всей последовательности цифр, идущих одна за другой.
Может кому пригодится потом, кто через поиск темы сюда придет.

Массивная функция:
Код
=ПСТР(A2;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1)*1);0);СУММ(ЕЧИСЛО(ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1)*1)*1))


Пример во вложении.
Страницы: 1 2 След.
Наверх