Войти

Показать полную графическую версию : Задачка, объединить данные с разных листов


DimonNT
13-04-2023, 18:35
Друзья, задали такую задачку:
Есть несколько листов с данными, в списке ФИО и некие цифры по месяцам.
Задача: Объединить данные, и выявить одинаковые ФИО и чтобы они расположились по столбацам.
Условно:
ФИО Январь Февраль Март
Иванов И.И. 242425 3434

т.е. в данном случае может быть в феврале не было цифр, но за март были....

У меня пока только одна мысль: Ручками скопировать на один лист..... а вот как дальше упорядочить, вопрос...
Помогите, может какие мысли накините.. может скрипт какой-нибудь накидать...
Были бы имена все одинаковые, было бы проще, но бывает что эти имена не по порядку идут и бывает некоторых имён нет.... а бывает что в трёх таблицах одинаковые имена, но за Январь данные есть, а допустим за февраль нет данных, а за март опять есть...

Файл пример: https://cloud.mail.ru/public/PTmH/XofBBqjs8

чуть продолжу
Условно говоря: Собрал данные, пусть даже вручную, на один лист...
В итоге получим:
1 столбец ФИО
2, 3, 4, 5 столбцы с данными
Надо как-то чтобы строки с одинаковыми ФИО свернулись, а данные по столбцам упали в столбцы эквивалентные свёрнутым ФИО

okshef
13-04-2023, 19:53
DimonNT, Power Query
https://disk.yandex.ru/i/_aIgUD4iOng-KQ

P.S. Вы в теме не указали версию Excel

DimonNT
13-04-2023, 20:24
DimonNT, Power Query
https://disk.yandex.ru/i/_aIgUD4iOng-KQ

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

okshef
13-04-2023, 20:34
Да это не принципиально »
Версии ранее 2010 не будут работать

megaloman
13-04-2023, 23:15
DimonNT, Для начала, реорганизуем таблицу:
1) листы с данными переименуем в строгом соответствии с названием месяцев. листы с месяцами можно добавлять по мере необходимости
2) создадим лист с названием, например, Свод, нарисуем на нём заголовок и отформатируем для данных
Sub DimonNT()
Const rFio = "A2", Svod = "Свод"
Amon = Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
Dim Asum0(0, 11)

For i = 0 To 11
Asum0(0, i) = 0
Next

Application.ScreenUpdating = False
With CreateObject("Scripting.Dictionary")
For m = 0 To 11
On Error Resume Next
Set R = Sheets(Amon(m)).Range(rFio)
If Err.Number = 0 Then
j = 0
Do
Rv = R.Offset(j, 0).Value
If Not .Exists(Rv) Then
.Add Rv, Asum0
End If
Asum = .Item(Rv)
Asum(0, m) = Asum(0, m) + R.Offset(j, 1).Value
.Item(Rv) = Asum
j = j + 1
Loop Until Rv = Empty
End If
On Error GoTo 0
Next
j = 0
Sheets(Svod).Range(rFio).Resize(10000, 13).ClearContents
For Each k In .Keys
Sheets(Svod).Range(rFio).Offset(j, 0) = k
Sheets(Svod).Range(rFio).Offset(j, 1).Resize(1, 12).Value = .Item(k)
j = j + 1
Next
Application.ScreenUpdating = True
End With
End Sub
На листе Свод получим объединенные данные. Возможные проблемы - если Фамилия Имя Отчество для одного и того же человека введена на разных листах по разному.
Вашу таблицу с макросом прилагаю. Удалите только из названия файла расширение .xls

DimonNT
14-04-2023, 06:47
Power Query »
А можно текст запроса?... если не трудно, пожалуйста :)

okshef
14-04-2023, 07:04
Нажимаете на вкладке "Данные" кнопку "Запросы и подключения". Появляется панель с запросами. Двойной клик по любому - открывается Power Query. Кликайте по нужному запросу -> Вкладка "Главная" -> "Расширенный редактор".

Там 4 запроса. 3 одинаковых для исходных таблиц.

Совсем другой вопрос - что делать, если данные будут добавляться. Это отдельный разговор




© OSzone.net 2001-2012