首页 > 解决方案 > 如何在固定日期“hh:ss”和一系列单元格之间进行循环

问题描述

如何将日期“hh:ss”单元格 Z4 与具有相同格式 (AB4:AB19) 的范围进行比较。它应该获取单元格 Z4 并查看它是否等于该范围内的任何其他单元格,如果这是真的,它应该增加两分钟并再次查看,并继续这样做,直到在该范围内找不到该值。

每当它发现一个不在范围内的值时,它应该将该值放在单元格 AB4 中。它应该在以后使用所有值(Z5,Z6 ... Z19)。我添加和图像作为示例,显示已经存在一个值,并且每当我按下按钮“Grabar TOBT”时我都需要单独运行该代码。

在此处输入图像描述 子 CompTSAT1()

    Dim VALTSAT1 As Date
    VALSAT1 = Z4

    Do While VALSAT1 = Range("AB4:AB19")
        VALSAT1 = DateAdd(n, 2, VALSAT1)

        Exit Do

        AB4 = VALSAT1
    Loop

End Sub

标签: excelvbahour

解决方案


最后,在西班牙语 stackoverflow 的一些帮助下,我找到了我正在寻找的方法:

Option Explicit

Sub GrabarTOBT()

Dim HorasOcupadas As Object: Set HorasOcupadas = CargaHorasOcupadas
Dim HoraStr As String
Dim HoraDeseada As Date
HoraDeseada = ActiveCell.Value
HoraStr = Format(HoraDeseada, "hh:mm")
Dim HoraOcupada As Boolean: HoraOcupada = HorasOcupadas.Exists(HoraStr)
Do While HoraOcupada
    HoraDeseada = DateAdd("n", 2, HoraDeseada)
    HoraStr = Format(HoraDeseada, "hh:mm")
    HoraOcupada = HorasOcupadas.Exists(HoraStr)
Loop
With ThisWorkbook.Sheets("Hoja1") 'Cambia Hoja1 por la hoja donde tienes los datos
    Dim lrow: lrow = .Cells(.Rows.Count, "AB").End(xlUp).Row + 1
    .Cells(lrow, "AB").Value = Format(HoraDeseada, "hh:mm")
End With

End Sub

Private Function CargaHorasOcupadas() As Object
Dim Dict As Object: Set Dict = CreateObject("Scripting.Dictionary")
With ThisWorkbook.Sheets("Hoja1") 'Cambia Hoja1 por la hoja donde tienes los datos
    Dim lrow As Long: lrow = .Cells(.Rows.Count, "AB").End(xlUp).Row
    If lrow > 3 Then
        Dim C As Range
        Dim Hora As String
        For Each C In .Range("AB4:AB" & lrow)
            Hora = Format(C, "hh:mm")
            Dict.Add Hora, 1
        Next C
    End If
End With
Set CargaHorasOcupadas = Dict

End Function

推荐阅读