Dividindo dados no Excel com base no local do caractere

1

Eu tenho uma coluna de dados, cada linha contendo um conjunto de 83 caracteres (por exemplo, 010203 344345 929348238482abcde33 4566) sem um padrão específico que precisa ser dividido em blocos de diferentes comprimentos (por exemplo, 6,1,6,6,4 4, ... 4,1,1). Qual seria a melhor maneira de distribuir programaticamente esses blocos? A criação de uma lista VBA e o loop provavelmente seriam a melhor aposta?

    
por Max Power 15.01.2015 / 17:48

3 respostas

2

Isso deve fazer o que você está procurando:

A fórmula em B2 é especial porque você começa:

=MID($A2, 1, B1)

mas, em seguida, C2 pode ser copiado de todas as 18 colunas restantes D2 - > LastCol2 :

=MID($A2,SUM($B$1:B$1)+1, C$1)

Copie a linha inteira para baixo e as fórmulas devem preencher automaticamente.

    
por 15.01.2015 / 18:27
0

Max, acho que entendo que você deseja que seus dados sejam delimitados por vírgulas. Felizmente o Excel tem uma ferramenta embutida para isso. Veja abaixo:

Espero que este seja o seu objetivo, caso contrário, experimente usar o texto na ferramenta de coluna, pois é mais fácil do que escrever várias funções do Excel.

    
por 15.01.2015 / 18:09
-1

Eu estava supondo que você queria ter um conjunto diferente de delineações para cada linha em seu conjunto de dados. O código a seguir é para esse fim.

Crie uma coluna à esquerda dos seus dados. Certifique-se de que não haja espaços em branco. Selecione todas as células nessa coluna e execute o código. Ele vai cuspir as quebras à direita da sua coluna com 83 caracteres. BTW, será erro se a soma das suas pausas for maior que o comprimento dos caracteres (83 neste caso).

Espero que ajude.
Kyle

Sub SplitManyTimes()
Dim r As Range, rng As Range
Dim arr As Variant
Dim lLength As Long, lStart As Long, i As Long

Set rng = Selection
For Each r In rng
    lStart = 1
    arr = Split(r, ",")
    For i = 1 To UBound(arr) + 1
        lLength = Val(arr(i - 1))
        r.Offset(0, i + 1) = Mid(r.Offset(, 1), lStart, lLength)
        lStart = lStart + lLength
    Next i
Next r
End Sub
    
por 15.01.2015 / 18:45