Знайдіть перший лист у рядку


2

Мені потрібна формула, щоб знайти та повернути першу букву в рядку. Отже, якщо комірка містить:

1234(*&^%$23ADFG54

формула поверне:

A

Редагувати №1:

Зараз я використовую такий UDF:

Public Function FirstLetter(Sin As String) As String
    Dim i As Long, CH As String
    FirstLetter = ""
    For i = 1 To Len(Sin)
        If Mid(Sin, i, 1) Like "[A-Z]" Then
            FirstLetter = Mid(Sin, i, 1)
            Exit Function
        End If
    Next i
End Function

Але мені потрібно не VBA рішення.


SuperUser не є сайтом "Будь ласка, напишіть мені сценарій". Що ви пробували поки що?
LPChip

@LPChip Вибачте ........ дивіться мою редакцію №1
Студент Гері

Відповіді:


7

Це, мабуть, не найелегантніше, але він тримається подалі від Ctrl+ Shift+ Enter.

=MIN(INDEX(ROW(INDIRECT("1:"&LEN(A1)))+((CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))<65)+(CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))>90))*1E+99,,))

Просто Enterнормально. Запишіть за необхідності. Зауважте, що це UPPERробить нечутливим до регістру.

Як це працює

  1. Є ASCII - символів 65 і Z 90. Ці номери можуть бути отримані з одного рядка символу з використанням коду функції .
  2. Потрібно пролазити через рядок, щоб перевірити характер за символом. Функція MID може вилучити один символ зсередини рядка, але йому потрібна початкова точка, яка збільшуватиметься на 1, поки кожен символ у рядку не буде вивчений.
  3. Як правило, це робиться за допомогою функції ROW, як ROW(1:50)приріст через числа від 1 до 50, якщо ми знали, що рядок має 50 символів. Немає гарантії такої довжини рядка, тому нам доведеться побудувати посилання на рядок за допомогою 1 і функції LEN, а потім перетворити цю об'єднану рядок у відповідну адресу діапазону комірок робочого аркуша за допомогою функції INDIRECT .
  4. Функція UPPER була використана в рядку, так що нам залишається лише шукати великі коди символів ASCII. Якщо його не було, критерії потрібно було б подвоїти, щоб також порівняти з кодами ASCII 97 (наприклад, a ) та 122 (наприклад, z ).
  5. Функція INDEX використовується у своїй формі масиву, щоб забезпечити ітерацію повзання по символу рядка за символом. Будь-який символ, вилучений з-за меж AZ, призводить до того, що число, повернене ROW(1:<length-of-string>)в цій позиції, множиться на 1E + 99 (дуже велика кількість, а не мінімум нічого на робочому аркуші). Якщо вона знаходиться в межах AZ, позиція або ROW(1:<length-of-string>)залишається тим самим значенням.
  6. Таким чином INDEX, повертається масив чисел (ака позицій ), деякі з яких знаходяться в діапазоні 1E + 99. Функція MIN займає найменший з них, який представляє перший алфавітний символ у рядку.
  7. За допомогою цієї формули в першій комірці заповніть, як потрібно, щоб оцінити всі рядки в стовпці А. Легко-гороховий.

Можливо, варто зазначити, що використання ROWподібного для надання додаткового ряду чисел для обробки масиву зазвичай зменшується, фіксуючи фактичні числа як абсолютні, як, ROW($1:$50)таким чином, вони не змінюються при заповненні. Тут це зайве, оскільки текст "1:" є текстом і не зміниться, коли скопійовано / заповнено в інше місце.


1
Чи можете ви додати до своєї відповіді пару речень, щоб описати суть того, як працює формула?
fixer1234

Дякую! Це дає позицію, але це досить добре!
Студент Гері

Дивовижний і швидкий Excel-fu. +1
до

3

Ще один спосіб визначення позиції

Column B

=MIN(FIND({"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"},UPPER(A1)&"ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

Це повертає позицію першої знайденої літери. Повертає Len (A1) + 1 у випадку, якщо жодна літера не знайдена.

Перший аргумент Find - це масив усіх літер, які слід знайти в рядку. Другий аргумент - це фактичний рядок у верхньому регістрі разом з усіма літерами в кінці, так що функція find завжди повертає значення для всіх літер.

Column C

=IF(LEN(A1) >= B1, RIGHT(LEFT(A1, B1),1), "")

Це повертає лист, знайдений у рядку. Якщо рядок не має літери, він повернеться порожнім.

Довідка: https://exceljet.net/formula/split-text-and-numbers

Посилання пропонує рішення для чисел. Вищеописана формула перемикається на літери.

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