Reformatar dados através do macro excel 2010?

0

Estou tentando criar uma macro que me permita alterar os dados que recebi de um cliente em dados que posso importar para um sistema. Os dados que recebo estão no formato:

ComopossofazerissoatravésdamacroVBA?Porisso,develerosdadosecriarumanovafolhacomacópiadosdadosnoformatoquepossousar.Assim:

    
por WolfeLine 01.05.2014 / 13:40

3 respostas

0

Esta é a macro que deve fazer o que você deseja. Isso:

  • Solicita o número de fundos
  • Pressupõe que a tabela de dados começa em A1
  • imprime em "Folha2" nas colunas A a C
  • Encerra se encontrar uma célula vazia na coluna date

Observação: se "Sheet2" não existir, a macro falhará, portanto, crie-a. Além disso, você precisará colocar os cabeçalhos na "Planilha2" e ajustar o formato da célula para datas e valores em "Planilha2"

ajustar conforme necessário

Sub wolfeline()
Dim c As Range
Dim k As Integer
Dim x As Integer
Dim y As Integer
Dim WScurr As Worksheet
Dim WStarg As Worksheet

'Set current and target WS
'//Note: target WS must exist already
Set WScurr = ActiveSheet
Set WStarg = Sheets("Sheet2")

'k=2 so we start on row 2, below the headers you've put, adjust as needed
k = 2

'count the range of dates
y = [counta(A:A)]

'Ask user to input number of funds
x = InputBox("Number of Funds?")
'Feel free to define range("A:A") to your actual range e.g. range("A2:A100")
For Each c In WScurr.Range("A2:A" & y)
If c.Value = "" Then Exit Sub

    ' "to 3" indicates there are 3 funds, adjust as needed
    For i = 1 To x
        If c.Offset(, i) <> "" Then
            'we're printing this in columns K, L and M, adjust as needed
            WStarg.Cells(k, "A") = c
            WStarg.Cells(k, "B") = Cells(1, c.Offset(, i).Column)
            WStarg.Cells(k, "C") = c.Offset(, i)
            k = k + 1
        End If
    Next
Next


End Sub
    
por 01.05.2014 / 19:17
0

Ative o gravador de macros e use o método encontrado no blog de John Walkenbach. Ele aparece com esse código usando os dados de amostra na sua captura de tela:

Sub Unpivot()

'
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
        Array("Sheet1!R1C1:R4C4"), Version:=xlPivotTableVersion15).CreatePivotTable _
        TableDestination:="", TableName:="PivotTable1", DefaultVersion:= _
        xlPivotTableVersion15
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("PivotTable1").DataPivotField.PivotItems( _
        "Count of Value").Position = 1
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Row").Orientation = _
        xlHidden
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Column").Orientation = _
        xlHidden
    Range("A4").Select
    Selection.ShowDetail = True
End Sub

Ajuste ao seu gosto ou experimente o código que John Walkenbach publica aqui . Ele foi escrito para uma versão anterior do Excel, portanto, pode parecer diferente do código de 2010.

    
por 01.05.2014 / 13:55
0

Se você não tem muitas colunas de fundos, pode fazê-lo manualmente.

  1. Na frente do Fundo 1 (Coluna B), insira uma coluna. Copie uma fórmula 'IF' para cada célula que verifique se há um valor na Coluna B (agora Coluna C) e, em caso afirmativo, defina o conteúdo como "Fund 1". Ou seja, na célula B2:

    =IF(C2<>"", "Fund 1", "")

  2. Na frente da próxima coluna do Fundo, insira duas colunas. No primeiro dos dois, defina uma fórmula 'IF' que verifique se existe um valor na coluna Fund e, em caso afirmativo, copie a data da coluna A. Na segunda das duas novas colunas, repita o passo 1 acima, mas insira o fundo correto. Isso é nas células D2 e E2

    =IF(F2<>"", A2, "")        ||        =IF(F2<>"", "Fund 2", "") ||

Faça isso para cada coluna do fundo.

3. Em seguida, copie as células de cada um dos blocos de três colunas para uma nova folha, para que cada bloco consecutivo seja colocado abaixo do bloco anterior. Ou seja, selecione e copie da primeira célula de dados da Coluna A (não linha 1) para a última célula com dados na Coluna C - não as colunas inteiras - e cole-as na célula superior esquerda da nova planilha. Em seguida, selecione e copie os dados da primeira célula na Coluna D, até a última célula de dados na Coluna F, e cole-a na Coluna A na linha imediatamente abaixo dos dados colados anteriormente.

Depois que todos esses blocos tiverem sido copiados, você poderá classificar os dados pela Coluna A (a coluna de datas). Isso não só colocará todas as transações na ordem cronológica, mas também bloqueará todas as lacunas juntas, deixando-o com dados no formato que você está procurando.

Versão da macro

Se houver muitas Colunas do Fundo, use o gravador de macros para executar as etapas 1 e 2 e execute o código que faz a etapa 2 por meio de um loop para cada fundo (defina o número "string fazendo algumas contas na coluna em que você está).

Em seguida, faça um trabalho semelhante de gravador de macros para copiar e colar os dois primeiros blocos de colunas e, em seguida, classificá-los e, novamente, percorrer o código de cópia / passado de cada fundo

    
por 01.05.2014 / 18:35