powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel Сравнение двух диапазонов ячеек
3 сообщений из 28, страница 2 из 2
Excel Сравнение двух диапазонов ячеек
    #38107838
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
max777,
Ну я бы делал по проверенной схеме:
1. перебором фамилий 1 списка запоминаем в словаре фамилии и их позиции
2. перебором фамилий 2 списка по словарю проверяем их наличие и копируем ненайденные в результат (пары "ячеек"). У найденных стираем в словаре позицию.
3. перебором словаря оставшиеся там позиции добавляем в результат.

"Ячейки" в кавычках потому, что на количестве более 100 (да и вообще) быстрее сперва данные поместить в массивы и работать с ними, а не с ячейками листа.
Да и код так будет проще/прозрачнее/короче.


Примеров на форуме полно - ищите по scripting.dictionary.
...
Рейтинг: 0 / 0
Excel Сравнение двух диапазонов ячеек
    #38107852
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще я писал алгоритм на описание задачи в теме. В файле нечто другое... Не понял...
Поэтому вот код под описание в теме - выводит только разницу списков.
Код: vbnet
1.
2.
3.
4.
5.
Феоктистов	900
Гармыш	1000
Еремин	900
Коблун	1000
Санин	600



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Sub tt()
    Dim a(), b(), i&, ii&, el
    a = Sheets(1).[a1].CurrentRegion.Value
    b = Sheets(2).[a1].CurrentRegion.Value
    ReDim c(1 To UBound(a) + UBound(b), 1 To UBound(a, 2))

    With CreateObject("scripting.dictionary")
        '1
        For i = 1 To UBound(a): .Item(a(i, 1)) = i: Next

        '2
        For i = 1 To UBound(b)
            If Not .exists(b(i, 1)) Then
                ii = ii + 1
                c(ii, 1) = b(i, 1): c(ii, 2) = b(i, 2)
            Else
                .Item(b(i, 1)) = 0
            End If
        Next

        '3
        For Each el In .items
            If el > 0 Then ii = ii + 1: c(ii, 1) = a(el, 1): c(ii, 2) = a(el, 2)
        Next

    End With

    Sheets(3).[a1].Resize(ii, UBound(a, 2)) = c
End Sub
...
Рейтинг: 0 / 0
Excel Сравнение двух диапазонов ячеек
    #38108348
max777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,

Спасибо!
В принципе, если пренебречь всеми требуемыми удалениями, то к данному скрипту остается добавить вывод на лист3 ячеек где фамилии одинаковые, а разные только суммы. Думаю такого результата будет достаточно.



Феоктистов 900
Гармыш 1000
Еремин 900
Коблун 1000
Санин 600
Васечкин 8000 9000
Аронов 678 600

...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel Сравнение двух диапазонов ячеек
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]