Dividir uma coluna intercalada com zeros em colunas separadas no Excel, enquanto quebra em zeros

1

Eu estou olhando para dividir uma matriz de colunas intercaladas com zeros em colunas separadas no Excel, quebrando os zeros na coluna e ignorando os zeros.

Por exemplo, se eu tiver uma matriz {1,2,3,0,4,5,0,0,6,7,0} , o Excel deve retornar três matrizes - a matriz 1 deve ser {1,2,3} , a matriz 2 deve ser {4,5} e a matriz 3 deve {6,7} . Como posso fazer isso no excel?

    
por kaliavinash 10.05.2016 / 03:40

2 respostas

1

Você precisa usar o VBA para isso.
Como eu faria isso é:

  • leia todos os números que são numéricos e não 0 em uma matriz.
  • conta quantos valores o array possui e o lê em um inteiro:
    digamos que i é a contagem da matriz. Que dividir por 3 i = i/3
  • verifique se i é um número inteiro.
    Se sim, imprima os primeiros valores i da matriz, depois a segunda e a terceira.
  • Se não for um número inteiro, por exemplo, a contagem de matrizes foi 13 = > 13/3 = 4,333 .
    Solte a fração e verifique se é par ou ímpar.
    Se for par, a saída será 1. i+1 2. i+1 3. i da matriz.
    Se ímpar: 1. i+1 2. i 3. i

Para obter as primeiras i , segunda i e terceira i da matriz, você precisa usar outro inteiro ex. %código%. Defina j para j , crie um 0 para a primeira parte (-1 porque o índice da matriz começa em 0, não em 1).
A segunda parte que você define do while array(j) = i-1 , etc

    
por 10.05.2016 / 08:52
0

Eu sugeriria dois métodos ... primeiro com código (talvez seja uma maneira mais complicada de fazê-lo do que o Divin3 sugeriu, mas é mais simples de entender). Basicamente você cria um array usando "," como um delimitador, então você remontará novos arrays para não-zeros. Quando um zero é encontrado, salvamos a variável de matriz atual e passamos para a próxima, para "montar" os segmentos contíguos diferentes de zero:

Sub splitter()
    Dim theNewArray(999)

    theStr = ActiveCell.Value
    theOldArray = Split(theStr, ",")
    x = 0

    theNewArray(x) = ""

    For i = 0 To UBound(theOldArray)
        If theOldArray(i) <> 0 And theOldArray(i) <> "0" Then
            If Len(theNewArray(x)) > 0 Then
                theNewArray(x) = theNewArray(x) & "," & theOldArray(i)
            Else
                theNewArray(x) = theOldArray(i)
            End If
        Else
            If Len(theNewArray(x)) > 0 Then
                x = x + 1
                theNewArray(x) = ""
            End If
        End If
    Next i

    For i = 0 To (x - 1)
        ActiveCell(1, (2 + i)).Value = theNewArray(i)
    Next i
End Sub

Isso lhe dará o seguinte (onde azul é o dado original e laranja são os dados de saída):

Alternativamente,vocêpodepreferirfazerissocomalgumasfunçõessimples...selecionarseusdadoseusar"texto em colunas":

Digaqueseusdadosestãodelimitados.Selecione"outro" e digite 0 (zero), como mostrado abaixo:

Orestantepodeserdeixadocomopadrão.Vocêterminarácomoresultadomostradoabaixoemamarelo:

Depoisdisso,vocêpodelimparoscaracteresdevírgulaàdireitausandoestafórmula:

=IF(F1=",","",IF(LEFT(F1, 1)=",",IF(RIGHT(F1, 1)=",",MID(F1, 2, (LEN(F1)-2)),MID(F1,2,(LEN(F1)-1))),MID(F1, 1, (LEN(F1)-1))))

Os resultados dessa fórmula são o que você vê acima em laranja.

    
por 10.05.2016 / 11:42