Página 1 de 1

Macro ou VBA para Colar Valores e Transpor

Enviado: 30 Set 2020 às 09:17
por juliocezaro1
Bom dia pessoal, tudo bem?

Preciso de uma ajuda de vocês... Será que alguém conhece um método onde eu possa colar de uma maneira mais automática números que estão todos na horizontal, colando na vertical transpondo?

Eu hoje retiro de um sistema uma base onde uma coluna vem da forma que está no arquivo (Coluna A), uma série de números que vem em uma mesma célula e todos na horizontal. Acontece que preciso transpor esses números para vertical, então o procedimento que eu faço é: primeiro separá-los todos em Texto para Colunas usando a opção Outros e colocando o sinal " | " para que fiquem todos em células distintas, depois copio toda a linha e colo especial marcando a opção Transpor para que assim fiquem todos na Vertical.

Mas como podem ver são centenas de linhas e não da pra ficar fazendo isso manualmente.

Alguém conhece algum método, macro ou VBA que poderia auxiliar?

Desde já, obrigado.

Re: Macro ou VBA para Colar Valores e Transpor

Enviado: 30 Set 2020 às 10:03
por osvaldomp
Eu sugiro uma solução via macro.
Imagino que você queira o resultado em outra planilha, Planilha2, por exemplo, é isso?
Informe qual o resultado desejado. Por exemplo: o número que está em A1 passaria para A1 da Planilha2, o que está em A2 passaria para B2, os 6 números que estão em A3 passariam para C1:C6, ... é isso ?

dica ~~~> "Alguém conhece algum método, macro ou VBA que poderia auxiliar?" ~~~> macro e VBA não são alternativas entre si ;)

Re: Macro ou VBA para Colar Valores e Transpor

Enviado: 30 Set 2020 às 10:33
por juliocezaro1
"Informe qual o resultado desejado. Por exemplo: o número que está em A1 passaria para A1 da Planilha2, o que está em A2 passaria para B2, os 6 números que estão em A3 passariam para C1:C6, ... é isso ?" ... Não, não é isso.

Sim, preciso que eles passem para outra planilha, mas todos na vertical e não na horizontal...
O numero que está em A1, passar para A1 da Planilha 2, A2, para A2 da planilha 2... os 6 numeros que estão em A3, passar para A3, A4, A5 e A6, e assim sucessivamente.

Re: Macro ou VBA para Colar Valores e Transpor

Enviado: 30 Set 2020 às 12:04
por osvaldomp
Código: Selecionar todos
Sub TransporDados()
 Dim n As Range
  Application.ScreenUpdating = False
  Columns(1).TextToColumns DataType:=xlDelimited, Other:=True, OtherChar:="|"
  For Each n In Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)
   If n.Offset(, 1) = "" Then
    n.Copy Sheets("Planilha2").Cells(Rows.Count, 1).End(3)(2)
   Else: Range(n, n.End(2)).Copy
    Sheets("Planilha2").Cells(Rows.Count, 1).End(3)(2).PasteSpecial Transpose:=True
   End If
  Next n
  Sheets("Planilha2").Columns(1).AutoFit
End Sub
1. antes de rodar o código insira uma planilha vazia nome Planilha2
2. ao rodar o código a Planilha1 deverá ser a planilha ativa

O processo levou cerca de 10 segundos e gerou 35.180 números na coluna A da Planilha2

Re: Macro ou VBA para Colar Valores e Transpor

Enviado: 30 Set 2020 às 13:58
por babdallas
Código: Selecionar todos
Public Sub Transpor()
    Dim vrtDados        As Variant
    Dim vrtDadosFinal   As Variant
    Dim lngLinFim       As Long
    Dim lngCont         As Long
    
    With wshPlan
        lngLinFim = .Cells(.Rows.Count, 1).End(xlUp).Row
        
        vrtDados = .Range("A1:A" & lngLinFim).Value2
        
        For lngCont = LBound(vrtDados, 1) To UBound(vrtDados, 1)
            If vrtDados(lngCont, 1) <> vbNullString Then
                vrtDadosFinal = VBA.Split(Expression:=vrtDados(lngCont, 1), _
                                        Delimiter:="|")
            
                wshDest.Cells(1, lngCont).Resize(UBound(vrtDadosFinal) + 1).Value2 = vrtDadosFinal
            End If
        Next lngCont
    End With
End Sub

Macro ou VBA para Colar Valores e Transpor

Enviado: 30 Set 2020 às 15:09
por juliocezaro1
Pessoal era exatamente o que eu precisava!!!! Executa imediato e traz o resultado da forma que eu preciso. Muito mas muito obrigado mesmo!!! Vcs não tem ideia de como ajudaram!!! Grande abraço!!