Поиск значения в массиве

Автор лена89, 23 сентября 2017, 21:03

0 Пользователи и 1 гость просматривают эту тему.

лена89

Добрый вечер. Помогите, пожалуйста, решить задачку.  ??? ???
Есть два массива.

Надо проверить весь второй столбец на наличие в первом столбце и если номер нашелся. то против фамилии ставится да. Фамилии с номерами в первом столбце могут повторяться, а цифры во втором столбце уникальны.

Заранее благодарю. Только, если можно, без макросов. Пока в них не понимаю ничего. Может формула есть.

rami

Если в первом столбце фамилия и число разделены пробелом, попробуйте такую формулу:
=IF(COUNTIF($C$1:$C$9;TRIM(SUBSTITUTE($A1;SPLIT($A1);"")));"да";"нет")

лена89

Спасибо за ответ. Но функцию SPLIT почему-то не распознает мой LibreOffice

лена89

#3
Спасибо всем, кто, может-быть, озадачился моей проблемой. Но, поискав на форуме ( а кто ищет, тот всегда найдет), я решила проблему несколько по-другому, и этот вариант даже лучше, чем я хотела. Вот такая функция мне помогла.  
=SUMPRODUCT(NOT(ISERR(FIND(текст;диапазон)))).

В результате, ищется значение в  массиве, и суммируется , сколько раз оно встречается в массиве) вместо "да", "нет". Это даже лучше. Потому что, если бы просто писать "да" и "нет", то потом бы я озадачилась вопросом, сколько раз встречается в массиве "Федорова" под определенным номером. В общем, не знаю, как объяснила, но всем спасибо)

rami

Цитата: лена89 от 24 сентября 2017, 03:25Но функцию SPLIT почему-то не распознает мой LibreOffice
Наверно слишком старый LibreOffice, ниже пятой ветки. Я проверял на LibreOffice 5.0.6, там есть SPLIT.

Цитата: лена89 от 24 сентября 2017, 04:42Но, поискав на форуме ( а кто ищет, тот всегда найдет), я решила проблему несколько по-другому, и этот вариант даже лучше, чем я хотела. Вот такая функция мне помогла.  
=SUMPRODUCT(NOT(ISERR(FIND(текст;диапазон)))).

В результате, ищется значение в  массиве, и суммируется , сколько раз оно встречается в массиве) вместо "да", "нет". Это даже лучше. Потому что, если бы просто писать "да" и "нет", то потом бы я озадачилась вопросом, сколько раз встречается в массиве "Федорова" под определенным номером.
Хорошенько проверяйте даёт ли эта формула нужный вам результат. Для "Петрова 171" ответом будет не только "171", но и "1" и если есть, то и "17" и "71" и "7"

economist

лена89 - обновитесь и включите в LibreOffice 5 русские имена функций (как в Excel). Количество инфы по ним в Интернете просто огромно и позволит находить ответы в 10 раз быстрее. 

И, кстати, что это???:

Федорова 25 - да - 171
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

лена89

Цитата: rami от 24 сентября 2017, 05:49Наверно слишком старый LibreOffice, ниже пятой ветки. Я проверял на LibreOffice 5.0.6, там есть SPLIT.

Обновила до 5.1 и все равно подчеркивает эту функцию. И Вы оказались правы. Считает именно всё, что включается в другие числа. 14, 1, 141, - всё суммирует. Печалька.

JohnSUN

@rami, посмотри, пожалуйста, у тебя этот SPLIT в пользовательских функциях случайно не затесался? Если он там, процитируй, пожалуйста.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Да, это мой ляп, давно поставил функцию в мастер функций и забыл. Эта функция только у меня на одном компе.

rami

Тогда пробуйте такую формулу:=IF(COUNTIF($C$1:$C$9;TRIM(SUBSTITUTE($A1;LEFT($A1;SEARCH(" ";$A1));"")));"да";"нет")

JohnSUN

Дык, это... А процитировать?
Тут давеча (прошлым летом) hubert lambert предложил расширениеpystring.oxt
Доступ к строковым методам python из Calc. В том числе и к SPLIT. Но там вызов посложнее будет
=PYSTRING("split";my_string;sep;max)
Всё никак не соберусь бэйсиковую обёртку накрутить, чтобы вызывать функции так, как у тебя в формуле записано
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне


economist

pystring.oxt - решение всех проблем со строками. Спасибо за наводку, JohnSUN
Можно прикрутить еще и перекодировку, и будет вообще прекрасно.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

лена89

Цитата: rami от 26 сентября 2017, 13:05
Тогда пробуйте такую формулу:=IF(COUNTIF($C$1:$C$9;TRIM(SUBSTITUTE($A1;LEFT($A1;SEARCH(" ";$A1));"")));"да";"нет")

Это работает. Но, мне нужна проверка по первому массиву. То есть, мне надо взять все  номера из столбца С и проверить на их наличие в первом столбце А. А тут формула наоборот считает.Берет номер из столбца А и проверяет по массиву С. ) И в поставленной задаче ответ всегда будет ДА. А мне нужно знать, грубо говоря, каких номеров из первого столбца нет в первом.

rami

Цитата: лена89 от 26 сентября 2017, 12:28Это работает. Но, мне нужна проверка по первому массиву. То есть, мне надо взять все  номера из столбца С и проверить на их наличие в первом столбце А. А тут формула наоборот считает.Берет номер из столбца А и проверяет по массиву С. ) И в поставленной задаче ответ всегда будет ДА.
Из выше приведённого примера видно, что номера 8 и 20 из столбца C отсутствуют в столбце A что с этим делать?
Сформулируйте точнее все условия.


Цитата: лена89 от 26 сентября 2017, 12:28А мне нужно знать, грубо говоря, каких номеров из первого столбца нет в первом.
Из первого столбца нет в первом тех, которые есть в первом, а не в первом. (пошёл мозг перезагружать)