excel - 如何在固定日期“hh:ss”和一系列单元格之间进行循环
问题描述
如何将日期“hh:ss”单元格 Z4 与具有相同格式 (AB4:AB19) 的范围进行比较。它应该获取单元格 Z4 并查看它是否等于该范围内的任何其他单元格,如果这是真的,它应该增加两分钟并再次查看,并继续这样做,直到在该范围内找不到该值。
每当它发现一个不在范围内的值时,它应该将该值放在单元格 AB4 中。它应该在以后使用所有值(Z5,Z6 ... Z19)。我添加和图像作为示例,显示已经存在一个值,并且每当我按下按钮“Grabar TOBT”时我都需要单独运行该代码。
Dim VALTSAT1 As Date
VALSAT1 = Z4
Do While VALSAT1 = Range("AB4:AB19")
VALSAT1 = DateAdd(n, 2, VALSAT1)
Exit Do
AB4 = VALSAT1
Loop
End Sub
解决方案
最后,在西班牙语 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
推荐阅读
- python - 使用列名作为列表在 Dataframe 的列中迭代,然后在 Python 中循环遍历列表
- dynamic - 使用两个不同的 SSL 端口配置 IIS 的两个 dydns 网站并为两者配置端口转发
- c++ - C++ typedef 具有不定大小的元组
- wpf - 如何在 WPF 中的 DataTemplate 中查找 TextBox 的值?
- java - 使用 csv 进行哈希图和数组计算的正确方法。数据文件
- java - 用于自定义对象的 Android 房间类型转换器
- css - 如何在其旁边的 span 元素底部设置 span 元素并使用 css 省略并做出反应?
- django - 过滤值范围内的对象,如 id - Django
- windows - 在安装期间增加 Windows 事件日志大小
- python - 多剪贴板自动化无聊的东西