Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 排序日期并在VBA中显示最近的日期_Excel_Vba - Fatal编程技术网

Excel 排序日期并在VBA中显示最近的日期

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)

我有以下列表,我想对日期进行排序,显示最近的日期,并将其存储在21和22之间,如下所示:

我已经成功地编写了这段代码,帮助进行排序和显示最近的日期,并将它们存储在范围21中,现在我正在堆栈中,我不知道如何显示与每个最近日期关联的结束日期

 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
以
出口接头
'
日期:
出口接头
终点
端接头

如何进行简单的
匹配
,然后进行
偏移量
?我该怎么做?