2013-02-20 2 views
1

분 값 (예 : 3.83 분)을 hh : mm : ss 시간 형식으로 변환하려고합니다 (0:03 : 50)분을 hh : mm : ss로 변환하는 VBA 함수 만들기

매크로에서 기록한 .NumberFormat이 작동하지 않아서 #VALUE! 오류.

Function MINtoHMS(MIN) 
    MIN = MIN/(24 * 60) 
    MINtoHMS = MIN 
    MINtoHMS.NumberFormat = "[h]:mm:ss;@" 
    End Function 

답변

2

-Edit-는

엑셀 추가 기능에 추가로 사용하려면

Option Explicit 

Private WithEvents App As Application 

Private Sub Class_Initialize() 
    Set App = Application 
End Sub 

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    On Error GoTo Err 
    If InStr(Target.Formula, "=MINtoHMS") Then 
     Target.NumberFormat = "hh:mm:ss" 
    End If 
    On Error GoTo 0 
    Exit Sub 
Err: 
End Sub 

추가 : http://www.filedropper.com/mintohms

는 다음 코드로 SheetChangeHandler라는 클래스 모듈 만들기 다음 코드의 모듈 :

Option Explicit 

Public MySheetHandler As SheetChangeHandler 

Sub Auto_Open() 
    Set MySheetHandler = New SheetChangeHandler 
End Sub 

Function MINtoHMS(MIN) 
    MIN = MIN/(24 * 60) 
    MINtoHMS = MIN 
End Function 

파일> 다른 이름으로 저장을 클릭> 엑셀 97-2003 추가 기능은 (* .XLA)>

클릭하여 파일 저장> 옵션> 추가 기능을

클릭 "이동 ..."관리 옆에 : Excel에서-에 추가

확인 옆에있는 상자를-추가 기능 방금 만든

"확인"을 클릭

+0

를 하나 또는 다른 이유를 들어, 함수가 실행 된 후, 셀의 값이 고정됩니다. 값을 다른 형식으로 변경하려고해도 아무 일도 일어나지 않는다는 것을 의미합니다. 마치 출력물이 텍스트 형식 인 것 같습니다. 텍스트 형식이라는 또 다른 표시는 값이 셀의 왼쪽에 자동으로 맞춰집니다. – engineerchange

+0

이 옵션은 셀 서식을 변경하지 않습니다. 그것은 숫자를 원하는 형식으로 변환하고 결과를 출력하는 것뿐입니다. 왜 h : mm : ss로 변환 한 후 다른 형식으로 형식을 변경하려고하는지 이해할 수 없습니다. 이것이 원하는 형식이 아니면 왜 그것을 전혀 변경하지 않습니까? – Ripster

+0

형식이 hh : mm : ss로 변경되지 않았으므로 해당 구문의 텍스트 형식으로 출력되었으므로 다른 셀과 상호 작용할 수 없습니다 (hh : mm : ss 형식의 평균 시간입니다).). – engineerchange

1

첫째, 당신은 그것의 공식을 통해 엑셀 셀의 형식을 변경할 수 없습니다. 셀의 수식은 셀 (또는 범위)의 값에만 할당 할 수 있습니다.

두 번째로, 함수에서 일부 데이터 유형을 선언해야합니다. 이는 신비한 오류 및 다른 이상한 결과를 방지합니다. 이 같은

뭔가 괜찮을 것 :

Function MINtoHMS(MIN As Double) As Date 
    MIN = MIN/(24 * 60) 
    MINtoHMS = MIN 
End Function 

절대적으로 Ripster는 그/그녀의 대답에서와 같이, 대신 포맷 된 문자열을 반환하는 것, 함수를 통해 볼을 제어 할 수있는 유일한 방법.

0

다음 방법을 시도해보십시오.

DAYS = Format(Int([Expr3]/86400), "00") - will correctly display days 
HOURS = Format(Int(([Expr3])/3600) - ((Int([Expr3]*86400)/3600), "00") - DOES NOT CORRECTLY display correct hours 
HOURS = Format(Int([Expr3]/3600),"00") - What will display hours 
MINUTES = Int(([Expr3]-(Int([Expr3]/3600)*3600))/60) 
SECONDS = Format((([Expr3] Mod 60)),"00") 

dTotalSeconds = DateDiff("S", Now(), dChristmasDate) 
    iDays = Int(dTotalSeconds/86400) 
    iHours = Int((dTotalSeconds Mod 86400)/3600) 
    iMinutes = Int(((dTotalSeconds Mod 86400) Mod 3600)/60) 
    iSeconds = ((dTotalSeconds Mod 86400) Mod 3600) Mod 60 

'

이 기능을 사용해서 당신은 HH에 분을 변환 할 수 있습니다 : MM : SS

Public Function HMStoSec(strHMS As String) As Long 
     HMStoSec = Split(strHMS, ":")(0) * 3600 + _ 
        Split(strHMS, ":")(1) * 60 + _ 
        Split(strHMS, ":")(2) 
    End Function 
관련 문제