2015-12-08 4 views
0

Добрый день всем,EXCEL VBA: извлечение последовательности 8 цифр из строки в ячейке

Я пытаюсь найти решение для смарт извлечения 8 цифр из клеток (уникальный идентификатор). Проблема здесь возникает, что это может выглядеть следующим образом:

112, 65478411, sale 
746, id65478411, sale 12.50 
999, 65478411 
999, id65478411 

То большинстве случаев, и, наверное, все сказано, поэтому я в основном должны найти 8 цифр в ячейке и извлекать их в другую ячейку. У кого-нибудь есть идеи? Я, хотя и устраняю первый характер, затем проверяю, начинается ли ячейка с идентификатора, устраните ее дальше, но я понял, что это не разумный способ.

Благодарим вас за понимание.

+0

'instr' для«»затем сделать' left' на 8 оттуда. – findwindow

+0

Всегда ли это четвертое число, т. Е. Всегда есть трехзначное число с запятой спереди? –

+0

@ScottCraner может быть 3-значное число с запятой или без запятой, зависит от людей, заполняющих таблицу – user3812753

ответ

1

Вы также можете написать UDF для выполнения этой задачи, например, ниже

Public Function GetMy8Digits(cell As Range) 
Dim s As String 
Dim i As Integer 
Dim answer 
Dim counter As Integer 

'get cell value 
s = cell.Value 

'set the counter 
counter = 0 
'loop through the entire string 
For i = 1 To Len(s) 
    'check to see if the character is a numeric one 
    If IsNumeric(Mid(s, i, 1)) = True Then 
     'add it to the answer 
     answer = answer + Mid(s, i, 1) 
     counter = counter + 1 
     'check to see if we have reached 8 digits 
     If counter = 8 Then 
      GetMy8Digits = answer 
      Exit Function 
     End If 
    Else 
    'was not numeric so reset counter and answer 
    counter = 0 
    answer = "" 
    End If 
Next i 
End Function 
+0

Я не уверен, где был один пост, но я использовал эту функцию, которая называлась «extracteight» .... Спасибо, хотя! – user3812753

+0

@ user3812753 Он был «скрыт» от своего «владельца». 9,982 больше rep, и вы сможете увидеть его еще :) – pnuts

+1

@ user3812753 хорошо, что вы используете другое решение, но я хочу указать, если моя память служит мне правильной, что в другом решении было проверено 8 символов для IsNumeric, так что 6547.8411 вернет true. Причина, по которой я сделал такой подход, заключалась в том, что он потерпит неудачу, если наступит период. поэтому 6547.8411 не будет возвращаться в виде 8 цифр. - Я знаю, что 6547.8411 - 9 цифр, но я хотел показать полный номер, чтобы облегчить любое возвращение, заявив, что число не было правильным. Надеюсь, что это имеет смысл. – Sorceri

5

Попробуйте эту формулу:

=--TEXT(LOOKUP(10^8,MID(SUBSTITUTE(A1," ","x"),ROW(INDIRECT("1:"&LEN(A1)-7)),8)+0),"00000000") 

Это вернет 8 цифр в строке.

Чтобы вернуть только текст затем:

=TEXT(LOOKUP(10^8,MID(SUBSTITUTE(A1," ","x"),ROW(INDIRECT("1:"&LEN(A1)-7)),8)+0),"00000000") 
+0

В качестве идентификационного номера я сомневаюсь, что для математических операций (т. е. должен использоваться текстовый формат). – pnuts

+0

@pnuts, вы, вероятно, правы. –

+0

Я думал больше о ТЕКСТЕ (...., «00000000») для сохранения символов (но возвращается к числовым!) – pnuts

0

Вот альтернатива:

=RIGHT(TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",LEN(A1))),LEN(A4),LEN(A1))),8)

Заменить все запятые пробелами повторил длину строки,

Затем возьмите средняя точка, начиная с длины исходной строки для длины строки (т.е. второе слово в новой строке)

Подрезать пространства

принять право 8 символов, чтобы отсечь любые дополнительные символы (например, идентификатор)