Формула Excel требует получить последний номер от конкретного символа - PullRequest
1 голос
/ 11 октября 2019

Я хочу получить только число после последнего подчеркивания (_). Как это сделать, не разделяя строку с запятой в качестве разделителя?

  • PSN_IDA8_776 = нужно получить 776
  • NXXT_FAEMNE_7905 = нужно получить 7905
  • PCBA_SAN_LUIS_441B = Требуется получить 441B
  • MCOM_LUX_415_U = необходимо получить 415U

Следующее работает для PSN_IDA8_776

=RIGHT(I9,FIND("_",I9)-1) 

но та же формула не работает правильно для ABCA_SEA_3_SFA_809

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Попробуйте

=MID(A1,FIND("|",SUBSTITUTE(A1,"_","|",LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))))+1,LEN(A1))

Разбить на отдельные формулы:
C1: =LEN(A1) - найти длину исходной строки.
D1: =LEN(SUBSTITUTE(A1,"_","")) найти длину строкис удаленным подчеркиванием.
E1: =C1-D1 вернет количество подчеркиваний в строке.
F1: =SUBSTITUTE(A1,"_","|",E1) - замените последнее подчеркивание на I-полосу.
G1: =MID(A1,FIND("|",F1,E1)+1,LEN(A1))- вытянуть символы после последнего подчеркивания.

или для решения VBA:

Public Function After_Underscore(Target As Range, Optional Delimiter As String = "_") As Variant

    Dim Last As Long

    Last = InStrRev(Target, Delimiter)
    If Last > 0 Then
        After_Underscore = Mid(Target, Last + 1, Len(Target))
    Else
        After_Underscore = CVErr(xlErrNA) 'If no underscore return an #N/A error.
    End If

End Function
1 голос
/ 11 октября 2019

Предположим, ваши данные помещены в A1: A6

В формуле B1 скопировано:

=SUBSTITUTE(MID(A1,LOOKUP(9^9,FIND("_"&{1,2,3,4,5,6,7,8,9,0},A1))+1,99),"_","")

Редактировать:

Согласно Терри У, отметим, что приведенная выше формулапотерпит неудачу в строке вроде: TEST_30_20_10_AB

Вот данные тестирования A1:A7, такие же, как упомянутое сообщение Терри В.

PSN_IDA8_776       
NXXT_FAEMNE_7905
PCBA_SAN_LUIS_441B
MCOM_LUX_415_U
ABCA_SEA_3_SFA_809
TEST_30_20_10_AB
TEST_aa_20_bb_10

Моя пересмотренная формула в B1, скопированная:

=SUBSTITUTE(MID(A1,AGGREGATE(14,6,FIND("_"&{1,2,3,4,5,6,7,8,9,0},A1),1)+1,99),"_","")

Результат формулы:

B1: 776       
B2: 7905
B3: 441B
B4: 415U
B5: 809
B6: 10AB
B7: 10
0 голосов
/ 13 октября 2019

Следующее решение требует использования TEXTJOIN , который доступен только в Excel 365 и более поздних версиях.

=IF(RIGHT(TEXTJOIN("",0,--ISNUMBER(FILTERXML("<t><s>"&SUBSTITUTE(A1,"_","</s><s>")&"</s></t>","t/s"))),2)="10",SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(A1,"_",REPT(" ",100),SUMPRODUCT(--(MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),1)="_"))-1),100)),"_",""),MID(A1,MAX(IFERROR(FIND("_",A1,ROW($A$1:INDEX($A:$A,LEN(A1)))),0))+1,LEN(A1)))

заменяет A1 в соответствии с вашим случаем. Это формула массива , поэтому вы ДОЛЖНЫ нажать Ctrl + Shift + Enter на клавиатуре после ввода ее в строке формул.

Основная логикачтобы выяснить, является ли последняя две подстроки (сопровождаемые подчеркиванием _) комбинацией numeric + text. Если это так, верните комбинацию обеих подстрок, в противном случае просто верните последнюю подстроку.

Вот примеры строк, которые я тестировал:

| Strings            | Results |
|--------------------|---------|
| PSN_IDA8_776       | 776     |
| NXXT_FAEMNE_7905   | 7905    |
| PCBA_SAN_LUIS_441B | 441B    |
| MCOM_LUX_415_U     | 415U    |
| ABCA_SEA_3_SFA_809 | 809     |
| TEST_30_20_10_AB   | 10AB    |
| TEST_aa_20_bb_10   | 10      |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...