none
Converter Tabela Dinâmica em Planilha Comum RRS feed

  • Pergunta

  • Pessoal,

    alguém tem aí algum método que converta uma tabela dinâmica para uma tabela padrão.... respeitando sua formatação?

    A idéia é fazer o relatório usando a TD que compactaria os dados mais rápidos e depois só converter para uma planilha simples....

    Vlw!


    Natan

    sábado, 25 de outubro de 2014 14:00

Respostas

  • Boa tarde Natan!

    Este é um ponto bastante interessante. Anteriormente no Excel 2003 bastava copiar as células (poderia ser pela seleção ao lado do título de colunas "A" e acima do número das linhas "1") e colar em cima delas mesmas como valores (colar especial). A tabela era removida e a formatação preservada. Mas a partir do Excel 2007 ao fazer isso a formatação deixou de ser preservada. Fiquei um bom tempo sem saber uma forma de contornar isso. Graças ao complemento "ExpressXL" desenvolvido pelo Felipe (http://www.ambienteoffice.com.br/excel/expressxl/#tabela_dinamica_para_valores) acabei descobrindo que uma das formas de contornar é copiando parcialmente a tabela para uma pasta temporária, por exemplo a 1ª linha, e em seguida o restante da tabela. Seleciona-se então toda a tabela formada e cola-se sobre a tabela dinâmica de origem. Pronto!

    Se quiser, pode baixar o Suplemento que citei que haverá um botão específico para isso (esse suplemento já havia sido disponibilizado em um tópico neste fórum anteriormente).

    Dica: para selecionar toda a tabela pode-se usar Ctrl+Shift+8.

    Abraço.


    Filipe Magno

    • Marcado como Resposta 'Natan Silva terça-feira, 28 de outubro de 2014 19:15
    sábado, 25 de outubro de 2014 15:47
  • Obrigado por citar o suplemento Filipe. Para selecionar uma tabela (CurrentRegion), não acha melhor pressionar Ctrl+T?

    Natan, o código para converter uma tabelas dinâmica num intervalo comum de células, se encontra a seguir:

    Public Sub pPivotTable2Range()
      Dim pvt As Excel.PivotTable
      Dim rng As Excel.Range
      Dim rngSource As Excel.Range
      Dim wb As Excel.Workbook
      Dim ws As Excel.Worksheet
      
      On Error Resume Next
      Set pvt = ActiveCell.PivotTable
      On Error GoTo 0
      
      If pvt Is Nothing Then
        MsgBox "O intervalo selecionado não possui uma tabela dinâmica!", vbExclamation
        Exit Sub
      End If
      
      If MsgBox("Não é possível desfazer essa ação. Deseja continuar?", vbQuestion) <> vbYes Then Exit Sub
      
      Application.ScreenUpdating = False
      
      pvt.PivotSelect ""
      Set rngSource = Selection
      
      Set ws = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
      If rngSource.Areas.Count = 1 Then
        If rngSource.Rows.Count > 1 Then
          rngSource.Rows(1).Copy ws.Range(rngSource.Rows(1).Address)
          rngSource.Offset(1).Resize(rngSource.Rows.Count - 1).Copy _
          Destination:=ws.Range(rngSource.Rows(1).Offset(1).Address)
        Else
          rngSource.Columns(1).Copy ws.Range(rngSource.Columns(1).Address)
          rngSource.Offset(, 1).Resize(, rngSource.Columns.Count - 1).Copy _
          Destination:=ws.Range(rngSource.Columns(1).Offset(, 1).Address)
        End If
        ws.UsedRange.Copy rngSource
      Else
        For Each rng In rngSource.Areas
          rng.Copy ws.Range(rng.Address)
        Next rng
        ws.UsedRange.Copy rngSource(1)
      End If
      ws.Parent.Close False
    
      Application.ScreenUpdating = True
    End Sub
    
    Se quiser o código de todo suplemento, me envie um e-mail.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta 'Natan Silva quarta-feira, 29 de outubro de 2014 21:27
    quarta-feira, 29 de outubro de 2014 19:54
    Moderador

Todas as Respostas

  • Boa tarde Natan!

    Este é um ponto bastante interessante. Anteriormente no Excel 2003 bastava copiar as células (poderia ser pela seleção ao lado do título de colunas "A" e acima do número das linhas "1") e colar em cima delas mesmas como valores (colar especial). A tabela era removida e a formatação preservada. Mas a partir do Excel 2007 ao fazer isso a formatação deixou de ser preservada. Fiquei um bom tempo sem saber uma forma de contornar isso. Graças ao complemento "ExpressXL" desenvolvido pelo Felipe (http://www.ambienteoffice.com.br/excel/expressxl/#tabela_dinamica_para_valores) acabei descobrindo que uma das formas de contornar é copiando parcialmente a tabela para uma pasta temporária, por exemplo a 1ª linha, e em seguida o restante da tabela. Seleciona-se então toda a tabela formada e cola-se sobre a tabela dinâmica de origem. Pronto!

    Se quiser, pode baixar o Suplemento que citei que haverá um botão específico para isso (esse suplemento já havia sido disponibilizado em um tópico neste fórum anteriormente).

    Dica: para selecionar toda a tabela pode-se usar Ctrl+Shift+8.

    Abraço.


    Filipe Magno

    • Marcado como Resposta 'Natan Silva terça-feira, 28 de outubro de 2014 19:15
    sábado, 25 de outubro de 2014 15:47
  • Obrigado por citar o suplemento Filipe. Para selecionar uma tabela (CurrentRegion), não acha melhor pressionar Ctrl+T?

    Natan, o código para converter uma tabelas dinâmica num intervalo comum de células, se encontra a seguir:

    Public Sub pPivotTable2Range()
      Dim pvt As Excel.PivotTable
      Dim rng As Excel.Range
      Dim rngSource As Excel.Range
      Dim wb As Excel.Workbook
      Dim ws As Excel.Worksheet
      
      On Error Resume Next
      Set pvt = ActiveCell.PivotTable
      On Error GoTo 0
      
      If pvt Is Nothing Then
        MsgBox "O intervalo selecionado não possui uma tabela dinâmica!", vbExclamation
        Exit Sub
      End If
      
      If MsgBox("Não é possível desfazer essa ação. Deseja continuar?", vbQuestion) <> vbYes Then Exit Sub
      
      Application.ScreenUpdating = False
      
      pvt.PivotSelect ""
      Set rngSource = Selection
      
      Set ws = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
      If rngSource.Areas.Count = 1 Then
        If rngSource.Rows.Count > 1 Then
          rngSource.Rows(1).Copy ws.Range(rngSource.Rows(1).Address)
          rngSource.Offset(1).Resize(rngSource.Rows.Count - 1).Copy _
          Destination:=ws.Range(rngSource.Rows(1).Offset(1).Address)
        Else
          rngSource.Columns(1).Copy ws.Range(rngSource.Columns(1).Address)
          rngSource.Offset(, 1).Resize(, rngSource.Columns.Count - 1).Copy _
          Destination:=ws.Range(rngSource.Columns(1).Offset(, 1).Address)
        End If
        ws.UsedRange.Copy rngSource
      Else
        For Each rng In rngSource.Areas
          rng.Copy ws.Range(rng.Address)
        Next rng
        ws.UsedRange.Copy rngSource(1)
      End If
      ws.Parent.Close False
    
      Application.ScreenUpdating = True
    End Sub
    
    Se quiser o código de todo suplemento, me envie um e-mail.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta 'Natan Silva quarta-feira, 29 de outubro de 2014 21:27
    quarta-feira, 29 de outubro de 2014 19:54
    Moderador
  • Boa noite Felipe!

    Não gosto muito do Ctrl+T porque na maioria dos programas de origem externa (em inglês ou traduzido), o comando para selecionar tudo é Ctrl+A. Isso sempre me causa problemas quando preciso utilizar. Para não confundir, eu sempre vou no automático Ctrl+Shift+8 e também sempre tenho alguma Macro com esse atalho atribuído.

    Interessante é que em alguns casos o resultado dos dois comandos resulta em áreas diferentes (testei numa área sem dados de tabela dinâmica: a minha sugestão não selecionou nada e a sua selecionou toda a planilha).

    Abraço.


    Filipe Magno

    quarta-feira, 29 de outubro de 2014 23:59
  • "Interessante é que em alguns casos o resultado dos dois comandos resulta em áreas diferentes"

    Legal, não sabia disso.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 3 de novembro de 2014 22:26
    Moderador
  • Olá Natan, 

    Não consigo acessar o link que você mandou, imagino que expirou com o tempo. Tens um link ou orientação de como transformar uma tabela dinâmica em uma planilha simples?

    Agradeço!

    Pâmella

    segunda-feira, 26 de fevereiro de 2018 22:50