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

Страницы: 1
Функция по приведению в единый формат дат и периодов в таблице, Как доработать код.
 
Добрый день, форумчане.

Столкнулся с некоторой задачей, которую пока никак не могу решить - возможно Вам покажется проще:
есть некоторая функция (код ниже), которая приводит разномастные значения дат, кварталов к единому виду - "Q YYYY".
Т.е. если у меня прописано в ячейке 30.06.2017 - функция приводит это к значению 2 2017 - т.е. номер квартала и четырехзначный номер года. Аналогично с римским обозначением квартала и т.д.
До сей поры это все у меня работало прекрасно, пока не столкнулся с необходимостью добавить в функцию новые типы данных, а именно
3 месяца YYYY г.?(ода)?
6 месяцев YYYY г.?(ода)?
9 месяцев YYYY г.?(ода)?

Соответственно в функцию я добавил блок
Код
'Проверка наличия периодов бух.отчетности
re.Pattern = "\D*\d месяц\D*(\d{2,4})\D*"

If re.Test(tempString) Then
   re.Pattern = "9"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "3"): GoTo 1
    
    re.Pattern = "6"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "2"): GoTo 1
    
    re.Pattern = "3"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "1")
End If


Но функция все-равно не заменяет месяцы на квартал и на выходе я получаю для примера.
3 2017
6 2017
9 2017
Может кто-нибудь подскажет, что делаю не так?
Код
Option Explicit

Public Function RgxData(astring As Range) As String

Dim re As RegExp, d As Date, s$
Dim tempString
Set re = New RegExp
re.Pattern = "(-|\г.+|\(|\)| )"
re.Global = True
re.IgnoreCase = True
tempString = re.Replace(astring, "")

'Проверка наличия в строке даты
re.Pattern = "\D*(\d\d?)\.(\d\d?)\.(\d{2,4})\D*"

If re.Test(tempString) Then
RgxData = DatePart("q", DateValue(re.Replace(tempString, "$1.$2.$3"))) & DatePart("yyyy", DateValue(re.Replace(tempString, "$1.$2.$3")))
d = CDate(tempString) - 1
s = DatePart("q", d) & " " & DatePart("yyyy", d)
If s <> RgxData Then RgxData = s
Exit Function
End If

'Проверка наличия периодов бух.отчетности
re.Pattern = "\D*\d месяц\D*(\d{2,4})\D*"

If re.Test(tempString) Then
   re.Pattern = "9"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "3"): GoTo 1
    
    re.Pattern = "6"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "2"): GoTo 1
    
    re.Pattern = "3"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "1")
End If

'Проверка наличия в строке квартала написаного римской цифрой, буквами латиницы "I" и "V"
re.Pattern = "\D*(i{1,3}(?!i)v?(?!v))\D*(кв)?\D+(\d{2,4})\D*"

If re.Test(tempString) Then
    re.Pattern = "iv"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "4"): GoTo 1
    
    re.Pattern = "iii"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "3"): GoTo 1
    
    re.Pattern = "ii"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "2"): GoTo 1
    
    re.Pattern = "i"
    If re.Test(tempString) Then tempString = re.Replace(tempString, "1")
End If

1:

'Проверка наличия в строке квартала написаного арабской цифрой
re.Pattern = "\D*(\d)\D*(кв)?\D+(\d{2,4})\D*"

If re.Test(tempString) Then
RgxData = re.Replace(tempString, "$1 $3")
Exit Function
End If

'Проверка наличия в строке квартала написаного арабской цифрой
re.Pattern = "\D*(\d{4})\D*"

If re.Test(tempString) Then
RgxData = re.Replace(tempString, "$1")
Exit Function
End If

RgxData = "Период не определен!"

End Function

Адрес по столбцам
 
Добрый день, форумчане.

Хочу спросить у Вас подсказки.
Вопрос старый, как мир.
Есть набор почтовых адресов. Не типизированный - клиенты при регистрации бьют как хотят.
Сейчас регистрационную форму будем переделывать.
Но есть необходимость поработать с уже существующим массивом данных - больше 30 тыс адресов.

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

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

Вновь прошу Вашего мудрого совета.

Есть у меня табличка, в ней небольшой код, который подставляет в соседнюю ячейку некоторое значение при изменении значения в столбце С диапазона (собственно код известный, много где в Интернете есть).
Все хорошо и работает, но дело в том, что параллельно у меня есть макрос, который после заполнения пользователем таблицы отправляет копию файла на сетевой диск, а сам файл пользователя очищает от данных.
Никак не могу сообразить, как переделать приведенный ниже код, чтобы значение в соседнюю ячейку проставлялось только если в ячейку что-то записали.
А в случае, если ячейку очистили - он не отрабатывал.

Пробовал по поиску найти, но видно не так ищу.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target
          x = cell.Row - 1
       If Not Intersect(cell, Range("C2:C50")) Is Nothing Then
            With cell.Offset(0, -1)
               .Value = "Значение"
               .EntireColumn.AutoFit
            End With
           
       End If
      
        
       x = x + 1
    Next cell
    
End Sub
Сохранение настроек фильтрации
 
Добрый вечер, уважаемые форумчане.
Вновь хочу спросить у Вас совета.

Итак, у меня в работе присутствует множество таблиц с большим количеством столбцов. Из этих таблиц часто приходится  делать выборки, фильтруя определенные столбцы по нужным значениям. Но вот незадача - то забудешь выставить условие на один из столбцов, то выставишь не так - и выборка получается кривая - хорошо, если замечу вовремя. Да и в целом это отнимает время. Когда операция повторяется регулярно, по несколько раз в день - это конечно выливается в определенную потерю времени.
И вот меня мучает вопрос - есть ли возможность назначить на определенную кнопку заранее заданный набор фильтров, чтобы таблица фильтровалась сразу по нескольким столбцам по одному клику. Пробовал искать на форуме что-то подобное, но не нашел (может быть неправильно искал?).

Приложил небольшой пример, чтобы объяснить наглядно.
В данном примере мне необходимо:
1. Столбец G отфильтровать, исключив ячейки Банк
2. Столбец H отфильтровать,  исключив пустые ячейки
3. Столбец К отфильтровать, оставив только пустые ячейки.
Вот если набор подобных условий можно сохранить и назначить на кнопку - было бы просто идеально. Подозреваю, что без макроса тут не обойтись, но с ними у меня сложно(
Выделение дат в календаре из списка, Неверно срабатывает правило выделения ячеек
 
Добрый вечер, форумчане.

Подскажите, что делаю не так.
Лист events, столбец E содержит даты.
В календаре хочу эти даты подсвечивать.
Создаю правило условного форматирования для формулы
Код
=НЕ(ЕОШИБКА(ПОИСКПОЗ(B5;Events!$E$2:$E$249;0)))
Но он срабатывает, если распространяется только на конкретную ячейку. Если растягивать сразу на весь календарь - подсветка где-то промахивается, где-то просто не срабатывает.
Очистка содержимого ячеек макросом
 
Добрый день, форумчане.
Хочу спросить Вашего мудрого совета.

Добавил в файл (в файле 1 лист) небольшой макрос, который при сохранении копии файла очищает содержимое диапазона  D2:F90
Код
Sub saveas()
ActiveWorkbook.SaveCopyAs "C:\\" & Range("O1") & ".xls"
Dim cell As Range
For Each cell In Range("D2:F90")
    cell.ClearContents
Next
Range("O1").ClearContents
End Sub
Но вот незадача, делает он это долго - задержка при очистке составляет  - секунд 10-15, что при массовости операции даст большие потери по времени.
Подскажите, есть ли способ ускорить процесс? Может добавить условие, чтобы он очищал только непустые ячейки, а не проходил по всем? Если  да, то как?
Может еще способ есть?
Дополнительные параметры для функции СУММЕСЛИМН
 
Добрый день, форумчане!
Вновь требуется Ваш мудрый совет.
Что-то сегодня голова не работает совсем.
В ячейке есть функция
Код
 =СУММЕСЛИМН(D3:D48;A3:A48;"Доп";C3:C48;1200)
Подскажите, как мне сюда добавить операцию сравнения?
Мне нужно, чтобы он суммировал значения столбца D, если значение в столбце С меньше 1200. Сейчас он суммирует, если значение равно 1200.

Или допустим, чтобы он суммировал, если значение в столбце С больше 1200, но меньше 1300
Индикатор на листе несохраненных изменений
 
Добрый день, уважаемые форумчане!
Возникла такая потребность - визуализировать то, что в файл вносились изменения и они не сохранены.
Например какая-нибудь ячейка меняет цвет, или значение.

Есть какие-нибудь решения подобной задачи?
Поиск значения функции
 
Добрый день, гуру.
Подскажите маленький вопрос - застопорился на нем.
Как задать условием существования функции значение другой функции?
Я пишу функцию СУММПРОИЗВ, в которой три условия из которых 2 - это значения которые должны принимать другие функции.
Но он почему-то в указанном диапазоне не ищет значения. Даже ручным поиском он не ищет требуемые значения.
Макрос для проверки значений
 
Добрый день, Уважаемые форумчане.

Давно не обращался я с Вам за советом. Вот вновь мне поставлена задача, требующая глубокого знания Excel.
Я буду очень благодарен, если Вы поможете мне решить эту задачу, самостоятельно я ее не осилю.

Существует некая система, содержащая финансовые данные. В этой системе есть кнопка, которая выкидывает эти данные в таблицу excel (во вложении пример - обратите внимание - 2 листа).

Мне нужно сделать макрос, который при запуске будет проводить первичную проверку отчетности на сходимость (набор определенных строк в сумме должен совпадать с другой определенной строкой).
Определять, какие строки нужно складывать макрос должен по соседнему столбцу "Код стр."

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

Особый момент заключается в том, что макрос должен быть доступен не в конкретном файле а по умолчанию в Excel. Т.к. файл всегда создается системой заново перед выгрузкой в него информации.

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

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

- Порядок строк не всегда именно такой  - могут присутствовать промежуточные, поэтому надо ориентироваться именно на код строки.


Подскажите, Гуру, есть ли возможность решить задачу в этом ключе?
Отключение(приоставнока) функций, Макрос для облегчения работы
 
Добрый вечер, Гуру)

Ситуация такая - долго консолидирвал в базу множество листов с самыми различными данными, на каждом листе уже сейчас до 20 тыс строк.
На каждом листе - 2-3 столбца  - функции и сложные по множеству условий.
Т.е. представьте - 1 лист уже содержит 60 тыс функций завязанных на 3-4 массива.
А их сейчас 10 листов, т.е. около 600 тыс ячеек перевязанных друг с другом не по одному разу.
А помимо этого еще есть несколько макросов.


Поставленной задачи я добился - в базе автоматизировано множество процессов, что резко повысило администрирование и контроль процессов.

Но вот беда - тормозит. Любое изменение данных в таблицах влечет подвисание на пару минут. Что мешает.

Хочу спросить Вас, господа - возможно ли сделать макрос, который отключает выполнение функций в определенном диапазоне?

Скажем - есть на листе ряд галочек (чек-боксов) с названием диапазонов. Отжал галку - ёксель забыл про определенный диаазон с функциям. Нажал галочку  - вновь  проводится рассчет по диапазону.

Может кто-то сталкивался с подобной проблемой.

PS: Да простят меня модераторы и форумчане  - без примера. затенять закрытые данные  - с ума сойдешь в таком файле. А создавать пример - тоже не отобразишь всего, что есть.

Буду рад любым предложениям - если что, я уже сам подгоню под свои условия подсказанную идею, или макрос.
Знаю, наверняка сейчас многие кинутся говорить, что такие объемы это надо минимум в аccess, а еще лучше на oracle или что там есть. Выбор обусловлен технологическими особенностями, да и не умею я особо с access.
Поиск по нескольким значениям
 
Справшивал вчера - тему удалилили - спрашиваю повторно:

Как можно осуществить поиск в диапазоне по нескольким полям (в моем случае по 3м).
Есть диапазон состоящий из столбцов А Б С.
Мне нужно определить факт вхождения в диапазон строки со значением А=знач1 Б=знач2 В=знач3. (условие : Логическое "И")

Если в диапазоне есть искомая строка - получаю 1, нет  - ячейка равна 0.


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

Подскажите пожалуйста конструкцию, кто знает.
Регулярные выражения, Условие вычета даты
 
Добрый день господа.

Нужен Ваш совет.

Есть функция, которая перегоняет даты формата 31.12.12 в формат 4 кв. 2012 г.
Код
Dim re As RegExp
Dim tempString
Set re = New RegExp
re.Pattern = "(-|\+|\(|\)| )"
re.Global = True
re.IgnoreCase = True
tempString = re.R eplace(astring, "")

re.Pattern = "\D*(\d\d?)\.(\d\d?)\.(\d{2,4})\D*"

If re.Test(tempString) Then
RgxData = DatePart("q", DateValue(re.R eplace(tempString, "$1.$2.$3"))) & " êâ. " & DatePart("yyyy", DateValue(re.R eplace(tempString, "$1.$2.$3"))) & " ã."
Exit Function
End If


Собственно все работает корректно и верно у меня.
Одно "но" - мне нужно, чтобы даты типа 01.10.2012 и 01.01.2013 принадлежали к 3 и 4 кварталу 2012 соответственно.
А VBA их относит уже к новому кварталу, т.к. собственно это и есть уже даты нового периода.

Следовательно мне нужно до момента преобразования даты отнять от нее 1 день, чтобы она была внутри отчетного квартала.

Можно ли это сделать прямо здесь в формуле?

ЗЫ: отнимать 1 день прямо на листе,  а потом к результату применять функцию для меня не подходит. Нужно именно в код функции вставить.
Макрос для замены значний в ячейках
 
Добрый день, уважаемые формумчане!
И вновь хочу воспользоваться Вашей мудростью!

Хочу найти решение следующе проблемы.
Это для примера:

Таблица:
Столбец 1
чайник электрический напряжение 220 и т.д.
обогреватель конвенкционный напраяжение 220, мощность ....
фен электрический.

Столбец 2
4 квартал 2012 г.
"4" кв. 2012 г.
IV квартал 2012 года
31.12.2012
31.12.12 г.
за 2012 г.
2012 г.

Т.е. в первом столбце (для примера) номенклатура товаров закрытая (это важно - всего типов данных 4, но повторяться они могуот многократно).
И я хочу макросом заменить сложное длинное название на, скажем, соответствующий  артикул.
Т.е все это конечно можно сделать заменой, но таких таблиц приходит много  и ручная замена отнимет время, и не мало.


Во втором столбце различная вариация дат. Как видите в примере я уже привел 7 вариантов. Хочется привести все это к единому виду. По следующему принципу:
1. Даты с указанием числа или номера квартала приводятся к формату [xYY], где x - номер квартала, а YY - двухзначное значение года.

2. Даты формата год (за 2012, или просто 2012 г. ) - оставлять только числовое значение.

Год не всегда текущий, даты


Т.е. хотелось бы открыть файл в ёкселе, запустить макрос и чтобы он все исправил.

Вообще потыкавшись по различным вариантам  начал сомневаться, что проблему вообще можно решить.

Собственно последняя надежда на Вас, знатоки.
Интерактивная диаграмма
 
Добрый день, уважаемые форумчане.
Попробую вкратце описать свой вопрос:

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

Но. т.к. область данных графика сразу настроена на данные за весь квартал, получается, что если заполнено 2-3 недели - график выстраевается до этого момента, а затем протягивает это значение до конца квартала.

Что не красиво. Хочется, чтобы график отображался по мере его заполнения.

Я попробовал сделать условие - ЕСЛИ(C2<>0;C2+B2;#Н/Д)

Данный прием помог. Но он работает только в том случае, если показатели заполняются непрерывно. А если человек уйдет в отпуск? После разрыва график уже не восстанавливается.

Изложил наверное мутновато, но Вы задавайте вопросы, я попробую прояснить, если что.

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

Для ясности приложил пример
удален[МОДЕРАТОРЫ]
Изменено: Александр - 29.03.2013 09:17:57
Фильтр объединенных ячеек
 
Добрый день, уважаемые знатоки.

Периодически возникает задача выводить на фильтр не одну строку, а набор строк, относящихся к одной теме. Скажем набор строк за определенный месяц/неделю/квартал. По определенному товару.
Для этого я добавляю в первый стобец ячейку с нужным названием и (март/1-й квартал/Филиалы) и объединяю ее на на все строки, относящиеся к данной теме.
Но если поставить фильтр на эти ячейки, то при его использовании он все-равно выводит только первую строку, а не все строки, относящиеся к объединенной ячейке.
Может быть кто подскажет простой способ решить эту проблему.

В свое время я находил макрос для этого дела, но, он не всегда корректно отрабатывал, а сейчас вот пытаюсь его настроить, так и вовсе дает ошибку.
Код
Sub P2()
Dim Неделя As Excel.Worksheet

Dim Временный As Excel.Worksheet
Dim LastRow As Long
Dim LastColomn As Long
Dim oFind As Excel.Range
Dim АдресПоиск As String
Dim АдресОбъединённых As String
Set Неделя = ActiveWorkbook.Worksheets("Неделя")
With Неделя.UsedRange
    LastRow = .Rows.Count
    LastColomn = .Columns.Count
End With
With Неделя.Range(Неделя.Cells(1, 1), Неделя.Cells(LastRow, LastColomn))
    Application.FindFormat.Clear
    Application.FindFormat.MergeCells = True
    Set oFind = .Find(what:="", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, Searchformat:=True)
    If Not oFind Is Nothing Then
        АдресПоиск = oFind.Address
        Set Временный = ActiveWorkbook.Worksheets.Add
        Do
            АдресОбъединённых = oFind.MergeArea.Address
            oFind.MergeArea.Copy
            Лист1.Paste Destination:=Временный.Range("A1")
            oFind.MergeArea.UnMerge
            Лист1.Range(АдресОбъединённых).Value = Временный.Range("A1")
            Временный.Range("A1").MergeArea.Copy
            oFind.PasteSpecial xlPasteFormats
            Временный.Cells.Clear
            Временный.Cells.UnMerge
            Set oFind = .Find(what:="", After:=oFind, Searchformat:=True)
        Loop While Not oFind Is Nothing And oFind.Address <> АдресПоиск
    End If
End With
Application.DisplayAlerts = False
Временный.Delete
Application.DisplayAlerts = True
Application.FindFormat.Clear
End Sub

Ошибку дает здесь:  oFind.MergeArea.UnMerge

Поэтому прошу совета - может есть штатный способ заставить Excel при использовании фильтра выводить все строки справа отобъединенной на всю их длину ячейки?
Форматирование ячеек
 
Подскажите, как протянуть функцию вниз по столбцу с сохранением форматирования?

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

Поиск по форуму не дал результата.
Работа с диапазонами, Возможно ли организовать фильтрацию диапазонов
 
Доброй ночи уважаемые форумчане!

Не раз я пользовался данным форумом как кладезем знаний, но вот столкнулся с вопросом, ответ на который найти на сайте не смог (может искал не то), поэтому прошу по возможности помочь.

На листе есть несколько диапазонов состоящих из нескольких столбцов и строк.

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

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

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


Подскажите, может кто знает как решить подобную задачу.

Во вложении я прикрепил пример файла.
Страницы: 1
Наверх