Страницы: 1 2 След.
RSS
Как из названия столбцов со значениями, сделать один столбец.
 
Добрый день, подскажите пожалуйста как перенести даты из строк в столбец. Работаю с листом "ФинМодель", как прийти к  результату "таблица 1" Спасибо! Я сделала это через сводную, а можно как нибудь попроще это сделать? Дело в том, что у меня 70 таблиц и все нужно потом еще залить в Power Qwery.
Изменено: Катрин0605 - 24.05.2024 14:06:33
 
Код
Option Explicit

Private fm As Worksheet
Private sh As Worksheet
Private ys As Long

Sub AddSheet()
    Dim Application_Calculation As XlCalculation
    Application_Calculation = Application.Calculation
    Application.Calculation = xlCalculationManual

    Set fm = Sheets("ФинМодель")
    Set sh = Sheets.Add(After:=fm)
    SheetJob "M3:AV3"
    
    Application.Calculation = Application_Calculation
End Sub

Private Sub SheetJob(range_date As String)
    sh.Columns(1).ColumnWidth = 9.14
    sh.Columns(2).ColumnWidth = 8.71
    sh.Columns(3).ColumnWidth = 6
    sh.Columns(4).ColumnWidth = 31.71
    sh.Columns(5).ColumnWidth = 11.14
    sh.Columns(6).ColumnWidth = 9.71
    With sh.Cells(1, 1).Resize(1, 6)
        .Value = Array("Дата", "Месяц", "Год", "Показатель", "Значение", "Ед. изм.")
        .Font.Bold = True
    End With
    
    Dim cl As Range
    ys = 1
    For Each cl In fm.Range(range_date).Cells
        DateJob cl
    Next
    
    sh.UsedRange.Font.Size = 10
    
    sh.ListObjects.Add xlSrcRange, sh.UsedRange, , xlYes
    sh.ListObjects(1).TableStyle = ""
End Sub

Private Sub DateJob(clDate As Range)
    Dim sf As String
    sf = Replace(Replace(Cells(1, clDate.Column).Address(1, 1), 1, ""), "$", "")

    AddParam clDate.Value, sf, 6, "Выручка ПИР"
    AddParam clDate.Value, sf, 7, "Выручка СМР"
    AddParam clDate.Value, sf, 8, "Выручка ПНР"
    AddParam clDate.Value, sf, 9, "Выручка ТМЦ"
    AddParam clDate.Value, sf, 11, "Расходы на фазе II Планирование"
    AddParam clDate.Value, sf, 12, "Материальные Затраты"
    AddParam clDate.Value, sf, 13, "Услуги подрядчиков и прочие услуги"
    AddParam clDate.Value, sf, 14, "Финансовые расходы"
    AddParam clDate.Value, sf, 15, "Затраты на оплату труда"
    AddParam clDate.Value, sf, 16, "Резерв на гарантийное обслуживание"

End Sub

Private Sub AddParam(dt As Date, sf As String, yf As Long, param As String)
    ys = ys + 1
    With sh.Rows(ys)
        .Cells(1, 1).Value = dt
        .Cells(1, 2).Value = Format(dt, "MMMM")
        With .Cells(1, 3)
            .Value = dt
            .NumberFormat = "yyyy"
        End With
        .Cells(1, 4).Value = param
        With .Cells(1, 5)
            .Formula = "=" & fm.Name & "!" & sf & yf
            .NumberFormat = "#,##0.00"
        End With
        .Cells(1, 6).Formula = "=" & fm.Name & "!C" & yf
    End With
End Sub
 
Катрин0605, если с PQ знакомы, то  по столбцу "Показатель" пр.кн.мыши -> выбрать "Отменить свертывание др. столбцов" - будет в точности, так, как вы хотите.
Естественно, предварительное форматирование надо сделать, но оно минимальное (удалить ненужные столбцы, отфильтровать ненужные строки).
Изменено: voler83 - 24.05.2024 14:19:57
 
voler83, Я начала в PQ, но почему то у меня данные подтянулись некорректно, в этой таблице даты с 23 года, а тут почему то данные встали на 21 год, я вообще всю голову сломала. У меня получилась "таблица 1", но данные не те, то есть не в те даты встали. Вот и пошла в исходный файл творить
Изменено: Катрин0605 - 24.05.2024 14:28:57
 
voler83, Я начала в PQ, но почему то у меня данные подтянулись некорректно, в этой таблице даты с 23 года, а тут почему то данные встали на 21 год, я вообще всю голову сломала. У меня получилась "таблица 1", но данные не те, то есть не в те даты встали. Вот и пошла в исходный файл творить
 
Катрин0605, не ясно, что у вас исходник, что конечный результат.
В файле exel УТ000111.xlxs на листе "ФИНМОДЕЛЬ" - это исходник? Если да, то не могут столбцы с наличием "23" в имени переименоваться в столбцы с наличием "21" при загрузке в PQ - это результат вашей обработки. Не ясна проблема.
 
voler83, у меня 70 таблиц Финмодель, с разными данными по датам, я их все преобразовала и объединила, всё получилось прекрасно .кроме значений которые встали не в те даты, да и даты не все прогрузились....
Изменено: Катрин0605 - 24.05.2024 15:25:58
 
Катрин0605, догадался на 99%: вы объединили одинаковые таблицы Финмодель одна под другой, в одной из них в заголовке стоял год 2021 - вы подняли эту строку в заголовок,- он и остался единственным заголовком. Потом, скорее всего вы удалили все строки без статей доходов и затрат, в т.ч. и строку с заголовками в которой был 2023г.. Либо строка с 2023г. болтается где-то среди строк, если вы ее не удаляли.
Короче: все таблицы встали одна под другой, а заголовок остался только от самой верхней, по-другому и не должно было быть - как вы представляете себе объединение таблиц одна под другой? У таблицы не может быть несколько заголовков.
Чтобы получить из 70 таблиц то, что вы хотите, вам надо в файле примера сделать то, что я сначала написал, например, в отдельном запросе.
Изменено: voler83 - 24.05.2024 15:40:49
 
Здравствуйте!
, вариант с PQ, сделала как в примере на Листе "Таблица1".
Всего доброго! )
Изменено: Ma_Ri - 24.05.2024 16:19:53
 
Ma_Ri, ТС это не сделает после уже состоявшегося объединения таблиц, надо примечание, что это все надо сделать в файле примера, а потом объединять.
upd: ..... а если ТС сделает в файле примера как у вас, то у нее ничего не объединится, т.к. у вас на шаге "Добавлен индекс" идет пересортировка столбцов ReorderColumns - т.е. появляются жестко прописанные имена столбцов - это сразу же вызовет ошибки. Индекс добавлять не надо - пр.кн. мыши и "Отменить свертывание др. столбцов". Зачем там индекс?
Изменено: voler83 - 24.05.2024 15:55:53
 
Цитата
Катрин0605 написал:
всё получилось прекрасно .кроме значений которые встали не в те даты, да и даты не все прогрузились....
voler83, если честно я не такая догадливая как Вы, и не знаю, что там ТС объединял и как...что и куда не встало...
Может стоит первоначальное задание выложить, чтобы видеть исходные данные и результат какой требуется получить...
Индекс вставила, чтобы сохранить последовательность показателей.
Без столбца с индексом, если применить только  Unpivot получается как-то так...
Покажите как правильно сделать...
Изменено: Ma_Ri - 24.05.2024 16:27:55
 
Ma_Ri, там цифры из модели 2023г встали под заголовок 2021г, потому что таблицы моделей объединили одна под другой. Т.к. в таблице финмодели первая строка одинаково называется в каждом файле (она полупустая), то все конечно объединилось отлично друг под другом, т.к. наименования столбцов автоматом встали одинаковыми (без дат). После объединения таблиц строка самой верхней таблицы с 2021г была поднята как заголовок, остальные строки были удалены. Это догадки))
 
voler83, ... )

Может Катрин0605 подключится... возможно у нее уже все получилось...
Изменено: Ma_Ri - 24.05.2024 16:36:41
 
Цитата
Ma_Ri написал:
Индекс вставила, чтобы сохранить последовательность показателей.
с последовательностью все отлично, просто строки в другом порядке. Цифры не съехали на др. даты или статьи. ТС отсортирует потом как надо.
 
Цитата
voler83 написал:
с последовательностью все отлично, просто строки в другом порядке.
voler83, Вам не кажется, что в этих словах есть противоречие...
Цитата
voler83, написал:
ТС отсортирует потом как надо.
не против...если бы только в этом была проблема...
 
Ma_Ri, я убегала, приступаю, то есть мне надо 70 таблиц отработать, а потом соединить?
 
voler83, я правильно поняла работаю с каждой страницей отдельно, а потом только объединяю?  
 
Катрин0605, не надо каждую таблицу обрабатывать! не совсем все же ваша цель прослеживается -  вы хотите из всех 70ти таблиц получить плоскую таблицу, такую как сводную, которую в первом сообщении скинули?
Изменено: voler83 - 24.05.2024 21:24:21
 
voler83, да, у меня есть 70 файлов, мне из них всех надо собрать одну таблицу, формата как таблица 1, но чтобы все данные 70 файлов были. Вот задание
Выполнить сбор данных из всех файлов Excel со всех листов (Паспорт проекта, ФинМодель) в папке Модель. Представить данные в виде таблиц (Таблица 1, Таблица 2).
Изменено: Катрин0605 - 24.05.2024 21:37:05
 
voler83, Я думала, есть попроще метод в PQ, добавить таблицы например как сджонить, чтобы справа новые столбцы присоединились)))) я вообще запуталась на самом деле уже...
 
Катрин0605, поскольку вы явно новичок в соединении файлов в PQ, то могу только сказать, что вам надо добавить в пример файла соединения то, что вам скинула Ma_Ri выше, исключив из ее запроса добавление индекса. Если вы не можете с этим разобраться (а там по сути только щелкнуть по столбцу мышкой и выбрать пункт меню), то - обратиться в раздел "работа".
Изменено: voler83 - 25.05.2024 14:00:21
 
Здравствуйте!
Катрин0605, Посмотрите данные в файлах примерах, я разместила данные по годам. Возможно я неправильно Вас поняла, но Запрос сделан по исходным данным, которые в моих файлах.
Комментарий оставила в файле "Таблица1".
voler83, меня поправит надеюсь, решение наклацала насколько позволяют мои знания в PQ на данный момент, я как и Вы здесь учусь, поэтому могу и накосячить...)
voler83, посмотрите, пожалуйста, Ваши пожелания учла...но в том, что правильно поняла ТС и Вас не уверена...)
 
Ma_Ri, я не эксперт в PQ, чтобы оценивать чужие решения, если они работают, я сам учусь. С индексом просто сразу в глаза бросилось.
Кроме того, с учетом опыта ошибок при работе в PQ на работе, я все более склонен соединять файлы не через файл примера, а вручную через обращение ко вложенным таблицам=файлам с помощью добавления пользовательских столбцов - так контролируешь каждое действие и сразу видны ошибки в конкретных файлах, которые могут возникнуть, если таблица в каком-либо файле все-же случилась нестандартная. Использование файла-примера безопасно только при 100% гарантии структуры таблиц и их сравнительной простоты.
Кстати, при соединении файлов/таблиц через обращение к вложенным таблицам, индекс => любое жесткое прописывание имен столбцов на промежуточных этапах не повлияли бы, т.к. каждая вложенная таблица обрабатывается одинаковыми действиями/функциями, но отдельно.
Изменено: voler83 - 25.05.2024 15:19:58
 
Ma_Ri, спасибо большое, сейчас посмотрю. Господи, у меня всё получилось!!! Я работаю в PQ BI, благодаря ВАМ разобралась!
Изменено: Катрин0605 - 26.05.2024 09:41:25
 
voler83,   Спасибо ВАм большое, хоть начала немного соображать) А подскажите пожалуйста, какими ресурсами Вы пользуйтесь для обучения?
 
Катрин0605, параллельно изучая python и SQL, для себя такую оптимальную схему вывел:
- просмотреть краткие видеокурсы для новичков, охватывающие большое кол-во самых необходимых тем
- далее читать книги (курсы желательно просмотреть до книг, чтобы не разбирать скрины в книгах по полчаса, зависая над пользовательским интерфейсом, а сразу понимать хотя бы о чем речь и куда и почему тыкают в интерфейсе
- прочитав книгу - понять, какие темы самые важные, и по ним дополнительно искать все возможные источники, пока в каком-то источнике не найдете для себя такого объяснения, после которого становится все ясным,
- веду для себя конспекты и записи по изученным источникам со скринами и собственными пояснениями, чтобы не забыть.
Но это только мой метод, у каждого по-своему мозги работают, разная память (у меня плохая), разное время доступное для обучения.
Изменено: voler83 - 26.05.2024 14:47:58
 
voler83, спасибо Вам
 
Ma_Ri,  voler83, Добрый день, прошу еще у ВАс помощи, не могу понять в чем причина, какие действия пропускаю, благодарю! 1 исходный файл, 2. результат, 3 и 4 моё решение. На 5 рис. получилось как пример, но бардак с датами, пожалуйста скорректируйте меня!
Изменено: Катрин0605 - 30.05.2024 15:51:22
 
Здравствуйте!
Катрин0605, Я в Вашем примере ничего не увидела, что не получается.
Кнопочный вариант обработки файла приложила... (чем смогла, помогла)
Посмотрите пока этот, может Вам предложат другие варианты или что-то посоветуют.
Еще обратите внимание на рекомендации  voler83
Всего доброго! )
Изменено: Ma_Ri - 30.05.2024 20:15:19
 
Ma_Ri, Как мне Вас отблагодарить? Спасибо огромное, сейчас посмотрю :)  
Страницы: 1 2 След.
Наверх