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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 13:29   #1
DJTreeno
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 146
По умолчанию Совпадение по номеру (ключу)

Доброго всем времени суток!!!
Ситуация вот какая, надо чтобы на VBA происходил поиск по ключу, с последующим выбором ячеек в ключевой строке и суммированию их, например:

1 50
2 35
1 75
3 65
2 10

Функция должна проверить какие значения в первом столбце совпадают - две единицы совпали и две двойки совпали, следовательно выдает 1 (50+75) 2 (35+10):

должно получится:
1 125
2 45
3 65

То есть, если совпадений не обнаружено, то выдает единичный результат без суммирования, как показано выше.

Пожалуйста помогите, тяжело что-то идет!!!

Заранее благодарен!
DJTreeno вне форума Ответить с цитированием
Старый 07.12.2011, 13:35   #2
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

VBA обязательно?
Есть функция СУММЕСЛИ().
vikttur вне форума Ответить с цитированием
Старый 07.12.2011, 14:12   #3
DJTreeno
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 146
По умолчанию

да VBA обязательно, щас попробую через сортировку и макрос записать...
DJTreeno вне форума Ответить с цитированием
Старый 07.12.2011, 14:14   #4
DJTreeno
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 146
По умолчанию

Сортировка не подходит, надо указывать по какому ключу сортировать(((
Надо чтоб сравнивало...
DJTreeno вне форума Ответить с цитированием
Старый 07.12.2011, 15:09   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

http://www.planetaexcel.ru/forum.php?thread_id=26105
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.12.2011, 15:13   #6
DJTreeno
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 146
По умолчанию

Спасибище огромное!!!
Искал искал, но не нашел)))
DJTreeno вне форума Ответить с цитированием
Старый 07.12.2011, 15:15   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Кстати, слово "ключ" как раз "в тему" - там словарь с keys используется
Но сортировки нет!
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.12.2011, 15:25   #8
DJTreeno
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 146
По умолчанию

Hugo121, чет там тяжеловато как-то. Помогите пожалуйста упростить под мою задачу.
У меня известно в каких столбцах будут ключи и в какие результат бросать, еще щас тока подумал:
яблоки 1 50
груши 2 35
яблоки 1 75
бананы 3 65
груши 2 10

Как с текстовыми быть?
Помогите!
DJTreeno вне форума Ответить с цитированием
Старый 07.12.2011, 15:29   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Сюда код положу:
Код:
Sub UniqSummUniversal()    'вариант без Transpose - для больших объёмов
'Выделить диапазон, где в первом столбце - неуникальные, в последнем - суммы
    Dim a(), b(), oDict As Object, i&, ii&, temp$, x&
    Dim ind&
    'Dim tm: tm = Timer
    a = Selection.Value
    ReDim b(1 To UBound(a, 1), 1 To 3)
    ind = UBound(a, 2)
    Set oDict = CreateObject("Scripting.Dictionary")
    oDict.CompareMode = 1
    For i = 1 To UBound(a)
        If Not IsEmpty(a(i, ind)) Then
            If IsNumeric(a(i, ind)) Then
                temp = Trim(a(i, 1))
                If Not oDict.Exists(temp) Then
                    ii = ii + 1
                    b(ii, 1) = temp: b(ii, 2) = --a(i, ind): b(ii, 3) = 1
                    oDict.Add temp, CStr(ii)
                Else
                    x = oDict.Item(temp)
                    b(x, 2) = b(x, 2) + --a(i, ind)
                    b(x, 3) = b(x, 3) + 1
                End If
            End If
        End If
    Next

    If ii > 0 Then
        With Workbooks.Add.Worksheets(1)
            .Columns(1).NumberFormat = "@"
            .Range("A1:C1").Resize(ii) = b
        End With
    Else
        MsgBox "Выделите корректные данные!", vbCritical
    End If
    
    'Debug.Print Timer - tm
    End Sub
Так где у Вас данные, говорите?
В общем, вместо Selection задайте свой известный Вам диапазон.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.12.2011, 15:34   #10
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

чуть короче:

Код:
Sub t()
Dim ar, i&, r(), s$, dic
ar = [dat]
ReDim r(1 To UBound(ar), 1 To 2)
Set dic = CreateObject("scripting.dictionary")
For i = 1 To UBound(ar)
    s = CStr(ar(i, 1))
    If dic.exists(s) Then
        r(dic(s), 2) = r(dic(s), 2) + ar(i, 2)
    Else
        dic.Add s, dic.Count + 1
        r(dic.Count, 1) = ar(i, 1)
        r(dic.Count, 2) = ar(i, 2)
    End If
Next
[d1].Resize(dic.Count, 2) = r
End Sub
slan вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск эл-та по ключу. что использовать? alex(21) Общие вопросы C/C++ 1 20.10.2010 17:50
Поиск по ключу asd874 Помощь студентам 1 19.04.2010 00:02
Перегрупировка столбцов в строки по ключу Serzh83 Microsoft Office Excel 2 26.11.2009 10:21
Поиск в бинарном дереве не по ключу lebrosha Помощь студентам 2 26.05.2009 15:32
Упорядовачивание таблицы по ключу. Юлкунчик Помощь студентам 2 09.12.2007 20:59