Tempos de Formatação (durações) no Excel

0

Alguém tem uma boa maneira rápida de inserir horas, especificamente durações, NÃO hora do dia, no Excel? Todas as vezes, neste caso, serão breves, minutos e segundos. Nada mais do que uma hora, então eu não preciso da hora exibida, e prefiro não ter que digitar todas as vezes.

Eu criei alguns atalhos para agilizar um pouco as coisas - Meu formato é m:ss;@ , que exibe o que eu quero, mas ainda preciso digitar 0:3:14 todas as vezes.

Eu criei uma macro para que, digitando .. , eu receba um : , que é muito mais rápido do que alternar constantemente entre a tecla shift e os números. (Isso também economiza tempo, já que o . está no teclado numérico para que eu possa digitar com uma mão sem precisar mover a mão para : e voltar toda vez.) Esqueça onde eu vi essa sugestão, mas é genial.

No entanto, ainda tenho que digitar 0..3..14 . Isso requer que eu digite a hora mesmo que seja sempre 0. Existe alguma maneira que eu possa apenas digitar 3..14 . Se eu fizer isso agora, acabo com 3:14:00 em vez de 0:03:14 . Pode não parecer muito, mas quando você tem que fazer isso centenas de vezes, cada pequena ajuda. (Eu tentei trapacear e fingir que as horas e minutos eram minutos e segundos, mas onde isso falha é quando eu quero adicionar todas as durações na parte inferior - e o total será em horas, embora os tempos individuais são muito mais curtos.

    
por Darrel Hoffman 13.07.2013 / 07:12

3 respostas

2

Você pode usar um evento de alteração para capturar a entrada de dados e converter o valor Hora: Minuto em um valor Minuto: Segundo dividindo por 60.

Por exemplo, todos os valores inseridos na coluna A serão inseridos como xx: yy e a macro os converterá para serem interpretados como mm: ss, em vez de hh: mm. Uma célula na coluna A tem o nome do intervalo "totais". Esta célula será excluída da conversão automática.

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

Ajuste o intervalo de acordo com suas necessidades.

    
por 13.07.2013 / 13:39
2

Veja se a macro a seguir funciona para você. Espera entradas no formulário:

314   
852   
  3   

Em outras palavras, apenas números. 59 segundos seriam inseridos como 59, 1 min e 21 segundos seriam inseridos como 121, etc.

Ao terminar a entrada de dados, selecione os valores inseridos e execute a macro. Ele converterá as entradas em valores de tempo.

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
    
por 13.07.2013 / 08:23
1

'Você pode substituir sua macro antiga (o outro tipo de macro do Excel) pelo seguinte código VBA (Visual Basic for Applications) que manipula a substituição dos pontos duplos por dois pontos.

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

Este código supõe que um conjunto de pontos duplos significa minutos e segundos (1..1 - > 0:01:01) em vez das horas e minutos padrão do Excel.

Ele também formata as células automaticamente com base no que foi digitado. Observe o [ ] em torno do m ou h que informa ao Excel para exibir a duração total de minutos. Sem o [ ] , o Excel exibe apenas os minutos dentro das horas ou as horas do dia (ou seja, até um máximo de 59 minutos ou 23 horas). Se o valor for maior que esses máximos, o formato ignorará qualquer coisa extra. Usar o [ ] força o Excel a exibir o número total de minutos ou horas, etc. (por exemplo, 65 minutos seriam mostrados como 5:00 com m:ss ou 1:05:00 com h:mm:ss , mas mostrados como 65:00 usando [m]:ss ) .

PS Se você precisar disso para trabalhar em TODAS as planilhas, precisará adicionar o código ao módulo ThisWorkbook dentro de um Sub com esta definição:

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

Espero que isso ajude ...

    
por 10.01.2015 / 11:29