【问题标题】:Select dates which difference will be major or equal to 1选择差异较大或等于 1 的日期
【发布时间】:2020-10-15 01:38:31
【问题描述】:

大家好,我在 Excel 表格中有下一个数据

我的问题是我如何过滤这些信息,只使用差异主要或等于 1 的日期,总而言之,我想从 Visual Basic 中将最后一个表分类为如下所示:

如果有人可以帮助我获得解决此问题的代码,我非常感谢您的帮助。

【问题讨论】:

  • 会添加一个带有HOUR(Fecha) 的额外列吗?您可以在12 上过滤此列。这仅适用于本示例,因此如果这不是您要查找的内容,请在问题中添加信息。
  • 我解决了,我的解决方案(我将很快分享)是获取公共日期并保存在不同的数组中,然后选择第一个日期的最小值,然后将其保存在其他数组中然后比较大于一的差异,然后继续,最后我有一个数组,其值的差异大于一,谢谢您的意见
  • “比较差异”是不可能的。当比较东西时,你会得到不同的结果。例如比较13,将导致2 的差异。这只是一个语言问题,我知道,但是...... ????
  • 哈哈哈谢谢,我当然会考虑。再次感谢你。

标签: excel vba date-range


【解决方案1】:

好吧,我将使用下一个分享我在 vba 中解决此问题的方法:

''dimension of variables
dim ws as worksheet

set ws=thisworkbook.worksheets(sheet1)

now i got my matrix
set arrdata = ws.range("A1").CurrentRegion

fechainicio = CDate(Format(arrdata(1)(0), "dd/mm/yy")): numfechas = UBound(arrdata, 1)
fechafin = CDate(Format(arrdata(numfechas)(0), "dd/mm/yy"))

Dim datofecharr() As Variant
m = 1
For i = fechainicio To fechafin
    k = 1
    Dim datofecha() As Variant
    For j = 1 To numfechas
    If CDate(Format(arrdata(j)(0), "dd/mm/yy")) = i Then
     ReDim Preserve datofecha(1 To k)
     datofecha(k) = arrdata(j)(0)
     k = k + 1
    End If
    Next j
ReDim Preserve datofecharr(1 To m)
    datofecharr(m) = datofecha
    m = m + 1
Next i

lendatofecharr = UBound(datofecharr, 1)
Dim fechadiariarr() As Variant

ReDim Preserve fechadiariarr(1 To 1)
''seleccionamos la fecha minima de registro
fechadiariarr(1) = WorksheetFunction.min(datofecharr(1))
m = 2
''solo tomando los datos cuya diferencia horaria sea mayor o igual a 1 día
For i = 2 To lendatofecharr
    For k = 1 To UBound(datofecharr(i))
        If datofecharr(i)(k) - fechadiariarr(m - 1) >= 1 Then
         ReDim Preserve fechadiariarr(1 To m)
         fechadiariarr(m) = datofecharr(i)(k)
         m = m + 1
        Exit For
        
     End If
    Next k
 
Next i

Dim datosdiariosarr() As Variant
For i = 1 To UBound(fechadiariarr, 1)
    For j = 1 To UBound(arrdata, 1)
    If fechadiariarr(i) = arrdata(j)(0) Then
    ReDim Preserve datosdiariosarr(1 To i)
    datosdiariosarr(i) = arrdata(j)
    Exit For
    
    End If
    
    Next j
Next i


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多