Excel 排序日期并在VBA中显示最近的日期
我有以下列表,我想对日期进行排序,显示最近的日期,并将其存储在21和22之间,如下所示: 我已经成功地编写了这段代码,帮助进行排序和显示最近的日期,并将它们存储在范围21中,现在我正在堆栈中,我不知道如何显示与每个最近日期关联的结束日期Excel 排序日期并在VBA中显示最近的日期,excel,vba,Excel,Vba,我有以下列表,我想对日期进行排序,显示最近的日期,并将其存储在21和22之间,如下所示: 我已经成功地编写了这段代码,帮助进行排序和显示最近的日期,并将它们存储在范围21中,现在我正在堆栈中,我不知道如何显示与每个最近日期关联的结束日期 Loop Until Not ech ' conversion of numbers into text for dico and listbox) ' and the false dates (written in text)
Loop Until Not ech
' conversion of numbers into text for dico and listbox)
' and the false dates (written in text) to real dates
On Error GoTo PasDate
For i = 2 To UBound(t)
t(i, 1) = CStr(t(i, 1))
If TypeName(t(i, 2)) = "String" Then t(i, 2) = 1 * DateSerial(Right(t(i, 2), 4), Mid(t(i, 2), 4, 2), Left(t(i, 2), 2))
Next i
On Error Resume Next
'Fill dico
Set dico = CreateObject("scripting.dictionary")
dico.CompareMode = TextCompare
For i = 2 To UBound(t)
If t(i, 1) <> "" Then
If Not dico.Exists(t(i, 1)) Then
dico.Add t(i, 1), t(i, 2)
Else
If t(i, 2) > dico(t(i, 1)) Then dico(t(i, 1)) = t(i, 2)
End If
End If
Next i
'Transfert dico to the table r for the list
ReDim r(1 To dico.Count, 1 To 2): i = 0
For Each x In dico.Keys: i = i + 1: r(i, 1) = x: r(i, 2) = dico(x): Next
'fill ranges 20 and 21
.Range("b20:b21").Resize(, Columns.Count - 1).Clear
.Range("b20").Resize(1, UBound(r)).HorizontalAlignment = xlCenter
.Range("b21").Resize(1, UBound(r)).NumberFormat = "dd/mm/yyyy"
.Range("b20").Resize(2, UBound(r)).Borders.LineStyle = xlContinuous
.Range("b20:b21").Resize(2, UBound(r)) = Application.Transpose(r)
End With
'poplate the listbox
For i = 1 To UBound(r): r(i, 1) = Format(r(i, 2), "dd/mm/yyyy"): Next
'For i = 1 To UBound(r): r(i, 1) = Format(r(i, 1), "000"): r(i, 2) = Format(r(i, 2), "dd/mm/yyyy"): Next
With ListBox1
.ColumnCount = 2
.ColumnHeads = False
.ColumnWidths = .Width * 0.7 '& ";" & .Width * (1 - 0.6 + 0.1)
.List = r
End With
Exit Sub
'
PasDate:
Exit Sub
End
End Sub
循环直到没有ech
'将数字转换为dico和listbox的文本)
将假日期(以文本形式书写)转换为真实日期
转到PasDate时出错
对于i=2至UBound(t)
t(i,1)=CStr(t(i,1))
如果TypeName(t(i,2))=“String”,那么t(i,2)=1*日期序列(右(t(i,2),4),中(t(i,2),4,2),左(t(i,2),2))
接下来我
出错时继续下一步
“填满狄克
设置dico=CreateObject(“scripting.dictionary”)
dico.CompareMode=文本比较
对于i=2至UBound(t)
如果t(i,1)“,那么
如果dico.不存在(t(i,1)),那么
dico.加上t(i,1),t(i,2)
其他的
如果t(i,2)>dico(t(i,1)),那么dico(t(i,1))=t(i,2)
如果结束
如果结束
接下来我
'将dico转移到表r以获取列表
ReDim r(1到dico.Count,1到2):i=0
对于dico中的每个x。键:i=i+1:r(i,1)=x:r(i,2)=dico(x):下一个
'填充范围20和21
.Range(“b20:b21”).Resize(,Columns.Count-1)。清除
.范围(“b20”).调整大小(1,UBound(r)).水平对齐=xlCenter
.Range(“b21”).Resize(1,UBound(r)).NumberFormat=“dd/mm/yyyy”
.Range(“b20”).Resize(2,UBound(r)).Borders.LineStyle=xlContinuous
.Range(“b20:b21”).Resize(2,UBound(r))=应用程序转置(r)
以
“弹出列表框
对于i=1到UBound(r):r(i,1)=格式(r(i,2),“dd/mm/yyyy”):下一个
'对于i=1到UBound(r):r(i,1)=格式(r(i,1),“000”):r(i,2)=格式(r(i,2),“dd/mm/yyyy”):下一个
使用ListBox1
.ColumnCount=2
.ColumnHeads=False
.ColumnWidths=.Width*0.7'&“;”和.Width*(1-0.6+0.1)
.List=r
以
出口接头
'
日期:
出口接头
终点
端接头
如何进行简单的匹配
,然后进行偏移量
?我该怎么做?