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

Страницы: 1
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
manat78 написал:
можно дополнительный столбец в обе таблицы добавить который будет объединять необходимые параметры через например "_" и потом искать по одному параметру
такой вариант не подходит потому что дата не совпадает. Не было бы проблемы если бы не дата
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Подскажите как работает данная конструкция. Я сделал, все работает. Есть конечно ограничения но не критично. Но я не понимаю как она работает.
Код
=ПРОСМОТР(2;1/(Таблица2[@Менеджер]=Таблица1[ФИО])/(Таблица2[@Дата]>=Таблица1[Дата изменения]);ВЫБОР(ПОИСКПОЗ(Таблица2[@[Статья 4 уровень]];{"Заработная плата на руки":"НДФЛ"};0);Таблица1[Оклад];Таблица1[НДФЛ]))
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
БМВ написал:
ну так а что вы хотели , как пример составлен так и формула сделана. делайте реальный пример или сами адаптируйте.
Адаптировать вряд ли получится. Сложноватая для меня формула)
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
artyrH написал:
всякий случай смотрели?
Я не могу знать все ли я случаи рассмотрел. Могу чего то не знать. Но данная сводная не отличается от исходника, проблема отлавливания даты изменения сохраняется.
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
БМВ написал:
Я правильно понимаю, что все кроме D заполняется руками и надо просто подтянуть актуальные на ту дату суммы?=SUMIFS(INDEX(Таблица1[[Оклад]:[НДФЛ]];;([@[Статья 4 уровень]]="НДФЛ")+1);Таблица1[ФИО];[@Менеджер];Таблица1[Дата изменения];MAX((Таблица1[ФИО]=[@Менеджер])*(Таблица1[Дата изменения]<=[@Дата])*Таблица1[Дата изменения]))
Какая-то межгалактическая формула))
Формула массива сильно будет тормозить файл при нарастании базы. В случае добавления новых полей формула их не ловит. Например, если добавить в листе Исходник справа от столбца НДФЛ столбец Страховые взносы и в листе База в новой строчке вписать то сумма не подтянется
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
БМВ написал:
Я правильно понимаю, что все кроме D заполняется руками и надо просто подтянуть актуальные на ту дату суммы?
Правильно. Из листа "Исходник" необходимо подтянуть только суммы, остальное вводится руками.
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
БМВ написал:
может сводная решит вопрос?
Сводные таблицы я тоже перепробовал. Проблема все сохраняется. Как я вытащу суммы?
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
Михаил Лебедев написал:
... а почему в примере на 05.01.2019 з/пл = 10440? Если  правильно понял, то должна быть 13450 (то же и НДФЛ)
A сообщением выше исправил это недоразумение)
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
artyrH написал:
пробуйте. пример у вас вообще не тот
Извиняюсь, забыл поменять данные. Теперь тот.
Изменено: dimabk - 04.04.2019 07:47:15
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Цитата
artyrH написал:
показали бы свои попытки, особенно, с функцией СМЕЩ.
В том то и дело что я и попытки то не могу совершить. С функцией СМЕЩ у меня была идея сместить весь диапазон до нужной даты с помощью вложенной функции ПОИСКПОЗ и этот смещенный диапазон вложить в функцию ИНДЕКС и с помощью ПОИСКПОЗ найти в новом смещенном диапазоне ФИО, но эта попытка не удачная потому что в листе "Исходник" у всех сотрудников произошло изменение окладов в один день 01.01.19, и ПОИСКПОЗ находит не первое встречающееся значение новой даты а последнее, т.е. ячейку "А11" а нужно "А7". Таким образом весь диапазон "А2:D11" смещается до "А11:D21", и нужная фамилия уже оказывается вне диапазона.
Просто я знаю только единственный способ когда можно искать ближайшие даты это с помощью конструкции ИНДЕКС ПОИСКПОЗ, третий необязательный аргумент функции ПОИСКПОЗ как раз за это отвечает.
Поиск значений по 3-м параметрам с не точным совпадением одного параметра...
 
Доброго времени суток!
Не думал что столкнусь с такой проблемой. Достаточно хорошо знаю Excel. Но все таки нужно обращаться за помощью. Уже второй день сижу и не могу найти решение.
С помощью функции ВПР или ИНДЕКС и ПОИСКПОЗ или СМЕЩ можно найти интересующее значение по двум параметрам. С этой задачей данные функции справляются на ура. А что делать если нужно найти значение по 3-м параметрам? Можно было бы использовать СУММЕСЛИМН, но есть маленькая деталь... Эта деталь заключается в поле "Дата".
Есть таблица с информацией об изменении окладов (лист "Исходник) где стоит дата изменения, и нужно из этой таблицы вытащить данные в другую таблицу по Дате, ФИО и по названию вида затрат (Оклад или налог). Проблема в том что Дата в конечной таблице не будет совпадать с датой в источнике и нужно найти ближайшую дату изменения оклада, потом ФИО и вытянуть расходы. Так как в Исходнике есть информация о предыдущих окладах то нужно чтобы в новую таблицу они попали по датам правильно.
Прилагаю файл с примером. В лист "База" нужно вытянуть данные об окладе и ндфл из листа "Исходник". Ячейки окрашены.
Может кто-нибудь подскажет хитроумную конструкцию)
Изменено: dimabk - 04.04.2019 00:39:38
Сложение чисел написанных через дробь
 
Цитата
БМВ написал:
Используется фича excel перевода текста в число(если это возможно)  при совершении математических операций, в данном случае первый минус например "2" переведет в -2 в второй уже в 2. с тем же успехом можно домножить на 1 или прибавить, отнять 0.
Спасибо большое! Даже не знал таких моментов и про макрофункции и про превращении в число. Еще раз спасибо за помощь! Все получилось)
Сложение чисел написанных через дробь
 
Цитата
MCH написал:

Код
Function SumSlash(txt As String, Optional delim As String = "/") As Long    Dim s As Long, x As Variant
    For Each x In Split(txt, delim)
        s = s + Val(x)
    Next x
    SumSlash = s
End Function

Спасибо. Рабочий вариант. Про фишку с методом Split даже не знал хотя с VBA давно работаю. Спасибо всем за помощь большое))
PS: Надо в PLEX добавить такую функцию)
Изменено: dimabk - 07.06.2018 08:54:40
Сложение чисел написанных через дробь
 
Цитата
vikttur написал:
Формула массива,ввдится тремя клаишами:=СУММ(ЕСЛИОШИБКА(--ПСТР(ПОДСТАВИТЬ("/"&A1;"/";ПОВТОР(" ";50));СТРОКА(1:9)*50;50))Если значений боьше 9, изменить верхний номер в функции СТРОКА
Что то невероятное) Работает) только не пойму зачем перед ПСТР два минуса ставится) если не сложно подскажите)
Сложение чисел написанных через дробь
 
Цитата
БМВ написал:
в именах=EVALUATE(SUBSTITUTE(Sheet1!A1;"/";"+"))
Спасибо. Не понял почему в именах ВЫЧИСЛИТЬ работает а на листе нет) Хороший вариант но не совсем удобен для не единичных вычислений.
Изменено: dimabk - 14.06.2018 12:43:38
Сложение чисел написанных через дробь
 
Цитата
a.i.mershik написал:
dimabk , а покажите хоть одно то что вы пытались в файле примере соответственно..
Я пытался через функцию "Подставить" но просто вставляется потом как текст. Через процедуру SUB тоже пытался, просто с помощью Replace заменял слэш на плюс и вставлял как формулу в ячейку. Работает но не удобно. Поэтому лучше с помощью функции либо встроенной либо написанной в VBA.
Изменено: dimabk - 14.06.2018 12:44:12
Сложение чисел написанных через дробь
 
Нужно сложить числа написанные в одной ячейке через дробь. Например, в ячейке написано 1/200/50/60. Нужно в другую ячейку написать результат сложения этих чисел, т.е. 311. Хотелось бы через процедуру Function это реализовать если макросом решать вопрос, или лучше всего встроенными функциями. Все перепробовал ничего не получается.
VBA Объединение ячеек в шапке таблицы, Необходимо для создания законченного образа шапки таблицы
 
Цитата
Inexsu написал:
Пожалуйста,, допилите и для меня:
Внес некоторые исправления, в частности прошлый код работал только если таблица начинается с первой строки excel. Теперь я поправил. Также диапазон теперь передается в процедуру, можно из формы либо из другого модуля. Также исправил функции СколькоКолонок и СколькоСтрок.
Теперь работает с любыми заголовками в любом месте листа.
Код
Dim cl As Range
Dim rngHead As Range
 
Sub TestMerge()
Call MergeHeadSmart(Selection)
End Sub

Sub MergeHeadSmart(r As Range)
  Set rngHead = r
  rngHead.UnMerge
  For Each cl In rngHead
    If GoDown Then Range(cl, cl.Offset(1, 0)).Merge
    If GoRight Then Range(cl, cl.Offset(0, 1)).Merge
  Next cl
'  rngHead.HorizontalAlignment = xlCenter
'  rngHead.VerticalAlignment = xlCenter
End Sub
 
Private Function GoRight()
  GoRight = False
  If IsEmpty(cl.Offset(0, 1)) And _
    cl.Offset(0, 1).Column <= rngHead.Columns(rngHead.Columns.Count).Column And _
      RowsCount(cl) = 1 And RowsCount(cl.Offset(0, 1)) = 1 Then _
      GoRight = True
End Function
 
Private Function GoDown()
  GoDown = False
  If IsEmpty(cl.Offset(1, 0)) And _
    cl.Offset(1, 0).Row <= rngHead.Rows(rngHead.Rows.Count).Row And _
      ColumnsCount(cl) = 1 Then
    GoDown = True
  End If
End Function
 
Private Function ColumnsCount(ByRef c As Range)
  Dim mRng As Range
  Set mRng = c.MergeArea
  Debug.Print mRng.Address
  ColumnsCount = mRng.Columns.Count
End Function
 
Private Function RowsCount(ByRef c As Range)
  Dim mRng As Range
  Set mRng = c.MergeArea
  RowsCount = mRng.Rows.Count
End Function

Изменено: dimabk - 10.10.2017 10:56:30
VBA Объединение ячеек в шапке таблицы, Необходимо для создания законченного образа шапки таблицы
 
Владимир, спасибо

Inexsu, спасибо большое. Очень круто! В принципе это то что нужно. Чуть допилю для большей гибкости. Метод Select конечно не хотелось бы использовать, но без него тут наверное никак)) Проверю на разных вариациях, потом отпишусь.
Inexsu, огромное спасибо еще раз.  
VBA Объединение ячеек в шапке таблицы, Необходимо для создания законченного образа шапки таблицы
 
Цитата
Владимир написал:
Пост 3 поправил.
Спасибо
VBA Объединение ячеек в шапке таблицы, Необходимо для создания законченного образа шапки таблицы
 
Цитата
Владимир написал:  ...можете подогнать под себя
да нет) все круто) гибким я и сам его допилю. Засада в Вашем коде в том что на втором уровне объединение проходит немного неправильно цепляя и соседние ячейки из другой иерархии. Но спасибо Вам большое и за этот код.
По поводу асу в лесу и прочих сравнений отвечу: дело в том что не все можно сделать сводными таблицами с помощью баз. Как раз различные небольшие или большие таблицы с конечным представлением данных. И это занимает время. Как раз я и пытаюсь написать такой макрос который был бы гибким. Это возможно, только мне нужно немного помощи.
Владимир, спасибо еще раз. Если Вы сможете навести меня на мысль по проблемке о которой я написал был бы очень благодарен.
VBA Объединение ячеек в шапке таблицы, Необходимо для создания законченного образа шапки таблицы
 
Неплохо но макрос слишком прямой и не гибкий. Так же в первом цикле For...Each он объединяет во второй строке ячейки из разных иерархий, т.е. 2016 объединяется в столбце Воркута с столбцом Итого.
Изменено: dimabk - 06.10.2017 22:44:12
VBA Объединение ячеек в шапке таблицы, Необходимо для создания законченного образа шапки таблицы
 
Добрый день! Прошу вашей помощи так как зашел в тупик при написании кода и поиск подобного не находит. Пытаюсь написать макрос который сам объединил бы ячейки в шапке таблицы по иерархии. В файле понятнее станет не примере.
Во вложении файл где указано "как было" и "как хотелось бы". Ниже привожу варианты кода которые не могу закончить.
Заранее большое спасибо.

Код
Sub MergeHeadTest2()
Dim mas() As Long
Dim sel As Range
Dim cl As Range
Dim r, c, i As Long
Set sel = Selection
sel.UnMerge
r = 1
c = 1
i = 1
For c = 1 To sel.Columns.Count
    If sel.Cells(r, c).Value <> "" Then
        If c - i = 1 Then
            Range(sel.Cells(r, i), sel.Cells(sel.Rows.Count, i)).Merge
            i = i + 1
        ElseIf c - i > 1 Then
            Range(sel.Cells(r, i), sel.Cells(r, c - 1)).Merge
        End If
    End If
Next c
End Sub

Код
Sub MergeHeadTest()
'Объединение ячеек в заголовке
Dim i As Integer
Dim j As Integer
Dim g As Range
Dim mas()
Set g = Selection
    With g
        For i = 1 To .Columns.Count
            If .Cells(1, i).Value <> "" Then
                j = j + 1
                ReDim Preserve mas(1 To j)
                mas(j) = i
            End If
        Next i
        If mas(UBound(mas)) <> .Columns.Count Then
            j = j + 1
            ReDim Preserve mas(1 To j)
            mas(j) = .Columns.Count
        End If
        For i = LBound(mas) To UBound(mas)
            If i = UBound(mas) Then
                Range(.Cells(1, mas(i)), .Cells(1, mas(i))).Merge
            Else
                Range(.Cells(1, mas(i)), .Cells(1, mas(i + 1) - 1)).Merge
            End If
        Next i
        If .Rows.Count > 1 Then
            For i = LBound(mas) To UBound(mas)
                If i = UBound(mas) Then
                    Range(.Cells(1, mas(i)), .Cells(1, mas(i))).Merge
                Else
                    Range(.Cells(1, mas(i)), .Cells(1, mas(i + 1) - 1)).Merge
                End If
            Next i
        End If
    End With

End Sub
VBA Excel: Как разделить выделенный диапазон на области?, Хочется выделенную таблицу разделить на блоки и отформатировать отдельно
 
Чуть выше я разместил свое видение макроса через userform. Все верно. Дело в форме отображения. Дело в том что около 80% таблиц в работе имеют вид который я привел в примере. Если же вид совсем изменится то можно в той же форме просто вручную выбрать область через нужный refedit. Что даст то что я хочу сделать: это даст быстрое форматирование таблиц с расчетами по заранее определенным шаблонам прописанным в макросе. Когда создается обычная таблица, к ней же нужно применить границы, выделить заголовки, подписи строк, выделить итоги, отформатировать значения и т.д. И это надоедает, а так прям все будет быстро и удобно. Судя по комментариям вы не совсем поняли что я хочу сделать. Мне кажется что очень понятно написал, хотя допускаю мысль что мне понятно потому что я в этом варюсь а для форума я как то криво истолковал.
VBA Excel: Как разделить выделенный диапазон на области?, Хочется выделенную таблицу разделить на блоки и отформатировать отдельно
 
AndreTM, сводные таблицы хороший инструмент но не везде подходит. Сводные таблицы нужны чтобы свести что то и как правило это статистические данные. Простые таблицы никто не отменял. Они применяются при расчетах, проектах и прочее.
Я придумал способ выделить области. Во вложении файл с макросом. Самое главное встать в ячейку в левом верхнем углу области значений. И дальше макрос сам определит что где что. Это сырая версия. Нужно еще дорабатывать прочими чекбоксами и т.д. чтобы сделать его гибким. Спасибо всем.
VBA Excel: Как разделить выделенный диапазон на области?, Хочется выделенную таблицу разделить на блоки и отформатировать отдельно
 
Нет это не копия из сводной. Это обычная созданная руками таблица которую отформатировать, отдельно заголовки, отдельно подписи строк, отдельно данные и итоги. Я думал вдруг чего то упустил, но видимо не удастся обойтись одной кнопкой. Не к чему привязаться. Единственный верный вариант наверное создать форму в которой добавить элементы управления RefEdit и уже прямо указать.
VBA Excel: Как разделить выделенный диапазон на области?, Хочется выделенную таблицу разделить на блоки и отформатировать отдельно
 
Добрый день!
Поискал, погуглил но что то не нашел нужного. Возможно с ключевыми словами не угадал. Поэтому обращаюсь к вам.
Хочу сделать автоформат таблицы по своим параметрам. Сейчас основной тупик в том как разделить выделенный диапазон на области, т.е. область данных (значения, формулы и т.д.), область заголовка (одна или более строк), область подписей (обычно слева построчно), область итога по строкам, область итога по столбцам.
Хотелось бы знать адреса всех этих областей и манипулировать ими уже как мне нужно.
Начинаю с CurrentRegion
Код
Sub Test()
Dim rng as Range
'Выделяем текущую область
Set rng = Activecell.CurrentRegion
rng.Select
End Sub
Подпись таблицы тоже захватывается, ее надо убрать из выделенного диапазона.
Конечно можно создать форму и вставить туда элемент управления RefEdit несколько штук и все области повыделять, но это долго и не интересно.
Прошу вашей помощи)
Файл во вложении как пример.
Страницы: 1
Наверх