Знайдіть текстовий рядок, що не відрізняється від регістру, в межах діапазону комірок


3

У мене є проблема, яку потрібно вирішити в Excel, і я не зовсім впевнений, як це зробити. Я здійснив кілька пошукових запитів в Інтернеті, і не знайшов жодної формули, яка здалася б корисною. Ось ситуація (трохи спрощена для цілей цього питання):

У мене є дані у стовпцях AE. Мені потрібно зіставити дані в клітинках A і B, з даними в CE, і повернути TRUE або FALSE до стовпця F.

Поверніть TRUE, якщо:
- рядок у A знайдений у будь-якому рядку CE.
АБО
- Рядок у B знаходиться в межах будь-якого рядка в СЕ.

В іншому випадку поверніться ЛІЖНЕ.

Рядки повинні відповідати цілим або частковим рядкам у межах діапазону, але функція відповідності повинна бути нечутливою до регістру. Я зробив скріншот прикладу аркуша для довідки.

введіть тут опис зображення

Я впевнений, що мені потрібно буде використовувати IF або на найбільш віддаленому шарі формули, ймовірно, після цього АБО. Тоді, для аргументів АБО, я сподіваюся, що буде використано IFERROR. Але те, що я втрачаю, - це функція, яку я міг би найбільш ефективно використовувати для обробки пошуку в текстових рядках.

Я думаю, що VLOOKUP дуже обмежений. Це може бути працездатним робити цілий рядок проти порівняння цілих рядків, але я впевнений, що він не поверне точних результатів для часткових рядків. ЗНАЙДЕННЯ та ПОШУК видаються обмеженими лише пошуками з однією ціллю та також залежать від регістру. Я припускаю, що я міг би використовувати ВНУТРІШНІЙ або НИЗЬКІ, щоб змусити нечутливість випадків до пошуку, але мені все одно потрібно щось, що може зробити точне часткове узгодження та шукати заданий діапазон комірок.

Чи є якась функція, або комбінація функцій, яка могла б працювати тут?

В ідеалі я хочу це зробити за допомогою прямої формули Excel. Я зовсім не знайомий з VBScript або подібними інструментами, і не маю часу вивчити його для цього проекту.

Відповіді:


2

Це моє брудне рішення, я не впевнений, що це найкраще.

Спробуйте додати тимчасовий стовпець, щоб потім приховати його. І спробуйте перетворити всі дані в малі або великі регістри, а потім слідуйте логіці, яку ви вже зробили.

Просто так:

A2: ABcdeF
B2: =lower(A2) --> abcdef
C2: aBc
D2: =lower(C2) --> abc
E2: =find(D2, B2) --> found
F2: =find('poi', B2) --> not found

Функція VLOOKUP має необов'язковий параметр: range_lookup

Логічне значення (лише TRUE або FALSE), яке вказує, чи потрібно VLOOKUP знаходити точну або приблизну відповідність значенню lookup_value.

http://spreadsheets.about.com/od/excelfunctions/ss/vlookup_2.htm


Я біг ВВР з ІСТИНА і НЕПРАВДА значеннями до, і знайшов «наближене збіг» , щоб бути шлях геть. Я думаю, що вони використовують деяке дійсно ліберальне значення терміна "наближений".
— Іссі

Це моя хитрість, будь ласка, спробуйте, і дайте мені знати. Будь ласка, прочитайте мою іншу відповідь у цій темі
— Truong Ha

0

Спробуйте поєднати текст цих комірок, це моя хитрість:

A1: a
A2: b
A3: c
B1: ">" & A1 & "<" --> >a<
B2: = B1 & ">" & A2 & "<" --> >a<>b<
B3: = B2 & "<" & A3 & "<" --> >a<>b<>c<

... ви можете автоматизувати за допомогою excel, просто повірте, що це займає менше 1 хв :-)

тому кінцева комірка повинна поєднувати весь текст з усіх комірок

Тоді просто виконайте звичайний пошук, але переконайтеся, що ви включили ">" та "<" до своїх критеріїв, щось подібне

=find(">" & "abc" & "<", $B$3)

і знову це моя брудна хитрість!


Цікава ідея. Як же я "автоматизую" це за допомогою Excel? У мене майже 900 рядків.
— Іссі

На жаль, просто перетягніть B3 вниз, excel автоматично скопіює формулу та оновить інші комірки. Або ви навіть можете навести курсор миші на правий нижній кут клітини B3 і двічі клацнути по ньому (ви повинні побачити курсор миші, щоб повернутись до хреста +)
— Truong Ha

0

В ідеалі я хочу це зробити за допомогою прямої формули Excel. Я зовсім не знайомий з VBScript або подібними інструментами, і не маю часу вивчити його для цього проекту.

Метод VBA Range.Find існує лише для таких завдань. Прикро було б не використовувати його. :)

Синтаксис

Діапазон. Назад ( що після, LookIn, LookAt , SearchOrder, SearchDirection, MatchCase , MatchByte, SearchFormat)

Нам потрібно лише 3 параметри для вашого завдання. Решту залиште

  • Діапазон : діапазон, в якому потрібно шукати
  • Що: дані для пошуку
  • LookAt: може бути один xlWhole (повний матч) або xlPart (частковий збіг)
  • MatchCase: Вірно, щоб зробити регістр пошуку чутливим. Неправдивий для випадку нечутливого пошуку

Короткий приклад виглядав би так

 Set result = Columns(C:E).find(what:=[A1], LookAt:=xlPart, MatchCase:=false)

Цей код поважає ваші додаткові умови, як-от

  • Перевірте дані зі стовпців A та стовпця B. Якщо одна з них відповідає, поверніть true
  • Поверніться правдою навіть при часткових матчах
  • Ігноруйте великі або малі регістри
  • Повернути справжнє або хибне у стовпці F
Sub SearchMatches()    
For i = 2 To 5    
    On Error Resume Next
    Set checkColA = Columns("C:E").Find(Cells(i, 1), , , xlPart, , , False)
    Set checkColB = Columns("C:E").Find(Cells(i, 2), , , xlPart, , , False)
    On Error GoTo 0        
    If checkColA Is Nothing And checkColB Is Nothing Then
        Cells(i, 6) = False
    Else
        Cells(i, 6) = True
    End If        
Next i    
End Sub

введіть тут опис зображення


Я знаю, що цьому питанню 3 роки, але, можливо, інші знайдуть це корисним
— nixda
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.