Organizando dados de vendas usando macros do Excel

0

Estou escrevendo uma função de macro no Excel para organizar um conjunto de dados de vendas mensais. O formato original usa 6 linhas por entrada, e a tabela organizada usa apenas 1. O número de vendas muda todo mês, então eu preciso descobrir uma maneira de identificar quantas entradas de vendas existem para que eu saiba até que ponto estender minhas fórmulas.

No final dos dados brutos, aparece sempre a palavra "ASSINADO:" na segunda coluna, por isso usei as funções indireta e de correspondência para determinar o quanto preencher as fórmulas. O código que eu usei é assim:

    Application.Goto Reference:= _
         "INDIRECT(""T"" & (MATCH(""SIGNED:"",RawData!C2:C2,0)-3)/6+1)"
    Range("T2", Selection).Select
    Selection.FillDown

E funcionou bem inicialmente, exceto que, aparentemente, às vezes, os dados brutos não usam 6 linhas porque, às vezes, a função de correspondência com as entradas acima não retorna um número inteiro. Então eu tentei usar uma função de teto em torno da função de jogo para garantir que eu recebo um número inteiro, e achei que ficaria bem se estivesse desligado por um ou dois, pois isso é facilmente tratado manualmente. O que eu escrevi é assim:

    Application.Goto Reference:= _
        "INDIRECT(""T"" & Ceiling((MATCH(""SIGNED:"",RawData!C[-20],0)-3)/6+1),1))"
    Range("A2", Selection).Select
    Selection.FillDown

Agora recebo um erro e não consigo descobrir por quê. Tem a ver com o formato do número retornado pela função teto? Eu apreciaria muito qualquer ajuda para chegar a uma solução, ou talvez até mesmo uma abordagem diferente para encontrar o número de entradas de vendas.

Obrigado!

    
por Tarik 15.06.2013 / 02:27

1 resposta

0

Eu abordaria isso de maneira um pouco diferente. O fragmento de código abaixo usa a propriedade .Find de intervalos para determinar a última célula de dados na planilha. .Find retorna uma referência de célula, e podemos obter sua linha usando a propriedade .Row.

Note também que não é necessário selecionar intervalos para atuar neles.

Dim lastcell As Range
Set lastcell = Cells.Find(What:="*", After:=[A1], _
    SearchDirection:=xlPrevious)
Range("A2:A" & lastcell.Row).FillDown
    
por 15.06.2013 / 06:43