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

Страницы: 1
Вычисление первого и последнего рабочего дня недели для диапазона дат, отстоящих на несколько недель от заданной даты в Power Query
 
Коллеги, здравствуйте.
В Power Query - сильно новичок, занимаюсь этим инструментом сильно эпизодически. Это я про то, что если ответы будут сильно умные - я их просто не пойму, поэтому попроще, пожалуйста, ладно?
Вопрос вот в чем:
Есть набор дат. Есть дата отсчета (например, 16.03.2023). Эти даты могут принадлежать текущей неделе, могут отстоять от даты отсчета на минус одну неделю, минус 2 недели и т.д. Стоит задача - силами Power Query определить первую рабочую дату для каждой недели и последнюю рабочую дату для каждой недели и как-то их отметить. Как отметить недели (минус первая, минус вторая и т.д.) я худо-бедно разобрался. Как вывести номер дня недели для даты - тоже. А вот как дальше - у меня затык. Помогите, пожалуйста.
В примере расписал подробно.
Получившийся у меня запрос:
Скрытый текст
Изменено: Пытливый - 16.03.2023 21:46:03
Кому решение нужно - тот пример и рисует.
Различный синтаксис функции MsgBox, вопрос по обязательности использования скобок
 
Здравствуйте, уважаемые коллеги.
Прошу пояснить по следующему вопросу - почему, когда я пишу в коде вывод информационного сообщения через MsgBox, например
Код
MsgBox "Mamma mia!", vbOKOnly + vbExclamation, "Important!"

редактор не требует использовать аргументы в скобках, более того активно против них протестует, но если я захочу отслеживать нажатие кнопок (например)
Код
i = MsgBox("Mamma mia!", vbAbortRetryIgnore + vbCritical, "Important!")

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

Но понятнее от этого не стало.
В первом случае не возвращается значение, в этом разница? Т.е. скобки это некий признак, что с ними это функция - и возвращает значение, а без - просто специфическое средство самовыражения?

Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Power Query.Скорость внутренних вычислений, Довольно медленно обновляется запрос. Можно ли как то улучшить положение?
 
Здравствуйте, уважаемые!
Осваиваю Power Query, опыта в нем - с гулькин этот... как его... нос, во! :)
Вопрос в чем - есть данные в CSV (выгрузка биржевых данных) строк так на 3000. Стоит задача присобачить 2 скользящие средние. Периоды скользящих средних задаются в
таблице параметров (tb_parametrs). Добавляю скользящие средние через подсмотренный прием с использованием индекса, List.Average, List.Range.
НО ЧЕГО ТАК ДОЛГО-ТО?!
На обновление запроса из 3000 строк данных уходит порядка 50-60 секунд. Формулами на листе такой объем при вычислении скользящих средних через СМЕЩ и т.д. делается мгновенно почти. А тут так тупит. Процессор при выполнении запроса грузится максимум до 40%, память до 50%. Подскажите, в чем может быть затык, или это для Power Query нормальная скорость?

Спасибо за внимание.
Текст запроса - под спойлером.
Скрытый текст
Кому решение нужно - тот пример и рисует.
Вычисляемое поле/вычисляемый объект в сводной таблице, построенной на модели данных
 
Коллеги, здравствуйте.
Вопрос касается работы с Power Query, опыта в этом - очень мало. Столкнулся со следующим - обрабатываю исходные данные в PQ, загружаю результаты запросов в модель, делаю на основании их сводную - опа! а вычисляемый объект/вычисляемое поле в меню сводной недоступны.
Собственно вопрос - почему? Правильно ли я понимаю, что надо вычисляемые поля в собственно запросе PQ делать, а уж потом использовать в сводной?
Возможно (очень!) что вопрос - тупой - но это чисто по незнанию, не принимайте близко к сердцу, направьте на живительные источники знания, плиз. :)
Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Передача в переменную содержимого текстового файла средствами VBA
 
Коллеги, здравствуйте.
Подскажите, пожалуйста, по такому вопросу:
Есть на диске текстовый файл, зовут его 1.txt, расположен он в C:\1
Хочется прочитать в текстовую переменную ВСЕ содержимое файла. Рисую процедуру:
Код
Sub Test()
    Dim objFileSys As Object, sS As String
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    sS = objFileSys.OpenTextFile("C:\1\1.txt").ReadAll
End Sub

В 1.txt заношу незатейливый текст:
"мама
мыла
раму
Раму мыла мама"
Запускаю процедуру пошагово - в переменной sS вижу нужный текст, ура!

Далее вставляю довольно большой кусок текста в файл (около 300 строк от 1 до 170 знаков в строке)
запускаю процедуру пошагово - в переменной sS сиротливая строка "ая"
Что это? Ограничение на количество знаков в переменной? Вроде там миллионы допускаются...

В общем вопрос - как забрать в переменную все содержимое текстового файла? Построчно читать и добавлять к переменной? Или все-таки есть более простой способ?
Подскажите, пожалуйста.
Спасибо за внимание.
Изменено: Пытливый - 20.03.2018 14:08:12
Кому решение нужно - тот пример и рисует.
Шаблон (регулярные выражения) для определения содержимого строки, Определить, содержит строка только "=число",или еще что-то
 
Уважаемые коллеги, здравствуйте.
Подскажите, пожалуйста, по регулярным выражениям - с их помощью вообще возможно определить - содержит ли обрабатываемая строка только числа, или еще там что-то есть?
Например, в файле в ячейках есть значения. Например, 44, =48, =А1*13, =22/46, и т.д. Можно ли регулярными выражениями определить те ячейки, в которых содержатся такие значения: "=ЧИСЛО"? (в приведенном примере должно найти ячейку с "=48"). Пока у меня получилось только через If и проверку InStr и IsNumeric.
А через регулярные выражения это можно?

Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Изменение порядка значений массива данных при использовании в формуле массива
 
Коллеги, здравствуйте.
Возник такой вопрос: при разработке сложной формулы массива столкнулся с необходимостью изменения порядка исходных элементов массива - изначально стоит по убыванию, а в формулу массива надо запихнуть эти элементы по возрастанию и использовать в таком виде, в ПОИСКПОЗ, например. Казалось бы - ранг в помощь, но чего-то ранг у меня не работает в массиве. Может, еще как-то можно? Задача в прилагаемом файле в С1 вывести элемент из списка в столбце А не превышающий, либо равный заданному значению в В1.
Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Вывод информацию об уровне группировки для заданной строки средствами VBA
 
Здравствуйте.
Подскажите, пожалуйста, по решению такой задачи: имеем таблицу, сгруппированную по строкам. Допустим, как в примере - 2 уровня группировки. Собственно, вопрос - как средствами VBA отразить информацию об уровне группировки (вывести в MsgBox, допустим), для конкретной строки (например, для активной ячейки).
Пытался через  EntireRow - не нашел свойства. Из хелпа Group - метод для сводных таблиц.
Подскажите, в какую сторону копнуть?
Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Принадлежность ячейки диапазону
 
Доброго времени суток, уважаемые!  
Голову уже сломал - какую инструкцию в VBA применить, чтобы понять, является ли проверяемая ячейка частью определенного диапазона.  
Например, на листе проверяю все ячейки в используемом диапазоне, и, если они попадают в диапазон А5:В5, то надо эти ячейки закрасить красным.  
Соответственно пишу:  
Dim objR as range  
For each objR in Worksheets(1).UsedRange.Cells  
If objR (ВОТ КАКОЙ ТУТ ОПЕРАТОР ДОЛЖЕН БЫТЬ, чтоб выдал принадлежит ячейка диапазону или нет?!!!!) Worksheets(1).Range("A5:B5").Cells Then  
objR.Interior.Color ну и т.д.  
 
Используемый диапазон на листе заранее неизвестен.  
Файл пример приложу по хотению общества (хотя какой там пример? Кусок неудавшегося кода?)  
Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Количество модулей в проекте - зависит ли от этого параметры работы?
 
Доброго времени суток, уважаемые!  
Изучая профильную литературу не могу для себя прояснить следующий вопрос:  
При разработке проекта как лучше делать - держать все потребные в проекте процедуры в одном модуле, или увеличить количество модулей (например, одна процедура на 1 модуль).  
Вообще, влияет ли расположение процедур (в одном модуле все, в отдельных модулях) на скорость работы, например? Или это определяется только предпочтениями (субъективным удобством) разработчика?  
Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Решить одной формулой
 
Доброго времени суток, уважаемые!  
Давеча понял, что пора освежить свои "знания" по составлению формул. Открыл, значит, учебник... сижу, решаю...  
И произошел у меня мозговой затык.    
Задача:  
В столбце А произвольные числа. Требуется найти наибольшее число из заполненного диапазона, которое встречается 2 раза или более.  
Ну, думаю, это мы щас.... в соседнем столбце нарисовал формулу, которая отбирает из исходного диапазона только те числа, которые встречаются 2 раза или более, а в третьем столбце - соответственно формулу, котора определяет макс.значение из отобранного диапазона (Макс, или Наибольшее - не суть.)  
А вот, собственно, вопрос - а можно ли найти это число из задачки одной формулой?    
И под-вопрос/просьба - подскажите направление (мол, формула массивов нужна или еще как намекните - КАК?)  
Файл прилагается.  
Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Как программно найти номер строки после применения фильтра
 
Доброго времени суток, уважаемые!  
Подскажите, как средствами VBA найти номер первой строки, содержащей отфильтрованные данные, после применения фильтра. В частности, как программно найти в примере, после фильтрации по третьему значению, первую строку, содержащую в ячейке столбца А значение "3" (см.пример)
Кому решение нужно - тот пример и рисует.
Помогите, пожалуйста, с формулой - достать из таблицы все данные, относящиеся к дате
 
Доброго времени суток, уважаемые!  
Помогите, пожалуйста, с синтаксисом формулы. Требования к ней - см.пример.  
Или носом ткните, что ли, в какой стороне искать.  
Спасибо.  
 
З.Ы. В поиске уже был, но увы... :О( Или я просто сегодня такой ... невменяемый...  
 
Еще раз З.Ы.    
66331 - Это надо отметить! ;)
Кому решение нужно - тот пример и рисует.
Макрос, изменяющий "м2" на более "красивый" вариант
 
Доброго времени суток, уважаемые!  
Воспаленное сознание родило следующий макрос, приводящий написание "м2" в более "красивый" вид (цифры приподняты). Макрос действует в выделенном диапазоне. Ищет в выделении значения "м2" "м3" (значения для поиска можно добавлять) и для цифр в этих строках изменяет шрифт на superscript.  
Вопросы в следующем:  
1. Может, кому пригодится?  
2. Гуру-мастера - может посмотрите код - вдруг я велосипед изобрел?  
Файл-пример прилагаю (код процедуры в единственном модуле проекта).  
Текст процедуры:  
Sub Надстрочный_символ_м2_м3()  
'хочется, чтобы в текстовой строке, содержащейся в ячейке, все "м2" и "м3" заменялись на более "красивый вариант"  
'с "приподнятым" шрифтом для цифр  
Dim MyRange As Range 'переменная для объекта Selection  
Dim MyCell As Range 'переменная для объекта Cell, которые будем перебирать в выделенном диапазоне  
Dim intI As Integer 'переменная для определения номера позиции вхождений "м2" или "м3" в проверяемой строке  
Dim strChecking As String 'переменная для хранения строки, которую будем курочить  
Dim arrInNumber() As Integer    'массив неизвестной пока размерности для хранения значений позиций вхождения искомой строки  
                               'в проверяемой  
Dim arrInStr(2) As String 'массив, в который заносим строки, которые надо искать/заменять/изменять  
Dim intJ As Integer 'переменная для определения размерности массива  
Dim intK As Integer 'переменная для определения размерности массива arrInStr  
 
'присваиваем элементам массива значения для поиска  
arrInStr(1) = "м2"  
arrInStr(2) = "м3"  
Set MyRange = Selection 'устанавливаем переменной объект (выделенный диапазон)  
 
'ПОГНАЛИ! Для каждой ячейки в выделенном фрагменте:  
For Each MyCell In MyRange  
   MyCell.Activate 'как выяснилось, без активации ячейки никак - все действия по изменению шрифта происходят в активной  
                   'ячейке  
   strChecking = CStr(MyCell.Value)  
   For intK = LBound(arrInStr()) To UBound(arrInStr())  
       intI = 1  
       intJ = 1  
'проверяем, есть ли в строке элемент arrInStr() вообще,  т.е. то, что надо поменять  
       If InStr(intI, strChecking, arrInStr(intK)) > 0 Then  
'пока вхождение элемента массива arrInStr(), определенное для разных стартовых позиций поиска будет давать значение >0  
'запускаем цикл, который находит номер позиции вхождения и присваивает его соответсвующему элементу массива arrInNumber()  
           Do  
   'изменяем размерность массива при увеличении количествва найденных вхождений  
               ReDim Preserve arrInNumber(intJ)  
   'присваиваем соотвествующему элементу массива номер найденного вхождения  
               arrInNumber(intJ) = InStr(intI, strChecking, arrInStr(intK))  
   'изменяем начальную позицию для поиска в строке вхождения  
               intI = InStr(intI, strChecking, arrInStr(intK)) + 1  
   'увеличиваем размерность массива arrInNumber()  
               intJ = intJ + 1  
   'условие проверяем в конце цикла, т.к. начальной проверкой через if мы уже убедились, что такое вхождение есть  
   'хотя бы в одном экземпляре  
           Loop While InStr(intI, strChecking, arrInStr(intK)) > 0  
     
   'для каждого найденного вхождения в строке (т.е. для всех элементов массива)  
           For intI = LBound(arrInNumber()) To UBound(arrInNumber())  
   'изменяем шрифт для цифр в "м2"  
               ActiveCell.Characters(Start:=arrInNumber(intI) + 1, Length:=1).Font.Superscript = True  
           Next intI  
     
       End If  
   Next intK  
 
Next MyCell
Кому решение нужно - тот пример и рисует.
Установить объект как Range - объясните, пожалуйста
 
Доброго времени суток, уважаемые!  
Будьте добры, пролейте свет знания на следующий мой вопрос:  
В коде пишу инструкцию:  
 
Set MyRange = Worksheets("MyList").Range("D4:J4")  
 
И все замечательно. Хорошо, но что делать, если я правой границы Range не знаю?  
Лезу в хелп, читаю, рожаю такую конструкцию:  
 
Set MyRange = Worksheets("MyList").Range("D4", Range("D4").End(xlToRight)).Select  
 
И начинается ошибка при отладке.  
Ошибка пропадает, если предварительно активизировать рабочий лист с именем "MyList"  
Аналогично если определять Range через Cells, например (i- переменная для номер столбца, ищется в коде заранее, определена как Integer, не может быть больше 100):  
 
Set MyRange = Worksheets ("MyList").Range(Cells(4,4), Cells(4, i)) - тоже самое, необходимо сначала активизировать лист.  
 
Собственно, вопрос: почему в первом случае "установка" объекта проходила на ура без всякой активации листа в коде, а во втором необходима лишняя пляска с бубном (строка кода, активизирующая лист)?  
 
Извините за может быть "простейший" вопрос - но книжки/справочника под рукой нет, в хелпе не вижу в упор подобного. В хелпе не описано отличие обращения к Range через Range("A1") от Range(cells(1,1).  
Спасибо за внимание.
Кому решение нужно - тот пример и рисует.
Страницы: 1
Наверх