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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2012, 09:28   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну так я же сказал - смотрите по месту. Неужели совсем код не читаете?
Если не надо суммировать первый столбец - значит типа так:

Код:
            For i = 1 To UBound(b)
                If .exists(b(i, 1)) Then
                    t = .Item(b(i, 1))
                    c(t, 1) = b(i, 1)
                    For x = 2 To 3: c(t, x) = c(t, x) + b(i, x): Next
                End If
            Next
Ничего в логике не поменялось.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.09.2012, 13:40   #12
gladius13
 
Регистрация: 11.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ну так я же сказал - смотрите по месту. Неужели совсем код не читаете?
К сожалению нет, в программировании я 0 без палочки, обычный средний пользователь Excel, поэтому то и достаю Вас . Спасибо, что помогаете.
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Если не надо суммировать первый столбец - значит типа так:

Код:
            For i = 1 To UBound(b)
                If .exists(b(i, 1)) Then
                    t = .Item(b(i, 1))
                    c(t, 1) = b(i, 1)
                    For x = 2 To 3: c(t, x) = c(t, x) + b(i, x): Next
                End If
            Next
Ничего в логике не поменялось.
Сейчас макрос выставляет значения только двух смежных столбцов, а основной столбец с совпадающими значениями остается пустым.
gladius13 вне форума Ответить с цитированием
Старый 27.09.2012, 14:37   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Думаю, пора уже актуализировать файл и код - а то может мы о разном говорим
Покажите пример данных/файл и код, и что где не работает.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.09.2012, 19:13   #14
gladius13
 
Регистрация: 11.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Думаю, пора уже актуализировать файл и код - а то может мы о разном говорим
Покажите пример данных/файл и код, и что где не работает.
Ох, простите, видимо я погорячился, макрос вроде бы сейчас работает как надо. Единственное, чего не хватает - большего количества столбцов, которые выстраиваеются вместе со сравниваемым столбцом. Вы об этом писали выше, но у меня так и не получилось увеличить их количесво.
Приложил условный пример.
Сейчас совпадающие данные из столбца B вместе с данными из столбцов С и В выстраиваются напротив соответсвующих значенийй в столбцах F G H. Хотелось бы добавить еще два смежных столбца к столбцу B (E и F)(всего получится 4), а результат чтобы выстраивался например в столбце H и последующих столбцах.
Вложения
Тип файла: rar пример.rar (15.1 Кб, 33 просмотров)
gladius13 вне форума Ответить с цитированием
Старый 27.09.2012, 20:15   #15
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

"Хотелось бы добавить еще два смежных столбца к столбцу B (E и F)"
ну так добавьте - вместо
b = Range(.[D1], .Range("B" & iLastrow)).Value
пишем
b = Range(.[F1], .Range("B" & iLastrow)).Value

"(всего получится 4)" - вместо
ReDim c(1 To UBound(a), 1 To 3)
пишем
ReDim c(1 To UBound(a), 1 To 5)
и вместо
For x = 2 To 3
пишем
For x = 2 To 5
ну и выгрузка "а результат чтобы выстраивался например в столбце H":
.[H1].Resize(UBound(c), 5) = c

Итого:

Код:
Option Explicit


Sub compare()
    Dim a(), b(), c(), t&, x As Byte, iLastrow As Long, i As Long

    With Sheets(1)
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        a = Range(.[A1], .Range("A" & iLastrow)).Value
        iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row
        b = Range(.[F1], .Range("B" & iLastrow)).Value

        ReDim c(1 To UBound(a), 1 To 5)

        With CreateObject("Scripting.Dictionary")

            For i = 1 To UBound(a)
                .Item(a(i, 1)) = i
            Next

            For i = 1 To UBound(b)
                If .exists(b(i, 1)) Then
                    t = .Item(b(i, 1))
                    c(t, 1) = b(i, 1)
                    For x = 2 To 5: c(t, x) = c(t, x) + b(i, x): Next
                End If
            Next
        End With

        .[H1].Resize(UBound(c), 5) = c
        .Activate
    End With

End Sub
Как видно, вместо 5 можно использовать например переменную.
Т.е. в начале спросить у юзера - сколько столбцов желаете?
Затем это число использовать в коде, только место выгрузки тоже соответственно скорректировать, а лучше вообще выгружать в новый файл.
Как вариант.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 27.09.2012 в 20:19.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение двух столбцов на одном листе jm2m Microsoft Office Excel 21 29.08.2012 21:53
Сравнение значений на двух листах, более 80 000 строк. Hoochara Microsoft Office Excel 3 15.06.2012 13:12
Сравнение двух столбцов mGm Microsoft Office Excel 1 15.02.2012 21:39
Номера столбцов в которых находиться более двух простых чисел andry-raser Общие вопросы C/C++ 1 19.12.2011 13:59
Сравнение данных из двух и более книг Excel 2003 Елена20.12.1987 Microsoft Office Excel 0 20.04.2010 18:56