У меня есть CSV, который начинается с поля даты / времени, и мне нужно импортировать, выбрать самую последнюю строку и обратиться к ней в моих формулах.

Я экспериментирую с Pivot Tables, а сейчас только Rank и VLookup.

Как лучше всего получить доступ к самой последней строке и сохранить ее в фиксированном месте?

1 ответ1

0

Решение ниже включает макрос, который, согласно вашим тегам, не является решением, которое вы ищете. Тем не менее, он использует функции рабочего листа, и вы можете создать решение для рабочего листа в зависимости от характера импорта CSV.

Я надеюсь, что одно или другое из этих решений работает для вас.

Примечание: ни одно из решений не зависит от сортируемых данных.

Объяснение решения VBA и возможного эквивалента листа

Шаг в решении:

Найдите нижний ряд данных. Эквивалент VBA для клавиатуры: перейти к нижней части столбца A, а затем перейти к первой непустой ячейке. Однако вам может не понадобиться рабочий лист, эквивалентный этому шагу.

Я не могу думать о листе, эквивалентном следующим операторам, которые преобразуют строки даты в числа даты. Это преобразование не потребуется, если ваш импорт выполняет это преобразование для вас.

Следующий шаг - найти максимальное значение в столбце А. Даты Excel - это числа, поэтому MAX сделает это за вас. Если вы знаете, что никогда не будет более 2000 строк, вы можете использовать:

=MAX(A2:A2000)

Последний шаг - определить строку для максимального значения. Если максимальное значение находится в ячейке X1, тогда:

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

является клавиатурным эквивалентом этого шага.

VBA Solution

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .