Используйте Excel, чтобы выбрать самую последнюю строку из CSV?

374
random65537

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

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

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

0
Вы хотите сказать, что каждая строка начинается с поля даты / времени? Кроме того, строки в хронологическом порядке? Walt Ritscher 12 лет назад 0
Да, он начинается с поля даты и времени. Строки должны быть отсортированы; хотя мне, возможно, придется использовать vbscript для этого. random65537 12 лет назад 0

1 ответ на вопрос

0
Tony Dallimore

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

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

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

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

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

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

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

Следующий шаг - найти максимальное значение в столбце 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 

Похожие вопросы