Рассчитать частоту в Excel VBA - PullRequest
0 голосов
/ 04 мая 2020

У меня есть время начала и время окончания, и я фиксирую это время в часах. У меня есть пользователь, вводящий целевую цель, и я хочу знать, как часто нужно делать корзину для достижения целевой цели.

Например, startTime = 08:00 AM и endTime = 09:00 AM и targetGoal = 5 simple math logi c говорит нам, что между 8 и 9 часами утра 1 час или 60 минут, поэтому для достижения целевой цели 5 пользователь должен делать как минимум 1 корзину каждые 12 минут (= 60/5 )

У меня нет проблем с этой логикой c, но в моем 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

и вместо того, чтобы возвращать 12, как и ожидалось, когда я запускаю этот VBA, я получаю 4.166666666

Что отключено в типе вычисления или объявления?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Будьте осторожны с данными и форматированием данных на вашем листе.

В этом случае кажется, что поле отформатировано так, чтобы отображать часы и, когда оно отображает общую дату и часы, за конкретным числом стоит конкретное число. отображаемая информация.

Например:

  • Если ячейка отформатирована для отображения часов и отображает 08:00, за ней стоит число, которое будет что-то вроде " 8,333 "

  • , когда вы используете Range("A2").Value, он возвращает" 8,333 ", а не 8, как вы думаете,

для конечного времени быть таким же

  • 09: 00 утра будет представлен чем-то вроде «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

, которые должны решить вашу проблему * 1 034 *

0 голосов
/ 04 мая 2020
Dim sHour As Date
Dim eHour As Date
Dim targetMake As Double
Dim hitFreq As Double

targetMake = Sheets("Statistics").Range("C2").Value
sHour = CDate(Sheets("Statistics").Range("A2").Value)
eHour = CDate(Sheets("Statistics").Range("B2").Value)

hitFreq = DateDiff("h", sHour, eHour) / targetMake

Я сделал три изменения:

  1. Переменные sHour и eHour заменены на Date
  2. Добавлено CDate, чтобы убедиться, что даты конвертируется.
  3. DateDiff - очень хорошая функция для использования при расчете временных разностей

Возможно, инвертирование hitFreq cal c также?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...