excel - 在 Excel VBA 中计算频率
问题描述
我有一个开始时间和一个结束时间,我以小时为单位记录了那个时间。我让用户输入了一个目标,我想知道必须多久投篮一次才能达到目标。
例如,startTime = 08:00 AM
简单endTime = 09:00 AM
的targetGoal = 5
数学逻辑告诉我们,早上 8 点到 9 点之间是 1 小时或 60 分钟,因此要达到 5 的目标目标,用户必须每 12 分钟至少投篮 1 个(=60/ 5)
我对这个逻辑没有意见,但在我的 VBA 中,我无法完全理解它的逻辑。这就是我到目前为止所拥有的。
Dim sHour As Double
Dim eHour As Double
Dim targetMake As Double
Dim hitFreq As Double
targetMake = Sheets("Statistics").Range("C2").Value
sHour = Sheets("Statistics").Range("A2").Value
eHour = Sheets("Statistics").Range("B2").Value
hitFreq = (eHour - sHour) / targetMake
而不是在我运行这个 VBA 时按预期返回 12 我得到4.166666666
计算或声明类型有什么问题?
解决方案
请注意工作表中的数据和数据格式。
在这种情况下,该字段似乎被格式化为显示小时数,当它显示一般日期和小时数时,显示的信息后面有一个具体的数字。
例如:
如果单元格的格式设置为显示小时并且显示上午 08:00,则后面有一个数字,类似于“8,333”
当你使用
Range("A2").Value
它时返回“8,333”而不是 8,正如你所想的那样
因为结束时间是一样的
- 09:00AM 将由“8,375”之类的东西表示。
这就是你的程序中发生的事情。
要修复它,您需要将检索到的值转换为相应的小时。
尝试以下转换方法:
sHour = Sheets("Statistics").Range("A2").Value
sConverted = (sHour - CInt(sHour)) * 24
eHour = Sheets("Statistics").Range("A2").Value
eConverted = (eHour - CInt(eHour)) * 24
您还需要在最终公式中将小时转换为分钟
hitFreq = (eConverted - sConverted ) * 60 / targetMake
那应该可以解决您的问题
推荐阅读
- python - 如何使用 PRAW 在 reddit 中仅获取用户的 top/most_recent 5 次提交
- database - 用户设置服务数据库设计
- sql - SQL 内连接返回重复项
- python - Webdriver Python 在 Safari 中禁用浏览器推送通知
- c++ - 如何为带有时钟的程序创建计时器?
- sharepoint-2013 - 在 SharePoint 中管理完整列表中的唯一值
- html - 如何停止文本以旋转正确的动画?
- c++ - Xbox 360 无线控制器无法通过控制台应用程序中的 C++/WinRT 和 Windows.Gaming.Input API 工作
- r - 基于分组数据结构中的分位数过滤
- go - go pprof中的`Duration: 30.18s, Total samples = 26.26s (87.00%)`是什么意思?