我有一个以日期/时间字段开头的 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