У кого-нибудь есть хороший быстрый способ ввода времени, а именно продолжительности, а не времени суток, в Excel? Все времена в этом случае будут короткими, минуты и секунды. Ничего, кроме часа, так что мне не нужно отображать час, и я бы предпочел не вводить его каждый раз.

Я придумал несколько ярлыков, чтобы немного упростить процесс - мой формат m:ss;@ , который отображает то, что я хочу, но мне все равно приходится каждый раз вводить 0:3:14 .

Я создал макрос, так что набрав .. Я получаю : что гораздо быстрее, чем необходимость постоянно переключаться между нажатием клавиши Shift для двоеточий и повышением чисел. (Это также экономит время , так как это прямо на цифровой клавиатуре , так что я могу легко ввести одной рукой , без необходимости двигать рукой . И обратно каждый раз) Забудьте, где я видел это предложение, но оно гениально.

Тем не менее, я все еще должен набрать 0..3..14 . Это требует, чтобы я напечатал в часе, хотя это всегда 0. Есть ли способ, который я могу просто ввести в 3..14 . Если я сделаю это сейчас, я 3:14:00 вместо 0:03:14 . Может показаться не так много, но когда вам приходится делать это сотни раз, каждый кусочек помогает. (Я пытался обмануть и притвориться, что часы и минуты были минутами и секундами, но когда это не получается, я хочу сложить все значения в нижней части - и общее количество будет в часах, хотя отдельные времена намного короче.

3 ответа3

2

Вы можете использовать событие изменения для захвата ввода данных и преобразования значения «Час: Минута» в значение «Минута: Второе» путем деления на 60.

Например, все значения, введенные в столбце A, будут введены как xx:yy, и макрос преобразует их, чтобы они интерпретировались как мм: сс, а не чч: мм. Одна ячейка в столбце А имеет имя диапазона "итоги". Эта ячейка будет исключена из автоматического преобразования.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
On Error Resume Next
    If Not Target.Name.Name = "totals" Then
        Application.EnableEvents = False
        Target = Target / 60
        Application.EnableEvents = True
    End If
End If
End Sub

Отрегулируйте диапазон в соответствии с вашими потребностями.

2

Посмотрите, подходит ли вам следующий макрос. Ожидает записи в виде:

314   
852   
  3   

Другими словами, просто цифры. 59 секунд будет введено как 59, 1 минута и 21 секунда будут введены как 121 и т.д.

Когда вы закончите ввод данных, выберите введенные значения и запустите макрос. Это преобразует записи в значения времени.

Sub NumToTime()
    Dim cell As Variant
    Dim hr As Long
    Dim min As Long
    Dim sec As Long
    hr = 0
    For Each cell In Selection
        min = Int(cell.Value / 100)
        sec = cell.Value - (min * 100)
        cell.Value = TimeSerial(hr, min, sec)
    Next
End Sub
1

«Вы можете заменить свой старый макрос (другой тип макроса Excel) следующим кодом VBA (Visual Basic для приложений), который обрабатывает замену двойных точек двоеточиями.

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count <> 1 Then Exit Sub 'Only check when one cell is being changed.

   Select Case UBound(Split(Target.Formula, "..")) 'How many ".." appear in the formula?
      'UBound returns 1 less than the number of elements in an array because array indexes start at 0, eg: array(0), array(1)

      Case 1 'ie only two values entered, minutes & seconds (so add the hours)
         Target.Formula = "0:" & Replace(Target.Formula, "..", ":")
         Target.NumberFormat = "[m]:ss" 'Optional formatting to show duration in minutes

      Case 2 'ie three values entered, hours, minutes, seconds, just replace the double dots with colons
         Target.Formula = Replace(Target.Formula, "..", ":")
         Target.NumberFormat = "[h]:mm:ss" 'Optional formatting to show duration in hours
   End Select
End Sub

Этот код предполагает, что один набор двойных точек означает минуты и секунды (1..1 -> 0:01:01) вместо часов и минут по умолчанию в Excel.

Он также автоматически форматирует ячейки на основе того, что было введено. Обратите внимание на [ ] вокруг m или h который указывает Excel отображать общую продолжительность минут. Без [ ] Excel отображает только минуты в часах или часы в течение дня (то есть максимум до 59 минут или 23 часов). Если значение больше этих максимумов, формат будет игнорировать что-либо дополнительное. Использование [ ] заставляет Excel отображать общее количество минут или часов и т.д. (Например, 65 минут будут отображаться как 5:00 с m:ss или 1:05:00 с h:mm:ss но отображаются как 65:00 с использованием [m]:ss).

PS Если вам нужно это для работы на ВСЕХ рабочих листах, вам нужно добавить код в модуль ThisWorkbook внутри Sub с таким определением:

 Private Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Надеюсь это поможет...

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