Usuário com melhor resposta
Converter Tabela Dinâmica em Planilha Comum

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
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
-
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
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
-
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
-
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
-
-