2016-03-05 2 views
2

Я пытаюсь выделить ячейки, содержащие буквенные символьные данные, из числовых. Я был частично успешным, используя istext() & isnumber(). Но когда появляются буквенно-цифровые символы, эта логика терпит неудачу.Обнаружение «чистых» алфавитов в excel

Мое намерение состоит в обнаружении ячеек, имеющих только алфавиты. Ячейки, содержащие числовой или буквенно-цифровой символ, должны запускаться как ложные.

Заранее спасибо.

ответ

2

=SUMPRODUCT(0+ISNUMBER(0+MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1)))=0

Вы также можете использовать, с CSE (CTRL + SHIFT + ENTER), чуть короче:

=COUNT(0+MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1))=0

строительство передается в MID «s start_num параметр здесь, т.е. :

ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1)))

является non-volatile (на самом деле, технически изменчивыми книги открыт только) - и поэтому предпочтительнее - альтернатива, например:

ROW(INDIRECT("1:"&LEN(A1)))

С уважением

+0

.......... хорошая формула ........... –

+0

@ Gary'sStudent Cheers! :-) –

+0

@XORLX Название говорит «чистые алфавиты», но разве эта формула не будет рассматривать символы, подобные _- *^и т. Д. Как действительные? Похоже, что нет возможности ограничить [a-zA-z] формулой без использования 'CODE()'? –

2

Рассмотрим эту маленькую UDF():

Public Function IsLetters(s As String) As Boolean 
    Dim i As Long 

    IsLetters = False 
    For i = 1 To Len(s) 
     If Not Mid(s, i, 1) Like "[a-zA-Z]" Then Exit Function 
    Next i 
    IsLetters = True 
End Function 

enter image description here

Примечание:

Космический персонаж будет также давать FALSE

1

Вы можете:

IsAlpha = len(s) > 0 and not s like "*[!A-Za-z]*" 
0

Если вы хотите избежать. макросов и хотите использовать его для проверки, или в правиле условного форматирования для маркировки недопустимых ячеек, тогда формула non-vba приятно иметь.

Единственный способ, который я нашел до сих пор сделать это без грязных CODE() функций и значений ASCII является использование формулы массива (нажмите CTRL + SHIFT + ENTER) с SEARCH() так:

IsPureAlpha :

=MIN(--(ISNUMBER(SEARCH(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz"))))=1 

Объяснение:

  • Разделить строку в ячейке A1 в индивид l с использованием функции MID.
  • SEARCH() (без учета регистра) для каждого символа в допустимом диапазоне [a-zA-Z].
  • Преобразуйте массив результатов поиска в boolean, а затем в двоичный код, используя двойной унарный минус --.
  • Если присутствует какой-либо запрещенный символ, массив результатов поиска будет иметь значение 0. В противном случае для допустимой строки PureAlpha весь массив будет равен 1 с. MIN() обнаружит любое 0 в массиве.
Смежные вопросы