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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2012, 16:00   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Выборка из диапазона всех уникальных значений

Добрый день, уважаемые форумчане!
В продолжение темы о таблице сетевой структуры выкладываю то, что у меня получилось с таким вопросом:
Каким образом на лист 2 в первый столбец начиная со строки 3 из диапазона E3:T19 сделать выборку всех уникальных значений ID? И еще было бы неплохо сразу просуммировать все ячейки этого диапазона, которые соответствуют этим ID с результатом в соседнем столбце. Получить так сказать итоговую сумму по каждому встречающемуся в диапазоне ID. Полдня пролазил по инету, материалов масса, но что-то ничего подходящего не нашел. Или бессонная ночь дает о себе знать.
Заранее спасибо.
Вложения
Тип файла: rar выборка.rar (7.9 Кб, 30 просмотров)
strannick вне форума Ответить с цитированием
Старый 09.03.2012, 18:44   #2
Volodshan
Форумчанин
 
Регистрация: 20.05.2008
Сообщений: 241
По умолчанию

Цитата:
Сообщение от strannick Посмотреть сообщение
... материалов масса, но что-то ничего подходящего не нашел...
И сводная таблица не устраивает?.. И выборка уникальных расширенным фильтром?.. И подборка к ним по СУММЕСЛИ()?..
Volodshan вне форума Ответить с цитированием
Старый 10.03.2012, 02:01   #3
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Код:
Sub www()
    Dim i%, n&, c&, a, k&
    Worksheets("Лист2").UsedRange.ClearContents
    a = Worksheets(1).Range("E3:T19")
    ReDim b(1 To CInt(UBound(a, 2) / 2 * UBound(a, 1)), 1 To 2)
    With CreateObject("Scripting.Dictionary")
        For c = 1 To UBound(a, 2) Step 2
            For i = 1 To UBound(a)
                If a(i, c) <> "" Then
                    If .exists(a(i, c)) Then
                        n = .Item((a(i, c)))
                        b(n, 2) = b(n, 2) + a(i, c + 1)
                    Else
                        k = k + 1: .Item((a(i, c))) = k
                        b(k, 1) = a(i, c): b(k, 2) = a(i, c + 1)
                    End If
                End If
            Next: Next
    End With
    Worksheets("Лист2").[a3].Resize(k, 2) = b
End Sub
Вложения
Тип файла: rar выборка.rar (13.7 Кб, 48 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 10.03.2012, 02:16   #4
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Volodshan Посмотреть сообщение
И сводная таблица не устраивает?
Volodshan, просто для самообразования, покажите, как этот вопрос решается сводной?
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 10.03.2012, 19:31   #5
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Код:
Sub www()
    Dim i%, n&, c&, a, k&
    Worksheets("Лист2").UsedRange.ClearContents
    a = Worksheets(1).Range("E3:T19")
    ReDim b(1 To CInt(UBound(a, 2) / 2 * UBound(a, 1)), 1 To 2)
    With CreateObject("Scripting.Dictionary")
        For c = 1 To UBound(a, 2) Step 2
            For i = 1 To UBound(a)
                If a(i, c) <> "" Then
                    If .exists(a(i, c)) Then
                        n = .Item((a(i, c)))
                        b(n, 2) = b(n, 2) + a(i, c + 1)
                    Else
                        k = k + 1: .Item((a(i, c))) = k
                        b(k, 1) = a(i, c): b(k, 2) = a(i, c + 1)
                    End If
                End If
            Next: Next
    End With
    Worksheets("Лист2").[a3].Resize(k, 2) = b
End Sub
Работает как часы. Сейчас еще потестю, но вроде порядок. Спасибо огромное.
strannick вне форума Ответить с цитированием
Старый 10.03.2012, 19:32   #6
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Volodshan, просто для самообразования, покажите, как этот вопрос решается сводной?
Присоединяюсь. В данной задаче старался перевязывать все формулами. Поэтому для самообразования было бы неплохо.
strannick вне форума Ответить с цитированием
Старый 10.03.2012, 20:24   #7
Volodshan
Форумчанин
 
Регистрация: 20.05.2008
Сообщений: 241
По умолчанию

Цитата:
Сообщение от strannick Посмотреть сообщение
...начиная со строки 3 из диапазона E3:T19 сделать выборку всех уникальных значений ID? И еще было бы неплохо сразу просуммировать все ячейки этого диапазона, которые соответствуют этим ID с результатом в соседнем столбце...
Варианты - сводная по диапазонам, консолидация (итоги макроса kuklp для сравнения).
Вложения
Тип файла: rar VSH_выборка.rar (33.9 Кб, 47 просмотров)
Volodshan вне форума Ответить с цитированием
Старый 10.03.2012, 20:55   #8
MCH
Форумчанин
 
Регистрация: 21.11.2010
Сообщений: 326
По умолчанию

Цитата:
Сообщение от strannick Посмотреть сообщение
В данной задаче старался перевязывать все формулами.
Формульный вариант
Вложения
Тип файла: rar выборка2.rar (11.2 Кб, 76 просмотров)
MCH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор уникальных цифр из диапазона Tidus Microsoft Office Excel 23 02.04.2011 03:03
Сортировка уникальных данных, и выборка первого sane4ek_d Microsoft Office Excel 6 19.01.2010 15:17
выборка уникальных значений из бд MsSQL xxxsas SQL, базы данных 1 11.04.2009 14:31
Найти значение функций для всех целых значений из диапазона -8..3 Goldberg Паскаль, Turbo Pascal, PascalABC.NET 5 13.11.2008 00:05
Выборка уникальных значений Mary_star SQL, базы данных 9 11.02.2008 22:46