Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

19 Октябрь 2018, 16:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Скопировать значение по совпадению наименований товаров  (Прочитано 1541 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 650


« Стартовое сообщение: 1 Август 2018, 16:54 »

Компонент: Calc
Версия продукта:
Сборка:
ОС:

Товарищи, мне необходимо получить следующий результат:
есть 4 столбца; В 1м и 3м наименования товаров. Мне необходимо каждую
строку третьего столбца сравнить со всеми строками первого, найти
совпадение и скопировать значение из 2-го в 4-й. Такое вообще
возможно? Может я не правильно описал... Понятно ли что я ищу?<br/><br/>--<br/>Подпись: Lyolik<br/>Эл. почта: Lyolibolikne@gmail.com
« Последнее редактирование: 1 Август 2018, 18:29 от JohnSUN » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 593


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 1 Август 2018, 17:09 »

Добро пожаловать на форум!
Да, Lyolik, это не очень сложно. Только уточни, пожалуйста, ты каким Calc'ом пользуешься?
Для Calc'а из LibreOffice формула будет покороче, для Calc'а из OpenOffice - длиннее (хоть и делают эти формулы одно и то же)
« Последнее редактирование: 1 Август 2018, 18:29 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
LyoliBolik
Участник
**
Offline Offline

Сообщений: 5


« Ответ #2: 1 Август 2018, 17:57 »

Я пользуюсь LibreOffice на Linux Ubuntu Mate
« Последнее редактирование: 1 Август 2018, 18:29 от JohnSUN » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 593


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 1 Август 2018, 18:43 »

Отлично!
Тогда решение может быть таким:
Код:
=IFERROR(VLOOKUP(C2;A:B;2;0);"не найден")
=ЕСЛИОШИБКА(ВПР(C2;A:B;2;0);"не найден")
или
Код:
=IFERROR(INDEX(B:B;MATCH(C2;A:A;0);1);"не найден")
=ЕСЛИОШИБКА(ИНДЕКС(B:B;ПОИСКПОЗ(C2;A:A;0);1);"не найден")
Это сработает, если в первом столбце названия товаров уникальны, не повторяются. Любой из вариантов будет находить первый товар и выводить значение для него.
А вот если - может ведь и такое случиться - товары в первых двух колонках дублируются, тогда лучше использовать формулу
Код:
=SUMIF(A:A;C2;B:B)
=СУММЕСЛИ(A:A;C2;B:B)
Любую из этих формул нужно вписать в ячейку D2 и растянуть до конца данных в третьей колонке
« Последнее редактирование: 1 Август 2018, 20:44 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
LyoliBolik
Участник
**
Offline Offline

Сообщений: 5


« Ответ #4: 11 Август 2018, 13:11 »

Благодарю Вас, сэр! Сейчас буду тестировать) Отпишусь о результате)
Записан
LyoliBolik
Участник
**
Offline Offline

Сообщений: 5


« Ответ #5: 12 Август 2018, 12:33 »

Доброго времени...
Формула работает. Благодарен!
Но я столкнулся с тем что в ячейках пишет не найдено, однако ctrl+F находит соответствия. Т.е. В Ячейке С2 есть значение, которое соответствует значению в массиве А:А, но при этом может отличаться на 1-2 символа (запятая или пробел в конце выражения в массиве). В таком случае мне формула пишет "не найдено". Возможно ли как-то повлиять на это? Что бы сравнение шло не на 100% на например соответствие 12-15 символов? Потому что, опять же, я копирую полностью содержание ячейки С2 вставляю в поиск и сразу нахожу строку в массиве из первого столбца.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 593


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #6: 12 Август 2018, 12:47 »

Да, Lyolik, это тоже можно сделать.
Какую из формул решил использовать?
Я, например, вот только что изменил формулу с SUMIF:
Код:
=SUMIF(A:A;".*"&C2&".*";B:B)
Зашёл в Tools - Options - LibreOffice Calc - Calculate (Сервис - Параметры - Calc - Вычисления) и отметил "Разрешить регулярные выражения в формулах"
Считает...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
LyoliBolik
Участник
**
Offline Offline

Сообщений: 5


« Ответ #7: 12 Август 2018, 13:18 »

У меня формулы на русском.
Изначально подошла эта
=ЕСЛИОШИБКА(ИНДЕКС(B:B;ПОИСКПОЗ(C2;A:A;0);1);"не найден")
и всё считалось.
Так, это Вы заменили С2 на ".*"&C2&".*"? И в настройках регулярные выражения позволили?
Сейчас попробую.
Записан
LyoliBolik
Участник
**
Offline Offline

Сообщений: 5


« Ответ #8: 12 Август 2018, 13:36 »

не дало результата, к сожалению(((
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 593


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #9: 12 Август 2018, 17:08 »

В каком смысле? Нашло, но не то? Не нашло вообще?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 353


« Ответ #10: 20 Август 2018, 10:34 »

не дало результата, к сожалению(((

Гадать можно вечно. Файл покажите, пожалуйста.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 593


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #11: 20 Август 2018, 11:08 »

Не нужен файл, и так понятно: в текстах ячеек встречаются специальные символы - звёздочки, точки, скобки.
Решение простое. Их даже два:
Предварительно подготовить списки в колонках A и C - чтобы не попадались эти самые
1-2 символа (запятая или пробел в конце выражения в массиве).
Другими словами, обеспечить полное совпадение текстов
Второе решение - более длинная формула:
Код:
=ЕСЛИОШИБКА(ИНДЕКС($B$2:$B$3000;ПОИСКПОЗ(СЖПРОБЕЛЫ(C2);ЛЕВ(СЖПРОБЕЛЫ($A$2:$A$3000);ДЛСТР(СЖПРОБЕЛЫ(C2)));0);1);"не найден")
=IFERROR(INDEX($B$2:$B$3000;MATCH(TRIM(C2);LEFT(TRIM($A$2:$A$3000);LEN(TRIM(C2)));0);1);"не найден")
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 2 464



« Ответ #12: 20 Август 2018, 12:39 »

Второе решение - более длинная формула:
Шаман однако

ps: для меня такие штуки будут волшебством еще долго
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 593


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #13: 20 Август 2018, 13:10 »

Ай, брось - какое там "волшебство"? Обычное камлание...
Лёлик написал, что у него может быть
...пробел в конце выражения...
С пробелами в конце (а заодно и в начале) боремся обычным TRIM() - "обжимаем" с его помощью и строку, которую будем искать, и все строки, в которых будем искать
Код:
...TRIM(C2)...
...TRIM(A:A)...
Комбинация INDEX(<кого выводить>;MATCH(<где искать>;<кого искать>;0))  настоятельно рекомендуется вместо VLOOKUP - записывается не намного сложнее, а работает не хуже. Получаем
Код:
...INDEX(B:B;MATCH(TRIM(C2);LEFT(TRIM(A:A);LEN(TRIM(C2)));0);1)...
(единичка в качестве номера колонки - которая последний параметр в INDEX - здесь не обязательна, но пусть будет)
Что случится, если нужная строка не будет найдена? Получим #N/A. Не аккуратненько как-то... Значит всю конструкцию оборачиваем в
IFERROR(<вся наша формула>;"не найден")
Запускаем, проверяем - тормозит... Ну, конено, тормозит - отыскать строчку в миллионе ячеек задача не из простых. Значит, вместо всей колонки A:A или B:B возьмём не такой большой диапазон - что-нибудь достаточно большое, чтобы точно захватить все нужные ячейки. Ну, две-три тысячи ячеек. Значит, вместо A:A будем писать A1:A3000. А зачем нам A1? Там же просто заголовок колонки. Измменяем на A2. Ну и чтобы адреса не сползали, когда будем формулу растягивать, меняем адреса на абсолютные - $A$2:$A$3000 и $B$2:$B$3000.
Теперь осталось только стукнуть в бубен и камлание закончено
Код:
=IFERROR(INDEX($B$2:$B$3000;MATCH(TRIM(C2);LEFT(TRIM($A$2:$A$3000);LEN(TRIM(C2)));0);1);"не найден")
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!