Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сравнение списков в один проход / 5 сообщений из 5, страница 1 из 1
20.02.2005, 14:53
    #32925073
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение списков в один проход
Существует два списка в Excel, например:
a 1 a 1
b 2 b 2
b 4 c 3
c 3 e 2
c 2
d 1
e 3
e 1
e 2
f 1

Один список расположен в перых двух столбцах, второй список - во вторых двух. Причём списки отсортированы. Требуется найти значения списка 2, которых нет в списке 1, и вывести их (в пятом столбце).
Я сделал следующую процедурку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
i2 =  1  'счётчик списка 2'
i3 =  1  'счётчик результирующего списка отличий'
For i1 =  1  To  10  'счётчик списка 1'
    v1 = Cells(i1,  1 ).Value & Cells(i1,  2 ).Value
    v2 = Cells(i2,  3 ).Value & Cells(i1,  4 ).Value
    If v1 < v2 Or v2 = "" Then '  совпадение не найдено '
        Cells(i3,  5 ).Value = v1
        i3 = i3 +  1 
    Else: i2 = i2 +  1  ' совпадение найдено '
    End If
Next
End Sub
в результате выводится список:
b4
c2
d1
e1
e2
f1

Как видно, e2 не должен выводится, а e3, наоборот выводиться должен, но не выводится. Как подправить процедурку, чтобы получить правильный результат?
...
Рейтинг: 0 / 0
20.02.2005, 14:56
    #32925074
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение списков в один проход
Sorry, правильное условие: нужно найти значения из списка 1, которых нет в списке 2.
...
Рейтинг: 0 / 0
20.02.2005, 22:43
    #32925180
FishingIsGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение списков в один проход
В один подход можно найти различие только для сортированных списков. У тебя же это условие не соблюдено (е3, е1, е2). Так что либо отсортируй списки, либо в один подход не получится.
...
Рейтинг: 0 / 0
21.02.2005, 09:00
    #32925354
Cyr
Cyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение списков в один проход
Отсортировал.
Теперь выводится
b4
c2
d1
e2
e3
f1
Но всё равно неправильно. e2 не должно выводиться.
...
Рейтинг: 0 / 0
21.02.2005, 09:36
    #32925402
FishingIsGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение списков в один проход
У тебя опечатка тут:

Код: plaintext
v2 = Cells(i2,  3 ).Value & Cells(i1,  4 ).Value

Должно быть:

Код: plaintext
v2 = Cells(i2,  3 ).Value & Cells(i2,  4 ).Value

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


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