Сравнение двух списков без учёта порядка
Mishka1980
Дата: Вторник, 17.02.2015, 11:38 |
Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Нужно сравнить два списка значений без учёта порядка. Для списков, в которых нет повторяющихся значений, подходит формула: =СУММ(ЕСЛИ(ТРАНСП(Диапазон1)=Диапазон2;1;0)) Формула выводит количество совпадающих значений. Но, если хотя бы в одном из списков есть повторяющиеся значения, формула даёт неправильный результат. Пожалуйста, помогите поправить формулу, чтобы она давала правильный результат в этом случае. Количество значений в двух списках может быть разное.
Нужно сравнить два списка значений без учёта порядка. Для списков, в которых нет повторяющихся значений, подходит формула: =СУММ(ЕСЛИ(ТРАНСП(Диапазон1)=Диапазон2;1;0)) Формула выводит количество совпадающих значений. Но, если хотя бы в одном из списков есть повторяющиеся значения, формула даёт неправильный результат. Пожалуйста, помогите поправить формулу, чтобы она давала правильный результат в этом случае. Количество значений в двух списках может быть разное. Mishka1980
Ответить
Сообщение Нужно сравнить два списка значений без учёта порядка. Для списков, в которых нет повторяющихся значений, подходит формула: =СУММ(ЕСЛИ(ТРАНСП(Диапазон1)=Диапазон2;1;0)) Формула выводит количество совпадающих значений. Но, если хотя бы в одном из списков есть повторяющиеся значения, формула даёт неправильный результат. Пожалуйста, помогите поправить формулу, чтобы она давала правильный результат в этом случае. Количество значений в двух списках может быть разное. Автор - Mishka1980 Дата добавления - 17.02.2015 в 11:38
_Boroda_
Дата: Вторник, 17.02.2015, 11:46 |
Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16910
Репутация:
6616
±
Замечаний:
±
2003; 2007; 2010; 2013 RUS
Так нужно? Код
=СУММПРОИЗВ(--ЕЧИСЛО(ПОИСКПОЗ(D19:D25;B19:B25;)))
D19:D25 - какой диапазон проверяем B19:B25 - где проверяем
Так нужно? Код
=СУММПРОИЗВ(--ЕЧИСЛО(ПОИСКПОЗ(D19:D25;B19:B25;)))
D19:D25 - какой диапазон проверяем B19:B25 - где проверяем _Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: Boroda_Excel@mail.ru Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
Ответить
Сообщение Так нужно? Код
=СУММПРОИЗВ(--ЕЧИСЛО(ПОИСКПОЗ(D19:D25;B19:B25;)))
D19:D25 - какой диапазон проверяем B19:B25 - где проверяем Автор - _Boroda_ Дата добавления - 17.02.2015 в 11:46
Mishka1980
Дата: Вторник, 17.02.2015, 12:13 |
Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
_Boroda_ , спасибо, но нет. Например, если удалить 3 значения из 1-ого списка, то результат должен быть равен 4. Так как у списков осталось 4 пересечения.
_Boroda_ , спасибо, но нет. Например, если удалить 3 значения из 1-ого списка, то результат должен быть равен 4. Так как у списков осталось 4 пересечения.Mishka1980
Ответить
Сообщение _Boroda_ , спасибо, но нет. Например, если удалить 3 значения из 1-ого списка, то результат должен быть равен 4. Так как у списков осталось 4 пересечения.Автор - Mishka1980 Дата добавления - 17.02.2015 в 12:13
slAvIk159
Дата: Вторник, 17.02.2015, 12:24 |
Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 83
Репутация:
13
±
Замечаний:
0% ±
Excel 2013
Код
=СУММ(ЕСЛИ(ПОИСКПОЗ(B20:B23;D19:D25;0)>0;1;0))
Mishka1980 , а так?
Код
=СУММ(ЕСЛИ(ПОИСКПОЗ(B20:B23;D19:D25;0)>0;1;0))
Mishka1980 , а так?slAvIk159
Сообщение отредактировал slAvIk159 - Вторник, 17.02.2015, 12:27
Ответить
Сообщение Код
=СУММ(ЕСЛИ(ПОИСКПОЗ(B20:B23;D19:D25;0)>0;1;0))
Mishka1980 , а так?Автор - slAvIk159 Дата добавления - 17.02.2015 в 12:24
Mishka1980
Дата: Вторник, 17.02.2015, 13:11 |
Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
slAvIk159 , спасибо, вроде бы. Но не подходит мне, так как если удалить или изменить одно из значений, выдаётся результат Н/Д. Или если изменить один из диапазонов, также Н/Д.
slAvIk159 , спасибо, вроде бы. Но не подходит мне, так как если удалить или изменить одно из значений, выдаётся результат Н/Д. Или если изменить один из диапазонов, также Н/Д.Mishka1980
Ответить
Сообщение slAvIk159 , спасибо, вроде бы. Но не подходит мне, так как если удалить или изменить одно из значений, выдаётся результат Н/Д. Или если изменить один из диапазонов, также Н/Д.Автор - Mishka1980 Дата добавления - 17.02.2015 в 13:11
buchlotnik
Дата: Вторник, 17.02.2015, 13:20 |
Сообщение № 6
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация:
929
±
Замечаний:
20% ±
2010, 2013, 2016 RUS / ENG
я, конечно, накрутил, но посмотрите Код
=СУММПРОИЗВ(--(ЕСЛИОШИБКА(ПОИСКПОЗ($B$20:$B$23;$B$20:$B$23;0);0)=СТРОКА(1:4));ЕСЛИ(СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)>=СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)))
массивка смысл формулы - получаем перечень уникальных значений из списка 1 и суммируем их количества по списку 1 или по списку 2 в зависимости от того, где меньше UPD если число строк постоянно меняется так будет лучше:Код
=СУММПРОИЗВ(--(ЕСЛИОШИБКА(ПОИСКПОЗ($B$20:$B$23;$B$20:$B$23;0);0)=СТРОКА(СМЕЩ(A1;0;0;СЧЁТЗ($B$20:$B$23);1)));ЕСЛИ(СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)>=СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)))
я, конечно, накрутил, но посмотрите Код
=СУММПРОИЗВ(--(ЕСЛИОШИБКА(ПОИСКПОЗ($B$20:$B$23;$B$20:$B$23;0);0)=СТРОКА(1:4));ЕСЛИ(СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)>=СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)))
массивка смысл формулы - получаем перечень уникальных значений из списка 1 и суммируем их количества по списку 1 или по списку 2 в зависимости от того, где меньше UPD если число строк постоянно меняется так будет лучше:Код
=СУММПРОИЗВ(--(ЕСЛИОШИБКА(ПОИСКПОЗ($B$20:$B$23;$B$20:$B$23;0);0)=СТРОКА(СМЕЩ(A1;0;0;СЧЁТЗ($B$20:$B$23);1)));ЕСЛИ(СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)>=СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)))
buchlotnik
Сообщение отредактировал buchlotnik - Вторник, 17.02.2015, 13:42
Ответить
Сообщение я, конечно, накрутил, но посмотрите Код
=СУММПРОИЗВ(--(ЕСЛИОШИБКА(ПОИСКПОЗ($B$20:$B$23;$B$20:$B$23;0);0)=СТРОКА(1:4));ЕСЛИ(СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)>=СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)))
массивка смысл формулы - получаем перечень уникальных значений из списка 1 и суммируем их количества по списку 1 или по списку 2 в зависимости от того, где меньше UPD если число строк постоянно меняется так будет лучше:Код
=СУММПРОИЗВ(--(ЕСЛИОШИБКА(ПОИСКПОЗ($B$20:$B$23;$B$20:$B$23;0);0)=СТРОКА(СМЕЩ(A1;0;0;СЧЁТЗ($B$20:$B$23);1)));ЕСЛИ(СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)>=СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($D$19:$D$25;$B$20:$B$23);СЧЁТЕСЛИ($B$20:$B$23;$B$20:$B$23)))
Автор - buchlotnik Дата добавления - 17.02.2015 в 13:20
slAvIk159
Дата: Вторник, 17.02.2015, 13:56 |
Сообщение № 7
Группа: Проверенные
Ранг: Участник
Сообщений: 83
Репутация:
13
±
Замечаний:
0% ±
Excel 2013
а ещё можна через VBA: [vba]Код
Function count_found(diap1, diap2) Dim d1 As Range Dim d2 As Range Dim count1 As Integer Dim count2 As Integer count2 = 0 For Each d1 In diap1 If d1.Value <> "" Then count1 = 0 For Each d2 In diap2 If d1.Value = d2.Value Then count1 = count1 + 1 End If Next If count1 > 0 Then count2 = count2 + 1 End If End If Next count_found = count2 End Function
[/vba]
а ещё можна через VBA: [vba]Код
Function count_found(diap1, diap2) Dim d1 As Range Dim d2 As Range Dim count1 As Integer Dim count2 As Integer count2 = 0 For Each d1 In diap1 If d1.Value <> "" Then count1 = 0 For Each d2 In diap2 If d1.Value = d2.Value Then count1 = count1 + 1 End If Next If count1 > 0 Then count2 = count2 + 1 End If End If Next count_found = count2 End Function
[/vba] slAvIk159
Ответить
Сообщение а ещё можна через VBA: [vba]Код
Function count_found(diap1, diap2) Dim d1 As Range Dim d2 As Range Dim count1 As Integer Dim count2 As Integer count2 = 0 For Each d1 In diap1 If d1.Value <> "" Then count1 = 0 For Each d2 In diap2 If d1.Value = d2.Value Then count1 = count1 + 1 End If Next If count1 > 0 Then count2 = count2 + 1 End If End If Next count_found = count2 End Function
[/vba] Автор - slAvIk159 Дата добавления - 17.02.2015 в 13:56
Mishka1980
Дата: Вторник, 17.02.2015, 14:43 |
Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
slAvIk159 , buchlotnik , спасибо
Ответить
Сообщение slAvIk159 , buchlotnik , спасибоАвтор - Mishka1980 Дата добавления - 17.02.2015 в 14:43
_Boroda_
Дата: Вторник, 17.02.2015, 15:48 |
Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16910
Репутация:
6616
±
Замечаний:
±
2003; 2007; 2010; 2013 RUS
Предлагаю такой вариант: Код
=СУММ(СЧЁТЕСЛИ(B5:B11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11))-ТЕКСТ(СЧЁТЕСЛИ(B5:B11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11))-СЧЁТЕСЛИ(D5:D11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11));"0;\0"))
Не зависит от количества значений в B5:B11 и D5:D11
Предлагаю такой вариант: Код
=СУММ(СЧЁТЕСЛИ(B5:B11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11))-ТЕКСТ(СЧЁТЕСЛИ(B5:B11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11))-СЧЁТЕСЛИ(D5:D11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11));"0;\0"))
Не зависит от количества значений в B5:B11 и D5:D11 _Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: Boroda_Excel@mail.ru Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
Ответить
Сообщение Предлагаю такой вариант: Код
=СУММ(СЧЁТЕСЛИ(B5:B11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11))-ТЕКСТ(СЧЁТЕСЛИ(B5:B11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11))-СЧЁТЕСЛИ(D5:D11;ЕСЛИ(ПОИСКПОЗ(D5:D11;D5:D11;)=СТРОКА(D$1:D$7);D5:D11));"0;\0"))
Не зависит от количества значений в B5:B11 и D5:D11 Автор - _Boroda_ Дата добавления - 17.02.2015 в 15:48
Mishka1980
Дата: Среда, 18.02.2015, 09:36 |
Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
_Boroda_ , спасибо, тоже подходит
Ответить
Сообщение _Boroda_ , спасибо, тоже подходитАвтор - Mishka1980 Дата добавления - 18.02.2015 в 09:36