Я создаю диспетчер расписания, и я столкнулся с этим:

Пользователю предлагается ввести число, когда он хочет начать выполнять определенную задачу, например, число "13" должно представлять 13:00. Но после того, как он наберет это число, мне нужно, чтобы оно показывалось как 13:00.

образ ]

Чтобы сделать это, мне нужно разделить число на 24, а затем это число конвертируется в нужный мне формат (13:00). Но я понятия не имею, как вставить этот номер обратно в ту же ячейку.

Возможно ли это, или есть другой способ сделать это? Это также должно работать, если я наберу за полчаса (13:30).

2 ответа2

2

ОСНОВНЫЕ РЕДАКТИРОВАТЬ

Судя по отзывам, это основная переписка оригинального поста.

Вместо преобразования числа в той же ячейке, вы можете преобразовать число во время вычислений. При таком подходе пользователь думает, что он вводит время в 24-часовом формате, но в действительности это целое число, которое преобразуется во время. Ниже приведен образец.

Пример расписания

Столбец H содержит описание того, что находится в столбце G для этой строки.

Ключом для пользователя является ввод времени в 24-часовом формате без двоеточия, что отмечено на баннере в верхней части листа. Если вы отформатируете ячейки времени (строки 3, 4 и 6) в произвольном формате ##":"00 они будут выглядеть так, как будто они отображают стандартный формат времени.

Вот содержимое ячеек и формулы:

G3: введите здесь время окончания (24-часовой формат без двоеточия)
Введенное в примере значение равно 1645 но будет отображаться как 16:45

G4: введите здесь время начала (24-часовой формат без двоеточия)
Введенное в примере значение равно 820 но будет отображаться как 8:20

G5: =TIME(INT(G3/100),MOD(G3,100),0)-TIME(INT(G4/100),MOD(G4,100),0)+IF(G3<=G4,1,0) (8:25)

Это вычитает два раза и исправляет отрицательные ошибки времени (+IF(G3<=G4,1,0)).

Функция ВРЕМЯ принимает ввод в виде часов, минут, секунд TIME(h,m,s) . Так как G3 , G4 , и представляют собой целые числа, часы будут найдены путем деления на 100 INT(G3/100) или цифра отображается слева : протокола путем взятия остатка от этого деления MOD(G4,100) или цифры, отображаемые справа от : , и секунды равны нулю, так как мы имеем дело с целыми минутами.

Результатом будет фактическое значение времени, и ячейка должна быть отформатирована как время или пользовательская (h:mm).

G6: введите здесь время перерыва / обеда (24-часовой формат без двоеточия)
Введенное в примере значение равно 30 но будет отображаться как :30

G7: =(G5-TIME(INT(G6/100),MOD(G6,100),0))*24 (7,92)

Это преобразует G6 в формат времени, как описано выше для ячейки G5, и вычитает два раза.

Разница умножается на X24, чтобы дать ответ в десятичных часах, потому что моей системе требовался такой тип ввода. Если это то, что вам нужно, то отформатируйте ячейку как число с двумя десятичными знаками.

Если вам не нужны десятичные часы, просто оставьте нашу *24 из формулы и отформатируйте ячейку как время.

В моем полном листе столбец G повторяется для каждого дня недели. Надеюсь это поможет.

0

Этот макрос преобразует число в время в соответствии с 24-часовым временем в выбранной ячейке / ячейке.

Sub NumberToTime()
    Dim rCell As Range
    Dim iHours As Integer
    Dim iMins As Integer

    For Each rCell In Selection
        If IsNumeric(rCell.Value) And Len(rCell.Value) > 0 Then
            iHours = rCell.Value \ 100
            iMins = rCell.Value Mod 100
            rCell.Value = (iHours + iMins / 60) / 24
            rCell.NumberFormat = "h:mm AM/PM"
        End If
    Next
End Sub

Как это устроено:

  • Введите этот макрос как модуль с листом.
  • Введите время как число, показанное на снимке экрана.
  • Выберите диапазон данных и запустите макрос.

Вы получите желаемый результат, как показано на скриншоте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .