Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何从列中的日期列表中查找最早的日期?_Excel_Vba_Date - Fatal编程技术网

Excel 如何从列中的日期列表中查找最早的日期?

Excel 如何从列中的日期列表中查找最早的日期?,excel,vba,date,Excel,Vba,Date,我已经采用了一个现有的代码,并试图将其调整为我想要做的事情,但我在这个过程中遇到了麻烦 我将处理的每个excel表格中的列大小(日期数)都会有所不同。每个单元格将明确包含格式为dd/mm/yyyy的日期 运行时错误“13” 类型不匹配 你知道我该怎么做吗 Dim j As Integer, minValue As Date Dim t0 As Double, t1 As Double Dim ans As Date t0 = CDbl(DateSerial(2000, 1, 1)) t1 =

我已经采用了一个现有的代码,并试图将其调整为我想要做的事情,但我在这个过程中遇到了麻烦

我将处理的每个excel表格中的列大小(日期数)都会有所不同。每个单元格将明确包含格式为dd/mm/yyyy的日期

运行时错误“13” 类型不匹配

你知道我该怎么做吗

Dim j As Integer, minValue As Date
Dim t0 As Double, t1 As Double
Dim ans As Date

t0 = CDbl(DateSerial(2000, 1, 1))
t1 = CDbl(DateSerial(2100, 12, 31))
ans = 0
For j = 3 To 7
    If ans = 0 Then ' You need to store the first valid value
        If Sheets(1).Cells(j, 9).Value >= t0 And Sheets(1).Cells(j, 9) <= t1 Then
            ans = Sheets(1).Cells(j, 9).Value
        End If
    Else
        If (Sheets(1).Cells(j, 9).Value >= t0 And Sheets(1).Cells(j, 9) <= t1) _
           And Sheets(1).Cells.Value < ans Then
            ans = Sheets(1).Cells(j, 9).Value
        End If
    End If
Next j
Dim j为整数,minValue为日期
尺寸t0为双精度,t1为双精度
日期
t0=CDbl(日期序列(2000,1,1))
t1=CDbl(日期序列(2100、12、31))
ans=0
对于j=3到7
如果ans=0,则需要存储第一个有效值

如果表(1).Cells(j,9).Value>=t0和表(1.Cells(j,9)=t0和表(1.Cells)(j,9),我可以使用Sam的评论来回答我自己的问题。下面是一个解决我的问题的工作宏:

Range("I3:I7").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("I3"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("I3:I7")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Range("I3").Select
Selection.Copy
Sheets("Sheet2").Select
Range("AA1").Select
ActiveSheet.Paste

以下是更直接的方法:

[sheet2!a1] = cdate([small(sheet1!i:i,1)])

哪一行产生错误?如果(表(1).单元格(j,9).值>=t0和表(1).单元格(j,9)你想从中输出什么?你只想让一个单元格告诉你哪一个是最早的日期吗?是的,第二张工作表中的一个单元格要做到这一点,最简单的方法不是将列复制到第二张工作表或一本新书中。用最早的单元格在顶部排序。然后将顶部单元格复制到第二张工作表中。这不需要大量的数据它应该非常快。唯一需要添加的是将列设置为可变长度,正如您所说的,列大小将改变