Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2015, 14:40   #1
Evgeniy71
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию получение статистических данных- нужна помощь экспертов

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

Сломал всю голову не пойму как это так можно обставить. VLOOKUP не поможет тут, т.к. формула возвращает первое совпадение и всё. Функцией IF - так же не смог добиться результата.

Если можете- помогите пожалуйста. Знакомых программистов нет, научить или объяснить не кому. Пока сам найдешь чего-то приемлемое, 2015 год к концу подойдет. Остается только положиться на помощь экспертов своей области.
Вложения
Тип файла: zip Пример.zip (14.5 Кб, 12 просмотров)

Последний раз редактировалось Evgeniy71; 08.01.2015 в 15:45.
Evgeniy71 вне форума Ответить с цитированием
Старый 09.01.2015, 11:26   #2
Evgeniy71
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Всем добрый день,
Я не опускаю руки и попутно штудирую интернет в поисках хоть чего-то подобного.
Успехов ноль (=INDEX(Sheet5!B:E;MATCH(A:A;Sheet5 !B2:B4000;0);MATCH(B1;Sheet5!B1:E1; 0))) тоже не помогло как и предыдущие (=IF(A3:A13=Sheet5!$B:$B;Sheet5!B2: G3636;"no")) и VLOOKUP. Не смог так же добиться успеха при использовании PVOT Table, получилось только сделать более удобоваримый вид, но опять же какую формулу сюда воткнуть?

Мужики осталось три дня отдыхать помогите, а?
Вложения
Тип файла: zip Пример.zip (32.1 Кб, 10 просмотров)
Evgeniy71 вне форума Ответить с цитированием
Старый 09.01.2015, 11:45   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от Evgeniy71 Посмотреть сообщение
Мужики осталось три дня отдыхать помогите, а?
OFF:Кто-то будет отдыхать,а кто-то работать над макросом.Вот и нет ответов
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 09.01.2015, 12:13   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Поищите по форуму макрос на словаре с коллекцией или массивом в item - я бы делал так.
Сперва анализ DATA и заполняем словарь - каждому товару собираем его коллецию или массив поставщиков с датами.
Затем в конце цикл по словарю и выгрузка результатов.

Вот тут например было (последний пост):
http://www.programmersforum.ru/showthread.php?t=210517

По задаче - объясните как из
30069536 SELTE 77 62
получили
30069536 SELTE 77 16 62
или из кучи
30069536 MASHTEKH 93 70
30069536 MASHTEKH 93 12
30069536 MASHTEKH 93 33
30069536 MASHTEKH 93 49
30069536 MASHTEKH 93 5
выбрали именно
30069536 MASHTEKH 93 5 49
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.01.2015 в 12:57.
Hugo121 вне форума Ответить с цитированием
Старый 09.01.2015, 15:13   #5
Evgeniy71
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
OFF:Кто-то будет отдыхать,а кто-то работать над макросом.Вот и нет ответов
Я бы тож отдохнул, да вот сижу корявыми ручонками собирать пытаюсь данные.
Evgeniy71 вне форума Ответить с цитированием
Старый 09.01.2015, 15:21   #6
Evgeniy71
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Hugo121 привет,
Я собирал пример как должно выглядеть вручную.
ПО порядку:
1) Вы правы 30069536 MASHTEKH 93 5 49 - это число "49" показывает максимальный фактический срок поставки (строка 125). Как раз по тому, что собирал пример вручную не то указал. Должно быть 70 (строка 116) вместо 49.

2) По задаче 30069536 SELTE 77 16 62 - число 16 по данному поставщику находится на 122 строке - это минимальный фактический срок поставки.

Последний раз редактировалось Evgeniy71; 09.01.2015 в 16:07.
Evgeniy71 вне форума Ответить с цитированием
Старый 09.01.2015, 15:35   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Понятно. Ну тогда нужно собирать словарь словарей - там по ссылке тоже есть пример кода. Но это чуть сложнее и для понимания и написания.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.01.2015, 16:16   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот по образцу делал:
Код:
Option Explicit

Sub tt()    ' словарь в словаре
    Dim a, i&, t$, Dic As Object, d As Object
    Dim tma&, tmi&, arr, el, col
    Dim x&, y&

    With Sheets("DATA")
        a = .Range("D2", .Cells(.Rows.Count, "A").End(xlUp)).Value
    End With

    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .CompareMode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
            Set d = .Item(t)
            If Not d.exists(a(i, 2) & "|" & a(i, 3)) Then
                d.Item(a(i, 2) & "|" & a(i, 3)) = Array(a(i, 4), a(i, 4))
                Set .Item(t) = d
            Else
                arr = d.Item(a(i, 2) & "|" & a(i, 3))
                tmi = arr(0): tma = arr(1)
                If a(i, 4) < tmi Then tmi = a(i, 4)
                If a(i, 4) > tma Then tma = a(i, 4)
                d.Item(a(i, 2) & "|" & a(i, 3)) = Array(tmi, tma)
                Set .Item(t) = d
            End If
        Next
    End With

    Application.ScreenUpdating = False
    x = 2
    With Sheets("RESULT")
        For Each el In Dic.keys
            x = x + 1: y = 2
            .Cells(x, 1) = el
            Set d = Dic.Item(el)
            For Each col In d.keys
                .Cells(x, y).Resize(1, 4) = Array(Split(col, "|")(0), Split(col, "|")(1), d.Item(col)(0), d.Item(col)(1))
                y = y + 4
            Next
        Next
    End With
    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.01.2015, 16:34   #9
Evgeniy71
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Hugo121 привет,
Я собирал пример как должно выглядеть вручную.
ПО порядку:
1) Вы правы 30069536 MASHTEKH 93 5 49 - это число "49" показывает максимальный фактический срок поставки (строка 125). Как раз по тому, что собирал пример вручную не то указал. Должно быть 70 (строка 116) вместо 49.

2) По задаче 30069536 SELTE 77 16 62 - число 16 по данному поставщику находится на 122 строке - это минимальный фактический срок поставки.
Evgeniy71 вне форума Ответить с цитированием
Старый 09.01.2015, 16:39   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Где-то я это уже читал
Проверили?
"Попугаев" нарисуете вручную, хотя можно конечно и код озадачить... Это я про bold, а заливка думаю лишняя. Просто мне лень в коде прописывать.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение данных из файла и запись этих данных в другой. Jurii77 Microsoft Office Excel 9 23.11.2011 09:42
Программа для получения статистических данных с различных сайтов. raddonx Софт 0 21.02.2011 08:46
Работа статистических функций Волк Microsoft Office Excel 2 21.05.2009 06:52
Программа для сбора (с инет-порталов) и анализа статистических данных. Гаур-Мяур Помощь студентам 5 03.04.2009 15:49
Получение данных с БД. urgu_st SQL, базы данных 5 13.01.2009 15:11