Analisar RegEx no Excel

0

Suponha que eu tenha uma planilha do Excel com a seguinte coluna:

A-345 hello

hola B-389

nice C-6231

what A-12287 who

just A-7819 C-45556

Como você pode ver - eu tenho um texto combinado com algum RegEx composto por A, B ou C, hífen e algum número com até 5-6 dígitos. Algumas dessas expressões aparecem mais de uma vez em algumas linhas.

Eu gostaria de analisar este RegEx (que varia um pouco entre as linhas) para outra coluna. Se houver expressões multipile em alguma linha (como a 5a linha no meu exemplo), então eu gostaria de separá-las por qualquer caractere que não seja o hífen (o espaço faria isso).

Existe alguma função incorporada no Excel que me permita fazê-lo? Talvez algum script de VBA?

Eu encontrei este tópico , mas eu gostaria de ver primeiro se Eu posso fazer isso sem qualquer complemento externo ou software. Este suplemento específico suporta o que eu preciso?

    
por gbi1977 08.08.2017 / 20:47

1 resposta

1

Se você deseja uma função incorporada, pode fazer essa fórmula de matriz:

=TEXTJOIN(" ",TRUE,IFERROR(--LEFT(TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",999)),ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"-",""))))*999,999)),FIND(" ",TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",999)),ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"-",""))))*999,999))&" ")-1),""))

Sendo uma fórmula de matriz, ela precisa ser confirmada com Ctrl-Shift-Enter em vez de Enter ao sair do modo de edição. Se feito corretamente, o Excel colocará {} em torno da fórmula.

Nota:

Isso retornará o primeiro agrupamento de números após cada -

TEXTJOIN()estádisponívelcomumaassinaturadoOffice365Excel.Sevocênãotiverisso,adicioneessecódigoaummóduloanexadoàpastadetrabalhoeuseafórmuladescritaacima:

FunctionTEXTJOIN(delimAsString,skipblankAsBoolean,arr)DimdAsLongDimcAsLongDimarr2()DimtAsLong,yAsLongt=-1y=-1IfTypeName(arr)="Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function
    
por 08.08.2017 / 21:02