【问题标题】:Attributing values depending of another value w/ VBA ? Excel 2010属性值取决于另一个带有 VBA 的值? Excel 2010
【发布时间】:2018-05-21 14:35:45
【问题描述】:

首先,对不起,如果它已经存在,但我找不到英文单词来快速描述我的问题,因此我不知道如何搜索它。如果您只需要问题,请跳至第三段。

我正在使用 Excel 构建一份关于我的工作时间的完整文档(到达时间、完成时间、如果我迟到了、我迟到了多长时间、加班等等)。 我正在使用 VBA 来完成这项任务。

我的工作场所将所有事情都缩短为一刻钟,这意味着如果你迟到一分钟,你将失去 15 分钟。加班14分钟不算加班。如果我指向 07:45(我使用的是 24H 格式,而不是 AM/PM),我很好。如果我在 07:46 进行,则将被计为 08:00。与 16:14 相同,它将显示为 16:00(显示了详细信息,但在用于工资的更正表上,它将以这种方式显示)。如果我在 16:15 这样做,我已经确认了我的 15 分钟加班。

因此,虽然我可以做一些变通办法,但我想到的确实是shitcode。我想知道一个 good(干净)的方法来做到这一点:我希望我输入的每个时间戳都在递减的四分之一小时内被削减(例如,我希望 17:12 出现17:00 或 08:57 08:45)。

感谢您的帮助,如果您不理解或对我所说的内容有疑问,可能是因为我解释的方式,请询问有什么需要:)

更新 01:值确实是 Excel 处理的时间,而不是看起来像时间戳的字符串。

更新 02:@FunThomas 使用 TimeSerial-command 和一些解释解决了问题。谢谢,我希望这对将来的参考有所帮助,但是我没有文字来为这个问题写一个更好的标题。

【问题讨论】:

  • 您打算如何实现这一目标?使用公式?写 vba 代码?
  • 正如我所说,我正在使用 VBA(在标题和文本中)。
  • 然后发布您的代码并说明您在哪里遇到问题。
  • 我的代码不是问题,我有一个解决方法,我没有使用它,因为它是一个肮脏的代码,不值得投入时间来编写,因为我确信一种“好,干净”的方式来做我想做的事情已经存在。我在问是否有人知道这样一个“好、干净”的代码可以使用。我的问题已经另外解释了。编辑:我的意思是,我的代码还没有包含这个,所以在这里发布它是没有意义的。
  • 我的理解是你没有代码,你想要一个免费的代码。

标签: excel vba date time excel-2010


【解决方案1】:

假设您的数据确实是时间(而不是看起来像时间的字符串)并且存储在单元格 A1 中,您可以使用如下公式:

=TIME(HOUR(A1), INT(MINUTE(A1)/15) * 15, 0)

time-command 获取三个参数(小时、分钟、秒)。
小时部分很简单。
在这一分钟内,我们将整数除以 15(得到 0..3 的值)并将其乘以 15(得到 0、15、30 或 45)。
第二个简单地设置为 0。

更新: 作为 VBA 函数:

Function roundTime(t As Date) as date
    roundTime = TimeSerial(Hour(t), Int(Minute(t) / 15) * 15, 0)
End Function

【讨论】:

  • 数据就是时间。我尝试制作一张新表进行尝试,用 15:32 填充 A1,显示为 15:32:00 到目前为止,太好了。我创建了一个命令按钮,将代码编写为:Cells(10, 1).Value = Time(Hour(A1), Int(Minute(A1) / 15) * 15, 0),但它告诉我“执行错误“13”;类型不兼容”。哦,我的坏。你写了一个公式,而不是 VBA。我会再试一次。
  • 感谢您提供VBA中的功能!我写了这个t = Cells(1, 1).Value Cells(1, 2).Value = TimeSerial(Hour(t), Int(Minute(t) / 15) * 15, 0) 来测试它,它完美地工作。你让我今天一整天都感觉很好。似乎我的投票还不可见,但我肯定提高了你的答案。如果可以的话,我现在就给你烤一块饼干。这是我唯一不知道但需要继续编写代码的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
相关资源
最近更新 更多