Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/извлечь из таблицы данные - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » извлечь из таблицы данные (Формулы/Formulas)
извлечь из таблицы данные
row Дата: Вторник, 21.07.2020, 17:11 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

Добрый день форумчане.Работаю в SAPе и извлекаю таблицу в excel, вот только таблица очень большая. Не знаю с какой стороны подойти.Я в тупике .Подскажите
К сообщению приложен файл: 6924857.xlsx (11.7 Kb)
 
Ответить
СообщениеДобрый день форумчане.Работаю в SAPе и извлекаю таблицу в excel, вот только таблица очень большая. Не знаю с какой стороны подойти.Я в тупике .Подскажите

Автор - row
Дата добавления - 21.07.2020 в 17:11
Hugo Дата: Вторник, 21.07.2020, 17:31 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Добрый день.
6 раз СУММПРОИЗВ() или СУММЕСЛИ() не заметил что ещё и к названию нужно привязываться... Макрос точно может посчитать.
Но сейчас в последнее время модно на PQ делать...
Макрос, рабочий:
[vba]
Код

Option Explicit

Sub tt()
    Dim a, i&, t$
    a = ActiveSheet.UsedRange.Columns(1).Resize(, 3).Value
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a)
            If Len(a(i, 2)) = 0 Then t = a(i, 1)
            .Item(t & "d" & a(i, 1)) = .Item(t & "d" & a(i, 1)) + a(i, 2)
            .Item(t & "c" & a(i, 1)) = .Item(t & "c" & a(i, 1)) + a(i, 3)
        Next

        a = [i3].CurrentRegion.Value
        For i = 2 To UBound(a)
            a(i, 2) = .Item(a(i, 1) & "d510101") + .Item(a(i, 1) & "d510102") + .Item(a(i, 1) & "d510103")
            a(i, 3) = .Item(a(i, 1) & "c510101") + .Item(a(i, 1) & "c510102") + .Item(a(i, 1) & "c510103")
        Next
        [i3].CurrentRegion.Value = a
    End With
End Sub
[/vba]
Можно пооптимизировать, но станет непонятнее, но не быстрее :)
Если мешают нули - можно навесить доппроверку в макросе.


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Вторник, 21.07.2020, 20:16
 
Ответить
СообщениеДобрый день.
6 раз СУММПРОИЗВ() или СУММЕСЛИ() не заметил что ещё и к названию нужно привязываться... Макрос точно может посчитать.
Но сейчас в последнее время модно на PQ делать...
Макрос, рабочий:
[vba]
Код

Option Explicit

Sub tt()
    Dim a, i&, t$
    a = ActiveSheet.UsedRange.Columns(1).Resize(, 3).Value
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a)
            If Len(a(i, 2)) = 0 Then t = a(i, 1)
            .Item(t & "d" & a(i, 1)) = .Item(t & "d" & a(i, 1)) + a(i, 2)
            .Item(t & "c" & a(i, 1)) = .Item(t & "c" & a(i, 1)) + a(i, 3)
        Next

        a = [i3].CurrentRegion.Value
        For i = 2 To UBound(a)
            a(i, 2) = .Item(a(i, 1) & "d510101") + .Item(a(i, 1) & "d510102") + .Item(a(i, 1) & "d510103")
            a(i, 3) = .Item(a(i, 1) & "c510101") + .Item(a(i, 1) & "c510102") + .Item(a(i, 1) & "c510103")
        Next
        [i3].CurrentRegion.Value = a
    End With
End Sub
[/vba]
Можно пооптимизировать, но станет непонятнее, но не быстрее :)
Если мешают нули - можно навесить доппроверку в макросе.

Автор - Hugo
Дата добавления - 21.07.2020 в 17:31
row Дата: Вторник, 21.07.2020, 18:17 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

Hugo большое спасибо. Я VBA ноль, а где мне можно исправить, если вторая таблица будет на другом листе
 
Ответить
СообщениеHugo большое спасибо. Я VBA ноль, а где мне можно исправить, если вторая таблица будет на другом листе

Автор - row
Дата добавления - 21.07.2020 в 18:17
Hugo Дата: Вторник, 21.07.2020, 18:23 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Перед [i3] указать лист. Типа
[vba]
Код
sheets("имя листа").[i3]
[/vba]
Ну и адрес ячейки конечно скорректировать.
И уясните/почитайте что такое currentregion, возможно этот диапазон нужно определять иначе.


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Вторник, 21.07.2020, 18:25
 
Ответить
СообщениеПеред [i3] указать лист. Типа
[vba]
Код
sheets("имя листа").[i3]
[/vba]
Ну и адрес ячейки конечно скорректировать.
И уясните/почитайте что такое currentregion, возможно этот диапазон нужно определять иначе.

Автор - Hugo
Дата добавления - 21.07.2020 в 18:23
row Дата: Вторник, 21.07.2020, 18:25 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

Hugo огромное спасибо
 
Ответить
СообщениеHugo огромное спасибо

Автор - row
Дата добавления - 21.07.2020 в 18:25
прохожий2019 Дата: Вторник, 21.07.2020, 18:36 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
модно на PQ делать...
[vba]
Код
let
    from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    group = Table.Group(from, "Название", {"tmp", each _},GroupKind.Local,(x,y)=>Number.From(y=null))[tmp],
    f1=(t)=>Table.SelectRows(t,each [Название]<>null),
    f2=(t)=>Table.SelectRows(t,each List.ContainsAny({Text.From([Название])},{"510101","510102","510103"})),
    lst = List.Transform(group,each [a=f1(_){0},b= try f2(_){0} [[Дебет],[Кредит]] otherwise [Дебет=null,Кредит=null],c=a&b][c]),
    to=Table.FromRecords(lst)
in
    to
[/vba]
К сообщению приложен файл: 9538944.xlsx (21.8 Kb)
 
Ответить
Сообщение
модно на PQ делать...
[vba]
Код
let
    from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    group = Table.Group(from, "Название", {"tmp", each _},GroupKind.Local,(x,y)=>Number.From(y=null))[tmp],
    f1=(t)=>Table.SelectRows(t,each [Название]<>null),
    f2=(t)=>Table.SelectRows(t,each List.ContainsAny({Text.From([Название])},{"510101","510102","510103"})),
    lst = List.Transform(group,each [a=f1(_){0},b= try f2(_){0} [[Дебет],[Кредит]] otherwise [Дебет=null,Кредит=null],c=a&b][c]),
    to=Table.FromRecords(lst)
in
    to
[/vba]

Автор - прохожий2019
Дата добавления - 21.07.2020 в 18:36
Hugo Дата: Вторник, 21.07.2020, 19:03 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Мой вариант суммирует если будет несколько записей, например за разные периоды.
А как делает PQ?


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеМой вариант суммирует если будет несколько записей, например за разные периоды.
А как делает PQ?

Автор - Hugo
Дата добавления - 21.07.2020 в 19:03
row Дата: Вторник, 21.07.2020, 19:07 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

прохожий2019 а как это работает?
 
Ответить
Сообщениепрохожий2019 а как это работает?

Автор - row
Дата добавления - 21.07.2020 в 19:07
row Дата: Вторник, 21.07.2020, 19:09 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

Hugo когда 510103 пишет type mismatch
 
Ответить
СообщениеHugo когда 510103 пишет type mismatch

Автор - row
Дата добавления - 21.07.2020 в 19:09
Hugo Дата: Вторник, 21.07.2020, 19:30 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Это косяк данных и Вашего десятичного разделителя, что будем делать? Можно в коде навернуть...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЭто косяк данных и Вашего десятичного разделителя, что будем делать? Можно в коде навернуть...

Автор - Hugo
Дата добавления - 21.07.2020 в 19:30
row Дата: Вторник, 21.07.2020, 19:33 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

как?
 
Ответить
Сообщениекак?

Автор - row
Дата добавления - 21.07.2020 в 19:33
Hugo Дата: Вторник, 21.07.2020, 19:42 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Как вариант - убрать в коде вообще все суммирования, по примеру вроде как они не нужны, и думаю что PQ их тоже не делает и поэтому ошибок нет.
А на практике - проще вручную заменить все точки на свой разделитель. Даже на ту же точку, если точка.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеКак вариант - убрать в коде вообще все суммирования, по примеру вроде как они не нужны, и думаю что PQ их тоже не делает и поэтому ошибок нет.
А на практике - проще вручную заменить все точки на свой разделитель. Даже на ту же точку, если точка.

Автор - Hugo
Дата добавления - 21.07.2020 в 19:42
Hugo Дата: Вторник, 21.07.2020, 19:44 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Но я вот пока не могу понять почему у меня для П-AL-CAP AMBALA ничего не тянет... Да и PQ не тянет.
Понял - там код не из списка! :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Вторник, 21.07.2020, 19:45
 
Ответить
СообщениеНо я вот пока не могу понять почему у меня для П-AL-CAP AMBALA ничего не тянет... Да и PQ не тянет.
Понял - там код не из списка! :)

Автор - Hugo
Дата добавления - 21.07.2020 в 19:44
row Дата: Вторник, 21.07.2020, 19:47 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

Мне суммирование не надо, они уникальные.Мне надо название и дебет или кредит в отдельную таблицу где есть эти счета
 
Ответить
СообщениеМне суммирование не надо, они уникальные.Мне надо название и дебет или кредит в отдельную таблицу где есть эти счета

Автор - row
Дата добавления - 21.07.2020 в 19:47
Hugo Дата: Вторник, 21.07.2020, 19:49 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Вообще суммирование нужно, потому что Вы ведь не делаете для каждого кода свой столбец!
Берите вариант на PQ - оно быстро, только думаю сложнее применить, но зато не ругается пока на разделители. Может у себя внутри игнорирует?


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Вторник, 21.07.2020, 19:50
 
Ответить
СообщениеВообще суммирование нужно, потому что Вы ведь не делаете для каждого кода свой столбец!
Берите вариант на PQ - оно быстро, только думаю сложнее применить, но зато не ругается пока на разделители. Может у себя внутри игнорирует?

Автор - Hugo
Дата добавления - 21.07.2020 в 19:49
прохожий2019 Дата: Вторник, 21.07.2020, 19:51 | Сообщение № 16
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
Да и PQ не тянет.
ну PQ не тянет потому что там 520... а не 510... - я делал строго по ТЗ
А как делает PQ?
конкретный вариант тянет первое вхождение из каждой группы - я предполагал, что 1 группа = 1 проводка; если надо - можно еще и общую группировку добавить
 
Ответить
Сообщение
Да и PQ не тянет.
ну PQ не тянет потому что там 520... а не 510... - я делал строго по ТЗ
А как делает PQ?
конкретный вариант тянет первое вхождение из каждой группы - я предполагал, что 1 группа = 1 проводка; если надо - можно еще и общую группировку добавить

Автор - прохожий2019
Дата добавления - 21.07.2020 в 19:51
Hugo Дата: Вторник, 21.07.2020, 19:53 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Сейчас сделаю без суммирования, заодно и памяти поменьше съест.
Готово:
[vba]
Код

Sub tt()
    Dim a, el, i&, t$
    
    a = ActiveSheet.UsedRange.Columns(1).Resize(, 3).Value
    
    With CreateObject("Scripting.Dictionary")
        For Each el In Array(510101, 510102, 510103)
            .Item(el) = 0&
        Next
        For i = 2 To UBound(a)
            If Len(a(i, 2)) = 0 Then t = a(i, 1)
            If .exists(a(i, 1)) Then
                .Item(t & "d") = a(i, 2)
                .Item(t & "c") = a(i, 3)
            End If
        Next

        a = [i3].CurrentRegion.Value
        For i = 2 To UBound(a)
            a(i, 2) = .Item(a(i, 1) & "d")
            a(i, 3) = .Item(a(i, 1) & "c")
        Next
        [i3].CurrentRegion.Value = a
    End With
End Sub

[/vba]
При выгрузке удивительным образом строка с неэкселевым разделителем превращается в число с экселевым! :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Вторник, 21.07.2020, 19:58
 
Ответить
СообщениеСейчас сделаю без суммирования, заодно и памяти поменьше съест.
Готово:
[vba]
Код

Sub tt()
    Dim a, el, i&, t$
    
    a = ActiveSheet.UsedRange.Columns(1).Resize(, 3).Value
    
    With CreateObject("Scripting.Dictionary")
        For Each el In Array(510101, 510102, 510103)
            .Item(el) = 0&
        Next
        For i = 2 To UBound(a)
            If Len(a(i, 2)) = 0 Then t = a(i, 1)
            If .exists(a(i, 1)) Then
                .Item(t & "d") = a(i, 2)
                .Item(t & "c") = a(i, 3)
            End If
        Next

        a = [i3].CurrentRegion.Value
        For i = 2 To UBound(a)
            a(i, 2) = .Item(a(i, 1) & "d")
            a(i, 3) = .Item(a(i, 1) & "c")
        Next
        [i3].CurrentRegion.Value = a
    End With
End Sub

[/vba]
При выгрузке удивительным образом строка с неэкселевым разделителем превращается в число с экселевым! :)

Автор - Hugo
Дата добавления - 21.07.2020 в 19:53
row Дата: Вторник, 21.07.2020, 19:55 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

Hugo твой вариант мне более подходящий. А как можно чтоб разделители не ругались?
 
Ответить
СообщениеHugo твой вариант мне более подходящий. А как можно чтоб разделители не ругались?

Автор - row
Дата добавления - 21.07.2020 в 19:55
Hugo Дата: Вторник, 21.07.2020, 19:59 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Сделал, см.выше.
Легко добавить/убрать счета.


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Вторник, 21.07.2020, 20:00
 
Ответить
СообщениеСделал, см.выше.
Легко добавить/убрать счета.

Автор - Hugo
Дата добавления - 21.07.2020 в 19:59
row Дата: Вторник, 21.07.2020, 20:02 | Сообщение № 20
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 0 ±
Замечаний: 0% ±

Hugo огромное спасибо все получилось
 
Ответить
СообщениеHugo огромное спасибо все получилось

Автор - row
Дата добавления - 21.07.2020 в 20:02
Мир MS Excel » Вопросы и решения » Вопросы по Excel » извлечь из таблицы данные (Формулы/Formulas)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!