I have a column which has date value for different records, and I need to fetch the date which has the maximum value. One or more records can have the same date. How can I proceed with this? Not understanding on where to start the code on this:
for i = 3 to last_lin
max_dat = ws.Range("C" & i).Value
Next
last_line is the last line of the record till which data needs to be verified. I have put value in this variable «max_dat». Now what next should be done? Please let me know.
asked Mar 27, 2018 at 12:54
3
Taking an example case create the range as a variable and do Application.WorksheetFunction.Max on the range
Option Explicit
Sub test()
Dim max_dat As Date
Dim last_lin As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet3")
last_lin = 5
max_dat = Application.WorksheetFunction.Max(ws.Range("C3:C" & last_lin))
Debug.Print max_dat
End Sub
Data in sheet
answered Mar 27, 2018 at 12:59
QHarrQHarr
82.9k11 gold badges55 silver badges99 bronze badges
0
У меня есть лист excel с датами в столбце A, и мне нужно найти последнюю дату и фильтр за 7 дней до этой последней даты. Я только нашел vba-коды онлайн, которые принимают сегодняшнюю дату — 7 дней, но я не могу использовать это, потому что эти даты относятся к прошлому году.
Пожалуйста и спасибо!
РЕДАКТИРОВАТЬ:
Спасибо за ваше предложение. Я попытался поместить его в свой код vba, но он фильтрует 0 результатов.
Sub Filter()
Dim maxDate As Date
maxDate = WorksheetFunction.Max(ActiveSheet.Range("A:A"))
ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:= _
">" & maxDate - 6
End Sub
Не работает, так как этот файл макросов VBA датируется dd.mm.yyyy. (ПРИМЕЧАНИЕ DOT в конце), 0 приводит к моему случаю, он должен фильтровать dd.mm.yyyy (без точки). Я не знаю, как фильтровать без точки
EDIT2: Это сработало для меня.
Sub Largest()
Dim rng As Range
Dim dblMax As Double
Set rng = ActiveSheet.Range("A:A")
dblMax = Application.WorksheetFunction.Max(rng)
ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:= _
">" & dblMax - 7, Operator:=xlAnd
End Sub
0 / 0 / 0
Регистрация: 22.05.2015
Сообщений: 4
1
Excel
Найти максимальную дату среди значений в одной ячейке
03.12.2018, 10:38. Показов 4409. Ответов 2
Добрый день!
Помогите, пожалуйста, написать функцию (или формулу, если это возможно), чтобы находить самую позднюю дату среди указанных в одной ячейке. Дат может быть от одной до непонятного количества.
Пример значения ячейки:» , , 07.08.2018, 07.08.2018, 10.08.2018, 17.08.2018, 07.08.2018, 06.08.2018, 07.08.2018, 06.08.2018″.
Понимаю, что можно разделить значение по столбцам, а потом найти максимальное из них, но, к сожалению, такой способ не подходит, поскольку существующая таблица довольно объемная и редактируется несколькими сотрудниками, не понятно, кому я могу случайно данные «затереть» своими датами.
Догадываюсь, что нужно разделить значение ячейки на отдельные даты, сунуть их в массив, и достать из него максимум, но с синтаксисом беда у меня, ерунда всякая получается.
Заранее благодарна!
0
Вопрос:
Я пишу код VBA, чтобы найти минимальные и максимальные даты в диапазоне. Когда я его выполняю, я получаю сообщение об ошибке:
Run-time error ‘1004’: Application-defined or object-oriented error.
Ниже мой код:
Sub GenerateSheet()
Dim i, r, numAssignments As Integer
Dim ssrRng, DestRange As Range
Dim StartDate, EndDate, d As Date
numAssignments = Sheets("Data").Range("A1048576").End(xlUp).Row - 1
Sheets("Schedule").Select
EndDate = WorksheetFunction.Max(Sheets("Data").Range(Cells(2, 8), Cells(numAssignments, 8)))
StartDate = WorksheetFunction.Min(Sheets("Data").Range(Cells(2, 5), Cells(numAssignments, 5)))
End Sub
Здесь, Таблица данных имеет 8 столбцов, столбцы 5 и 8 – даты
Ответ №1
Лучше изменить несколько аспектов вашего кода, несмотря на то, что не все они несут ответственность за полученную ошибку. В общем, ваш код более подвержен ошибкам (например, при смене кода или применении его в других случаях).
-
Использование
Dim
:
Dim ssrRng, DestRange As Range
объявляетssrRng
какVariant
иDestRange
какRange
.
Вы должны использоватьDim ssrRng As Range, DestRange As Range
, считая, что хотите как диапазоны. -
Используйте переменные вместо явных ссылок, в частности, если они повторяются.
использованиеDim ws as Worksheet
Set ws = Workbooks(<your workbook name>).Sheets("Data")
numAssignments = ws...
вместо
numAssignments = Sheets("Data")...
-
Полностью квалифицируйте диапазоны, используемые вами, если вы явно не хотите этого.
- Заменить
numAssignments = Sheets("Data")...
с, например,numAssignments = Workbooks(<your workbook name>).Sheets("Data")...
(или, лучше, следуйте точке 2, которая уже рассматривает эту точку).
- Заменить
EndDate = WorksheetFunction.Max(Sheets("Data").Range(Cells(2, 8), Cells(numAssignments, 8)))
сEndDate = WorksheetFunction.Max(ws.Range(ws.Cells(2, 8), ws.Cells(numAssignments, 8)))
Аналогично дляStartDate
. В этом случае эти строки были источником ошибки, так какCells
без квалификатора работает вActiveSheet
.
- Заменить
-
Избегайте использования
Select
, если вы явно не нуждаетесь в нем. Объявите и установите переменные и используйте их для ссылкиRange
илиObject
, с которой вы хотите работать.
Ответ №2
Вы указываете диапазон, что его родительский элемент Листы ( “Данные” ), но не ячейки. Для всех целей и целей вам нужен диапазон от Data! E2: Schedule! E99.
Sub GenerateSheet()
Dim i, r, numAssignments As Integer
Dim ssrRng, DestRange As Range
Dim StartDate, EndDate, d As Date
numAssignments = Sheets("Data").Range("A1048576").End(xlUp).Row - 1
Sheets("Schedule").Select
with Sheets("Data")
EndDate = WorksheetFunction.Max(.Range(.Cells(2, 8), .Cells(numAssignments, 8)))
StartDate = WorksheetFunction.Min(.Range(.Cells(2, 5), .Cells(numAssignments, 5)))
end with
End Sub
Использование With Sheets("Data")
сообщает все внутри этого блока, которому предшествует период (aka .
или полная остановка), что его родительский элемент Листы ( “Данные” ).
Найти минимальную/максимальную дату по условию |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Excel VBA: код для поиска максимальной даты в строке, содержащей пустые ячейки
Dim s As Date
s = WorksheetFunction.Max((If IsNotEmpty (CDate(Range("A" & x + 1).Value), CDate(Range("B" & x + 2).Value), CDate(Range("C" & x + 1).Value)))
MsgBox s
У меня есть таблица, в которой есть около 8 столбцов, содержащих даты (бывшая дата начала, дата окончания и т. Д.). Теперь для каждой строки некоторые столбцы пусты. Я должен найти максимальную дату в каждой строке.
введите описание изображения здесь
3 ответа
Лучший ответ
Я бы посоветовал вам сделать это:
sub tryme()
For i = 1 To 50
Max_date = Application.WorksheetFunction.Max(Rows(i))
if isempty(Max_date) = False then
MsgBox cDate("The most recent date for row : " & i & "is : " & Max_date)
end if
Next
end sub
Где i
— номер вашей строки; вам нужно будет указать количество строк или найти его с помощью .Count
0
neophlegm
18 Сен 2019 в 13:06
Вы можете попробовать:
Option Explicit
Sub test()
Dim i As Long, y As Long
Dim dDate As Date
With ThisWorkbook.Sheets("Sheet1")
'Loop rows 1-10
For i = 1 To 10
'Set a default date
dDate = "1/1/1900"
'Loop columns from 1-8
For y = 1 To 8
If .Cells(i, y).Value <> "" And .Cells(i, y).Value > dDate Then
dDate = .Cells(i, y).Value
End If
Next y
Debug.Print "Max date for row " & i & " is date " & dDate
Next i
End With
End Sub
0
Error 1004
18 Сен 2019 в 12:07
Здравствуйте, обратитесь к приведенному ниже коду для ячейки A1 к AA1, также содержит дату с пустой ячейкой
Sub maxdaterow()
Max_date = Application.WorksheetFunction.Max(Range("A1:AA1"))
MsgBox Max_date
End Sub
Код ниже, чтобы найти максимальную дату в столбце A, который также содержит пустые ячейки
Sub maxdate()
Max_date = Application.WorksheetFunction.Max(Columns("A"))
MsgBox Max_date
End Sub
0
Angad Gupta
18 Сен 2019 в 11:30