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

Страницы: 1
Суммирование одинаковых значений таблицы по ключу из нескольких столбцов, Суммирование одинаковых значений таблицы по ключу из нескольких столбцов
 
Необходимо произвести суммирование значений по полю "Мес. ФЗП, руб." по одинаковым строкам и "количество штатных единиц", остальные данные остаются неизменными. Вывести на отдельный лист уникальные строки (которые не схлопывались)  и строки которые схлопнулись вместе в одну с учетом обновленных значений в них.

Остальное получилось самой прикрутить, а вот в этом загвоздка.

Заплатить много не смогу, но чем Бог послал поделюсь- иначе дыба, оплатить могу на номер мобильного.

В качестве бонуса, если вы будете не против поделюсь Вашим решением со ссылкой на Вас с остальными в другом разделе.
.
Спасибо.
Суммирование одинаковых значений таблицы по ключу из нескольких столбцов
 
Приветствую повелителей кода и начинающих дарований!

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


Код
Sub test()
    Dim coll As New Collection, src(), dst(), i As Long, m As Long, txt As String
    
    ' Создание массива уникальных значений по столбцу "Наименование" на Лист1
    With ThisWorkbook.Worksheets("Лист1")
        m = .Cells(1, 2).End(xlDown).Row
        src = .Range(.Cells(1, 2), .Cells(m, 2)).Value
        
        On Error Resume Next
        For i = 2 To UBound(src, 1)
            txt = Trim$(src(i, 1))
            coll.Add txt, txt
        Next
        On Error GoTo 0
        
        ReDim dst(1 To coll.Count, 1 To 1)
        For i = 1 To coll.Count
            dst(i, 1) = coll(i)
        Next
    End With
    
    ' Вставка массива уникальных значений и подсчет сумм формулами =СУММЕСЛИ() на Лист2
    With ThisWorkbook.Worksheets("Лист2")
        .Cells(2, 2).Resize(coll.Count).Value = dst()
        .Cells(2, 4).Resize(coll.Count).FormulaR1C1 = "=SUMIF('Лист1'!R2C2:R" & m & "C2,RC2,'Лист1'!R2C:R" & m & "C)"
        .Cells(2, 5).Resize(coll.Count).FormulaR1C1 = "=SUMIF('Лист1'!R2C2:R" & m & "C2,RC2,'Лист1'!R2C:R" & m & "C)"
        .Cells(2, 7).Resize(coll.Count).FormulaR1C1 = "=SUMIF('Лист1'!R2C2:R" & m & "C2,RC2,'Лист1'!R2C:R" & m & "C)"
    End With
End Sub

Как сделать чтобы условием был не один столбец "Наименование", а предположим по столбцам "Наименование" И "Группа" И "Подгруппа"  чтобы одинаковые строки также суммировались- ума не приложу как подкрутить.

Образцы в приложении- заранее благодарки всем неравнодушным.

Изменено: Tesla_LOLa - 04.02.2020 15:47:32
макрос excel на анализ входящей почты outloock и отправку файла excel
 
Братцы, сестры и Гуру программирования подскажите пожалуйста как быть и возможно с чего начать: в ходе работы столкнулась с необычной задачей:
На почту outloock периодически (очень часто) приходят письма с однотипными запросами (с конкретной темой письма) по которому надо ответить выгрузив  кусок таблицы одной и той же большой таблицы по подразделению. По идее необходимо при получении входящего письма макросом excel или в  макросом outloock  получить почту отправителя, сверить данные отправителя с базой контактов outloock, выгрузить наименование подразделения, далее  открыть файл excel ( с этого момента  моих знаний наверно хватит) по наименованию подразделению, провести фильтрацию по наименованию подразделения в файле, скопировать кусочек файла excel  в новый файл, сохранить новый файл, дальше отправить этот файл  ответным письмом на почтовый адрес с которого был направлен запрос (тут моих знаний снова не хватает).


Если все получится= как всегда по итогу выложу полную версию адаптированного рабочего кода, который смогут использовать другие для своих нужд. ;)
Заранее спасибо за любую помощь или добрый совет.
Изменено: Tesla_LOLa - 30.09.2019 18:24:59
удаление листов из книги вне списка/столбца значений макрос
 
Доброго всем.
Подскажите где тут ошибка (пытаюсь перекрутить ранее подсказанный добрыми ребятами с этого форума под новые нужды) и как ее можно исправить чтобы по заданным наименованиям в столбце 7 начиная с сell(1,7)  и до последней ячейки в столбце названия Сравнивались с текущими названиями листов в книге И Удалялись если не совпадают.
Код
   iLastRow = Cells(3, 7).End(xlDown).Row ' последняя заполненная ячейка в столбце с именами листов
  For i = 1 To iLastRow
  If a = Worksheets("check").Cells(i, 7).Value Then
 For Each Worksheet In ThisWorkbook.Sheets 
      
     If a <> Worksheet.Name Then
     

        
        Worksheet.Delete
        End If
        On Error Resume Next
    Next
    
    i = i + 1
    End If
        On Error Resume Next
    Next
Спасибо за время и добрые советы.
Поиск макросом excel по ключу массива данных по листам книги с суммированием
 
Доброй ночи мастерам макросов и сложных вычислений.
В очередной раз окунувшись с головой в непростую науку постижения и использования макросов бьюсь со следующей задачкой:
На основе игр с юзер формой и фильтрами получаю некий массив данных в listbox (это получилось) на основе его необходимо осуществить поиск с суммированием по разношерстным листам, ключи поиска (названия листов) представлены в массиве, вот чешу репку и прикинуть не могу дальше быть.........
Скрытый текст

Подскажите бобрику люди знающие да ведающие как можно прикрутить или что можно посмотреть или подсмотреть чтобы ручки выправить.

Заранее спасибо большое за уделенное время= всем хорошего настроения.
Изменено: Tesla_LOLa - 18.02.2019 09:46:21 (дополнен код, обновлено приложение, внесены правки в описание)
странность работы функции InsertChartField msoChartFieldRange, необычное рядом
 
Доброго всем.

Работая с размножением диаграмм бьюсь лбом об стенку над одной выявленной странностью:
Код
shtName33 = ActiveSheet.Name 'получаем имя текущего листа
major33 = shtName33 & "!$EA$105" 'получаем строку адреса в код    ActiveChart.FullSeriesCollection(2).DataLabels.Select
    ActiveChart.SeriesCollection(2).DataLabels.Format.TextFrame2.TextRange. _
    InsertChartField msoChartFieldRange, "=" & major33, 0 ', в оригинале выглядит если без переменных то выглядит так "=Лист5!$EA$105",0

    Selection.ShowRange = True 'показываем подпись на графике
    Selection.ShowValue = False 'убираем старую подпись от данных
в теле макроса если задать переменными смену подписи в столбце диаграммы  из заданного диапазона/ячейки то  при запуске отдельного макроса он его видит и его выполняет, а если цикл запускается после другого цикла то нет....... ребят может кто подскажет из-за чего вообще и может научит уму-разуму.

Заранее огромное спасибо.
Мастер лист для размножения по циклу
 
Доброго времени суток мастерам макросов и Гуру тайных знаний.
Ломаю голову над новой задачкой:

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

Может кто поделиться мудростью да снова направит на путь истинный и зажжет небольшой огонек света= в любом случае спасибо.
Изменено: Tesla_LOLa - 30.11.2018 15:37:51 (добавлен файл пример)
фильтрация и очистка дубликатов без удаления ячеек ( и другого текста)
 
Доброго времени суток мастерам макросов и Гуру тайных знаний.

Ломаю голову над задачкой:

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

'
' чистка Макрос и построение
'

'
    Columns("F:H").Select
    ActiveWorkbook.Worksheets("итог").Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets("итог").Sort.SortFields. _
        Add Key:=Range("F2:F15"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("итог").Sort
        .SetRange Range("F1:H15")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With


В ходе активных поисков был найден макрос мастера RAN:
Скрытый текст

но я пока не понимаю как его прикрутить или что вообще можно использовать, чтобы сторонний текст не пострадал.
Вся эта процедура направлена, чтобы потом можно было быстро и просто строить график.
Может кто поделиться мудростью да направит на путь истинный= в любом случае спасибо.
Изменено: Tesla_LOLa - 28.11.2018 13:34:19
копирование диапазона и вставка в конец другой таблицы на том же листе макрос
 
Доброго вечера мастерам макросов и Гуру тайных знаний.

Пару дней ломаю голову над задачкой:
Необходимо скопировать  как значения данные диапазона по заполненным ячейкам (только значения без формул)  таблицы которая находится в правой части листа
и перенести в первую пустую строку таблицы которая находится в левой части листа (не затирая ни значения ни формулы в левой таблице), при этом при повторном запуске макроса данные скопированные данные будут снова добавлены с последней заполненной ячейки /строки по таблице в левой части.

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

думал и про .SpecialCells (xlConstants, 23) но как что прикрутить .........
Код
Sub ZKU()
Dim r As Variant
Application.ScreenUpdating = False
    With Sheets("ИМЯ ЛИСТА")
        lr = .Cells(Rows.Count, 56).End(xlUp).Row
        r = Range(.Cells(2, 33), .Cells(500, 57))
        Range(.Cells(1 + 1, 1), .Cells(1 + 499, 25)) = r
    End With
end sub
Может кто поделиться мудростью да направит на путь истинный= в любом случае спасибо.
Изменено: Tesla_LOLa - 23.11.2018 17:37:05 (залит файл примера)
Годный спам-бот Excel (для outloock), быстрая удобная рассылка с помощью excel через outloock с подписями и примером
 
Всем приятного, разработан хороший авто бот по рассылке на основе макроса excel= пользуйтесь
Скрытый текст
Вставка подписи с картинкой из файла или при рассылке писем из excel
 
Приветствую старожил и гуру мира Excel.

Ломаю голову над задачкой по макросу в excel для подготовки рассылки- был подготовлен годный рабочий макрос, после пары бессонных ночей и изучения большого кол-ва материалов, в том числе на этом чудесном форуме= выкладываю в помощь форумчанам (крови и усилий этот мозговой штурм из меня испил достаточно):
Скрытый текст

Макрос рабочий, но не хватает подписей..................новая волна мозгового штурма.....
в результате получился усовершенствованный макрос с подписями:
Скрытый текст

В результате подпись успешно добавляет и по сути все шикарно, но подпись не форматированная и без картинки.
Поэтому пришлось приложить еще усилий в результате была найдена функция Dick Kusleika, и вот тут мои дорогие собратья не помешал бы совет. может, что не так тут:
Код
Sub Send_PODPIS_FULL_Mail_SAV_Mass()   Dim objOutlookApp As Object, objMail As Object
   Dim SigString As String, signature As String
   Dim lr As Long, lLastR As Long

   Application.ScreenUpdating = False
   On Error Resume Next
   Set objOutlookApp = CreateObject("Outlook.Application")
   If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
   objOutlookApp.Session.Logon

   lLastR = Cells(Rows.Count, 1).End(xlUp).Row 'определяем последнюю заполненную ячейку в столбце А
   'цикл от второй строки(начало данных с адресами) до последней ячейки таблицы
   For lr = 2 To lLastR
       Set objMail = objOutlookApp.CreateItem(0)   'создаем SAV-новое сообщение
    SigString = "C:\Documents and Settings\" & Environ("Alena") & _
                "\Application Data\Microsoft\Signatures\Pups.htm"


    If Dir(SigString) <> "" Then
        signature = GetBoiler(SigString)
    Else
        signature = ""
    End If

    On Error Resume Next

       'создаем сообщение иначе Бабайка покарает тебя
       With objMail
If Dir(Cells(lr, 4), 16) = "" Then
MsgBox "Файл не найден: " & Cells(lr, 4), vbInformation
End If
           .To = Cells(lr, 1) 'сюда мыло
           .Subject = Cells(lr, 2) 'тему сюда
           .body = Cells(lr, 3) & signature 'текст сюда
           .Attachments.Add Cells(lr, 4).Value
           .Attachments.Add Cells(lr, 5).Value
                   
           .Send 'Все ты во власти СПАМ-бота
       End With
   Next lr

   Set objOutlookApp = Nothing: Set objMail = Nothing
   Application.ScreenUpdating = True
End Sub

Function GetBoiler(ByVal sFile As String) As String
'Dick Kusleika
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemO bject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.readall
ts.Close
End Function
полный путь к сигнатуре C:\Users\Alena\AppData\Roaming\Microsoft\Signatures
было бы классно если было бы возможно прикрутить мою одну подпись и больше это все не трогать, только как это сделать мой мозг уже ломается.....
Изменено: Tesla_LOLa - 13.11.2018 09:08:20
Страницы: 1
Наверх