Encontre a primeira cadeia na cadeia de texto que é apenas números. Apenas fórmulas

1

É possível encontrar a primeira string dentro de uma string que contém apenas números / dígitos? Eu tenho alguns milhares de endereços para processar e alguns deles têm números de apartamentos. Preciso encontrar o número do endereço e extraí-lo, mas o número do apartamento é extraído.

Eu consegui extrair a primeira string numérica com essa fórmula, OneToZero é {1,2,3,4,5,6,7,8,9,0}

=MID($A1,MIN(IFERROR(FIND(OneToZero,$A1),"")),FIND(" ",$A1,MIN(IFERROR(FIND(OneToZero,$A1),"")))-MIN(IFERROR(FIND(OneToZero,$A1),""))-0)

Retorna isso.

1417 Horne RD # 1445A (Edifício 15) ----- 1417 (Correto)
Westwood # 104A 801 Cantwell Ln --------- 104A (errado) 801 (Correto)

Eu tentei usar

=MID($A1,MIN(IFERROR(FIND(" "&OneToZero," "&$A1),"")),FIND(" ",$A1,MIN(IFERROR(FIND(" "&OneToZero," "&$A1),"")))-MIN(IFERROR(FIND(" "&OneToZero," "&$A1),""))-0)

Mas retorna isso se o primeiro número não tiver um caractere não dígito na frente.

Westwood 104A 801 Cantwell Ln --------- 104A (errado) 801 (Correto)

Não é possível remover apenas a primeira string usando o "#", pois ela pode dizer "Apt #" ou apenas "104A".

Obrigado.

    
por Mouthpear 08.04.2016 / 21:32

3 respostas

1

Eu encontrei isso para testar a String

=IF(AND(ISNUMBER(--(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)))),A1,"")

e colocou o código para localizar a primeira string e a segunda string.

Aqui está a coisa toda. Eu não sei muito sobre isso, apenas pieced um monte de diferentes pequenos trechos. Agora estou esperando que alguém possa me ajudar a simplificar isso.

    =IF(AND(ISNUMBER(--(MID(

MID([@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),"")),FIND(" ",[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),"")))-MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),""))-0),ROW(INDIRECT("1:"&LEN(MID([@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),"")),FIND(" ",[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),"")))-MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),""))-0)))),1)))),

MID([@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),"")),FIND(" ",[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),"")))-MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),""))-0),

MID([@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin],FIND(" ",[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),""))+0)),"")),FIND(" ",[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin],FIND(" ",[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),""))+0)),""))),"")))-MIN(IFERROR(FIND(" "&OTZ," "&[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin],FIND(" ",[@Origin],MIN(IFERROR(FIND(" "&OTZ," "&[@Origin]),""))+0)),""))),""))-0))

É muito longo. Eu mudei "OneToZero" é {1,2,3,4,5,6,7,8,9,0} para OTZ. [@Origin] é a coluna onde estão os "dados brutos" (endereços não formatados).

    
por 12.04.2016 / 05:15
1

ComovocêpediuumexemplodeumasoluçãoVBA,issoimprimiráaprimeirasubcadeianuméricanacélulaàdireita-

OptionExplicitPublicSubExtractStreetNumber()Application.ScreenUpdating=FalseConstnullCharacterAsString=" "
    Dim subString As String
    Dim fullAddress As String
    Dim subStringArray() As String
    Dim arrayPosition As Long
    Dim testCell As Range
    Dim addressTestRange As Range
    Set addressTestRange = Range("A1:A3") 'put your range of addresses here

    For Each testCell In addressTestRange
        fullAddress = testCell
        subStringArray = Split(fullAddress, nullCharacter)
        For arrayPosition = 0 To UBound(subStringArray)
            subString = subStringArray(arrayPosition)
            If IsNumeric(subString) Then
            testCell.Offset(, 1) = subString
            GoTo NextIteration
            End If
        Next
NextIteration:
    Next
    Application.ScreenUpdating = True
End Sub

Você também pode criar uma função definida pelo usuário para usar na planilha como ExtractStreetNumber(A1) -

Option Explicit

Public Function ExtractStreetNumber(ByVal fullAddress As String) As Long

    Const nullCharacter As String = " "
    Dim subString As String
    Dim subStringArray() As String
    Dim arrayPosition As Long

        subStringArray = Split(fullAddress, nullCharacter)
        For arrayPosition = 0 To UBound(subStringArray)
            subString = subStringArray(arrayPosition)
            If IsNumeric(subString) Then
                ExtractStreetNumber = subString
            Exit Function
            End If
        Next

End Function
    
por 12.04.2016 / 13:47
0

Aqui está uma outra maneira de fazer isso com uma fórmula, mas você precisa enviar um texto para as colunas e eu estou arrancando descaradamente a resposta de Scott para uma pergunta diferente.

Primeiro, copio os dados para uma nova planilha.

Ir para data - data tools - text to columns - delimited - space

Agora você pode encontrar a primeira subseqüência numérica única em cada linha com algo como

=INDIRECT(ADDRESS(ROW(),MIN(IF(ISNUMBER(A1:F1),COLUMN(A1:F1)))))

É uma fórmula de array, então você precisa usar Ctrl + Shft + Entr e certificar-se de que ele tenha chaves.

Agora você pode copiar - colar o número especial na folha original.

    
por 12.04.2016 / 20:22