使用 Excel 从 CSV 中选择最新的行?

使用 Excel 从 CSV 中选择最新的行?

我有一个以日期/时间字段开头的 CSV,我需要导入并选择最近的行并在我的公式中引用它。

我正在试验数据透视表,现在正在试验Rank和VLookup。

访问最新行并将其保存在固定位置的最佳方法是什么?

答案1

以下解决方案涉及一个宏,根据您的标签,这不是您想要的解决方案。但是,它使用工作表函数,您可能能够根据 CSV 导入的性质创建工作表解决方案。

我希望这些解决方案中的一个或另一个对您有用。

注意:两种解决方案都不依赖于正在排序的数据。

VBA 解决方案和可能的工作表等效项的解释

解决方案中的步骤是:

找到数据的底行。VBA 的键盘等效代码是:转到 A 列底部,然后转到第一个非空单元格。但是,您可能不需要此步骤的工作表等效代码。

我想不出与以下将日期字符串转换为日期数字的语句等效的工作表。如果您的导入为您执行此转换,则无需进行此转换。

下一步是找到 A 列中的最大值。Excel 日期是数字,因此 MAX 将为您完成此操作。如果您知道行数永远不会超过 2000 行,则可以使用:

=MAX(A2:A2000)

最后一步是确定最大值所在的行。如果最大值位于单元格 X1 中,则:

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

是此步骤的键盘等效项。

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

相关内容