Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Gutstadt от 05.04.2021, 16:34

Название: Сравнение текстовых данных, чувствительное к регистру
Отправлено: Gutstadt от 05.04.2021, 16:34
Добрый день.
Вопрос вроде бы простой -- как сравнивать текстовые данные на ">", "<" чтобы, например, строчная "А" и прописная "а" не считались одинаковыми. Ну чтобы "Аа22" и "АА345" уже  по второму символу разошлись, "как в море корабли". Понятно, что речь не идет о функции СОВПАД.
Название: Re: Сравнение текстовых данных, чувствительное к регистру
Отправлено: Serge 007 от 05.04.2021, 17:21
Здравствуйте

В Excel есть функция НАЙТИ()
Эта функция как раз различает прописные и строчные буквы

Так же можно использовать функцию КОДСИМВ()
У одинаковых букв разные коды в разных регистрах

Например код символа "А" - 192, а  код символа "а" - 224


PS Кстати, функцией СОВПАД() тоже можно воспользоваться, как и побуквенному сравнению с помощью функции ПСТР()
Название: Re: Сравнение текстовых данных, чувствительное к регистру
Отправлено: Gutstadt от 05.04.2021, 19:38
Добрый вечер, Сергей.
Из Ваших слов я понял, что встроенной (собственной) функции сравнения (а-ля "<" или ">") в Excel нет. Значит придется писать свою UDF. А функцию EXACT  никак не смогу приспособить: она же говорит лишь "=" или "not =", но никак не "<" или ">". Пороюсь в Инете, может у Пирсона что-то встретится. Но быстрее написать своё. Спасибо, что помогли однозначно определиться с моей проблемкой.
Название: Re: Сравнение текстовых данных, чувствительное к регистру
Отправлено: Serge 007 от 06.04.2021, 09:04
Цитата: Gutstadt от 05.04.2021, 19:38
...встроенной (собственной) функции сравнения (а-ля "<" или ">") в Excel нет.
Такая функция в Excel есть. Однако она не учитывает регистры

А Вашу задачу можно решить так:
В А1 значение "Аа222", в А2 - "АА245". Формула: =КОДСИМВ(ПСТР(A1;СТОЛБЕЦ(A:E);1))=КОДСИМВ(ПСТР(A2;СТОЛБЕЦ(A:E);1)) вернет массив {ИСТИНА;ЛОЖЬ;ИСТИНА;ЛОЖЬ;ЛОЖЬ}, поскольку только 1-й ("А") и 3-й ("2") символы сравниваемых значений одинаковы

Так же можно сравнивать текст на ">" "<" (больше/меньше), например =КОДСИМВ(ПСТР(A1;СТОЛБЕЦ(A:E);1))>КОДСИМВ(ПСТР(A2;СТОЛБЕЦ(A:E);1))вернет {ЛОЖЬ;ИСТИНА;ЛОЖЬ;ЛОЖЬ;ЛОЖЬ} поскольку код символа "а" (224) больше чем код символа "А" (192), а коды остальных символов значения "Аа222" меньше или равны кодам символа значения "АА245"
Название: Re: Сравнение текстовых данных, чувствительное к регистру
Отправлено: Gutstadt от 06.04.2021, 17:14
Добрый вечер, Сергей.
Все Ваши предложения интересны и, не побоюсь этого слова, назидательны. Но раз уж решил уйти в VBA, то попробую набросать функцию  сравнения в отдельном модуле. И там поставлю Option Compare на Binary. Тогда оба операнда сравнения не придется выравнивать по длине. Ну это конечно если все пойдет, как хочется мне. И как крайний случай, возьму у Пирсона его функцию QSortCompare. Нашел-таки я у него такое. Светлая ему память! И кстати, у него там я увидел чисто Excel-ную функцию StrComp. Вот не сумел я в Googl`e корректно сформулировать запрос, поэтому он не смог вывести меня на StrComp. Правильно говорил Шекли: "Чтобы правильно задать вопрос, надо знать половину ответа на него". Но диалог с Вами подвел меня к меня к цели. Еще раз спасибо.