Arquivo da tag: dados

VBA – Criando uma cópia somente dados de uma planilha no Excel

Mais uma que saiu do nosso fórum.

O pessoal precisou de uma macro no VBA para criar uma cópia dos dados da planilha (Worksheet) em uma nova, mas somente os dados, sem fórmulas. Como alguns devem saber, isso é simples usando o recurso Colar Especial->Valores. Mas como o mundo é exigente, precisamos fazer isso a “rodo”, e é nesse caso que as macros ajudam.

A macro abaixo faz uma cópia da planilha atual, copiando somente seus dados:

Sub CopiaSomenteConteudo()
    Dim NewSheet As Worksheet, CurrentSheet As Worksheet
    'pega a planilha atual
    Set CurrentSheet = ActiveSheet
    'cria uma nova planilha
    Set NewSheet = ThisWorkbook.Worksheets.Add
    NewSheet.Name = CurrentSheet.Name & "2"
    'copia todas as células da planilha ativa
    CurrentSheet.Cells.Copy
    'cola só os valores na nova planilha
    NewSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'zera os objetos
    Set NewSheet = Nothing
    Set CurrenSheet = Nothing
End Sub

Simples, rápido, eficaz. Isso é Excel + VBA.

Bom proveito!

VBA – Macro para exportar dados em XML no Excel

A partir da versão 2002 (XP), o Excel, bem como todos os programas do Office ganharam uma séria de artimanhas para manipular, importar, exportar e trabalhar no padrão XML.

Isso é bom e poderoso, mas tentando fazer uma exportação simples de uma planilha em um arquivo XML, naveguei pelas opções que o Excel oferecia e no final, acabei optando por fazer a exportação por VBA, já que precisava de algo rápido do “limpo”.

Não usei classes ou bibliotecas específicas para o trabalho. A criação do XML foi na mão mesmo. Abaixo segue o código que faz o trabalho:

Sub ExportToXml()
    Dim linha As Long, coluna As Long, colunas As Long
    linha = 2
    colunas = ActiveSheet.UsedRange.Columns.Count
    Set fs = CreateObject("Scripting.FileSystemObject")
 
    Set a = fs.CreateTextFile(ThisWorkbook.FullName & ".xml", True)
    'cria as primeiras linhas
    a.WriteLine ("<?xml version=""1.0"" encoding=""UTF-8""?>")
    a.WriteLine ("<" & ActiveSheet.Name & "s>")
 
    With ActiveSheet
        Do While Not IsEmpty(.Cells(linha, 1))
            a.WriteLine (Chr(9) & "<" & ActiveSheet.Name & ">")
 
            For coluna = 1 To colunas Step 1
                a.Write (Chr(9) & Chr(9) & _
                "<" & .Cells(1, coluna).Value & ">" & _
                RTrim(.Cells(linha, coluna).Value) & _
                "</" & .Cells(1, coluna).Value & ">" & Chr(13))
            Next
 
            a.WriteLine (Chr(9) & "</" & ActiveSheet.Name & ">")
            linha = linha + 1
        Loop
    End With
 
    'finaliza o arquivo
    a.WriteLine ("</" & ActiveSheet.Name & "s>")
    a.Close
 
    MsgBox "Finito!"
End Sub

Em detalhes, a macro navega a partir da segunda linha (a primeira deve ter os cabeçalhos ok?) e constrói o XML, sendo que os nós considerarão o nome da planilha, pluralizando-a, por exemplo, se o nome da planilha for Usuario, ele criará o nó Usuarios e cada elemento/linha como Usuario. O arquivo gerado tem o mesmo nome da planilha, mas com a extensão XML. De quebra, o XML vai indentado.

Uma mão na roda para exportação de dados limpos. Faça o teste e, bom proveito.

VBA – Como Filtrar dados no ListBox

VBA - Como Filtrar dados no ListBox

Este é um código de exemplo que tenho a muito tempo, mas como o pessoal tem pedido muito, vou deixá-lo em uma forma mais visível.

Como o VBA carece de controles de apresentação de dados mais avançados, como Grids e Listas complexas, acabamos apelando para o controle ListBox para apresentação de dados vindos de ResultSets (particularmente, prefiro apresentar os dados em uma planilha). Bom, como os dados já estão na LisBox, porque não aplicar o filtro nele mesmo?

Para ver um exemplo, proceda da seguinte forma:

  • Em um novo arquivo, crie uma lista de dados na Plan1, na coluna A a partir da célula A1
  • Abra o VBA (Alt+F11)
  • Adicione um UserForm ao projeto
  • No UserForm, adicione um controle TextBox e um ListBox (mantenha os nomes padrão dos controles)
  • Cliquem em F7 para exibir o código e adicione o seguinte:
  • Option Explicit
    'Autor: Tomás Vásquez.
    '       www.tomasvasquez.com.br/blog
    '       www.tomasvasquez.com.br/forum
    '       www.tomasvasquez.com.br/cursocsharp
    'Data:  15 de Janeiro de 2007.
    'Versão: 1.00 - Em VBA Microsoft Excel 2003 e 2007
    Private TextoDigitado As String
     
    Private Sub TextBox1_Change()
        TextoDigitado = TextBox1.Text
        Call PreencheLista
    End Sub
     
    Private Sub UserForm_Initialize()
        Call PreencheLista
    End Sub
     
    Private Sub PreencheLista()
        Dim ws As Worksheet
        Dim i As Integer
        Dim TextoCelula As String
        Set ws = ThisWorkbook.Worksheets(1)
        i = 1
        ListBox1.Clear
        With ws
            While .Cells(i, 1).Value &lt;&gt; Empty
                TextoCelula = .Cells(i, 1).Value
                If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
                    ListBox1.AddItem .Cells(i, 1)
                End If
                i = i + 1
            Wend
        End With
    End Sub

Execute o UserForm e digite valores válidos de filtro no TextBox e veja o efeito.

Trocando em miúdos, primeiro o UserForm carrega os dados da Plan1 no ListBox. Depois, o evento TextChange é mapeado para que toda digitação provoque a refiltragem dos dados. A forma de comparação é simples, mas poderia ter sido feita também com o operador Like.

Download do arquivo

http://www.tomasvasquez.com.br/forum/download/file.php?id=2142

Consolidando dados de várias planilhas numa só com o Excel

No Excel, é possível usar numa planilha informações armazenadas em arquivos externos. Isso permite a criação de planilhas-resumo – ou seja, tabelas que consolidam dados de outras tabelas. Exemplos clássicos são resultados mensais consolidados numa planilha anual, ou vários documentos de filiais resumidos num documento único, para toda a empresa. A maneira mais fácil de criar uma planilha consolidada é conceber uma estrutura única para todas as planilhas ou documentos. Ou seja, o arquivo ou planilha de janeiro deve ter a mesma estrutura do arquivo ou planilha de fevereiro; do mesmo modo, os dados da filial A devem ter layout idêntico ao dos dados da filial B, e assim por diante.

Vejamos um exemplo prático. Você acompanha, com uma planilha para cada mês, o perfil das receitas e despesas da empresa. Agora, terminado o primeiro semestre, deseja consolidar essas informações num documento único. A forma mais simples é criar sete planilhas numa mesma pasta de trabalho: seis planilhas mensais, mais uma para o total. Para facilitar, os dados que vão ser aproveitados na planilha Ano devem estar nas mesmas posições em todas as planilhas. Uma forma simples de obter isso é construir a lógica de uma das planilhas e depois copiá-la para as demais. Digamos que a receita mensal esteja, em todas as planilhas, na célula C5. Para obter a receita do semestre, basta usar a seguinte fórmula, na célula C5 da planilha consolidada:

=SOMA(Janeiro:Junho!C5)

Mesmo que as seis fontes de dados não pertençam todas a um mesmo arquivo, ainda assim é possível fazer a consolidação. Só é preciso conhecer bem o layout do documento fora do padrão. Admita, por exemplo, que os dados de junho estão numa pasta de trabalho à parte, Junho.xls, na qual a receita mensal se encontra na planilha Plan2, célula G7. Nesse caso, para obter a receita do semestre, use a fórmula:

=SOMA(Janeiro:Maio!C5)+´h:\docs\[Junho.xls]Plan2´!G7

Abraços

Tomás Vásquez

Fonte: http://info.abril.com.br