Use o Excel para selecionar a linha mais recente de um arquivo CSV?

0

Eu tenho um CSV que começa com um campo de data / hora e eu preciso importar, e selecione a linha mais recente e consulte-a nas minhas fórmulas.

Estou experimentando tabelas dinâmicas e agora apenas classifiquei e VLookup.

Qual é a melhor maneira de acessar a linha mais recente e salvá-la em um local fixo?

    
por random65537 09.12.2011 / 04:52

1 resposta

0

A solução abaixo envolve uma macro que, de acordo com suas tags, não é a solução que você procura. No entanto, ele usa funções de planilha e você pode criar uma solução de planilha dependendo da natureza da importação de CSV.

Espero que uma ou outra dessas soluções funcione para você.

Nota: nenhuma solução depende dos dados que estão sendo classificados.

Explicação da solução do VBA e do equivalente a uma planilha possível

O passo na solução é:

Encontre a linha inferior dos dados. O equivalente do teclado do VBA é: Vá para a parte inferior da coluna A e vá até a primeira célula não vazia. No entanto, talvez você não precise de uma planilha equivalente a essa etapa.

Não consigo pensar em uma planilha equivalente às próximas declarações que convertem strings de data em números de data. Essa conversão não será necessária se sua importação realizar essa conversão para você.

O próximo passo é encontrar o valor máximo na coluna A. As datas do Excel são números, então o MAX fará isso por você. Se você sabe que nunca haverá mais de 2000 linhas que você possa usar:

=MAX(A2:A2000)

O passo final é identificar a linha para o valor máximo. Se o valor máximo estiver na célula X1, então:

=1 + MATCH(X1,A2:A2000,0)

é o equivalente do teclado deste passo.

Solução VBA

Option Explicit
Sub FindLatestDate()

  Dim DateCol() As Variant
  Dim DateMax As Date
  Dim RngData As String
  Dim RowDateMax As Integer
  Dim RowMax As Integer

  With Sheets("Sheet2")

    RowMax = .Cells(Rows.Count, "A").End(xlUp).Row  ' Find bottom column of data.
    RngData = "A2:A" & RowMax                       'Assume first data row is 2.

    ' If column A contains strings that Excel can correctly
    ' interpret as dates, force Excel to do so.
    DateCol = .Range(RngData).Value
    .Range(RngData).Value = DateCol

    ' Excel dates are integer values.  Excel date/times are real values.
    ' Get the maximum value in the range.
    DateMax = Application.WorksheetFunction.Max(.Range(RngData))

    ' The use of CLng assumes the date does not include a time.
    ' Use CDbl if the date does include a time
    RowDateMax = 1 + _
       Application.WorksheetFunction.Match(CLng(DateMax), .Range(RngData), 0)

    ' RowDateMax gives you the value you seek.
    ' This code does not rely on the CSV being in date order

  End With

End Sub
    
por 09.12.2011 / 14:41