John은 TV 업계에서 일하며 타이밍이 1 초보다 더 미세한 해상도로 이루어집니다. 텔레비전 비디오는 시간, 분, 초 및 프레임을 고려해야합니다. (초당 30 프레임이 있습니다.) John은 Excel에서 프레임을 처리하는 방법이 있는지 궁금해했습니다.

Excel에서 기본 시간 값의 일부로 프레임을 처리하는 방법은 없습니다. 그러나 프레임으로 작업하기 위해 수행 할 수있는 몇 가지 작업이 있습니다. 아마도 가장 분명한 제안은 시간, 분, 초를 일반 시간 값으로 유지 한 다음 프레임을 별도의 셀에 배치하는 것입니다. 이 접근 방식의 즉각적인 단점은 “TV 시간”에 대한 계산이 단일 값으로 표현되는 것만 큼 쉽지 않다는 것입니다.

이를 우회하는 방법은 매크로에서 직접 계산을 시도하는 것입니다.

Excel은 시간을 매우 쉽게 사용할 수있는 10 진수 값으로 변환하는 내부 프로세스를 거칩니다. 시간 값 (프레임 포함)을 10 진수 값으로 변환하여 동일한 변환 프로세스를 시뮬레이션 할 수 있습니다. 00 : 29 : 10 : 10 형식의 TV 시간은 셀 (Excel에서 문자열로 처리)에 저장 한 다음 매크로에 의해 값으로 변환 할 수 있습니다.

물론 여기에 문제가 있습니다. Excel이 시간에 대해 수행하는 것처럼 시간을 0과 1 사이의 실제 십진수 값으로 변환 할 수 없습니다. 그 이유는 Excel의 유효 숫자 제한과 관련이 있습니다. 값에 도달하려면 시간을 24로, 분을 1440 (24 60)으로, 초를 86400 (24 60 60)으로, 프레임을 2592000 (24 60 60 30)으로 나눕니다. 그렇게 작은 값을 얻기 시작하면 모든 것을 15 개의 유효 자릿수로 유지하는 Excel의 한계를 초과합니다.

따라서 프레임 값에 피할 수없는 반올림 오류가 발생합니다.

이 문제에 대한 한 가지 해결책은 0과 1 사이의 10 진수 값으로 작업하지 않고 대신 정수로 작업하는 것입니다. 문자열 시간을 시간의 총 프레임 수를 나타내는 정수 값으로 변환하면 결과 값에 대해 쉽게 계산할 수 있습니다.

다음 매크로는 이미 언급 한 형식의 문자열 변환을 수행합니다.

Function Time2Num(Raw) As Long     Dim FirstColon As Integer     Dim SecondColon As Integer     Dim ThirdColon As Integer     Dim NumHours As Integer     Dim NumMinutes As Integer     Dim NumSeconds As Integer     Dim NumFrames As Integer     Dim T2D As Long

Application.Volatile          FirstColon = InStr(Raw, ":")

SecondColon = InStr(FirstColon + 1, Raw, ":")

ThirdColon = InStr(SecondColon + 1, Raw, ":")



NumHours = Val(Mid(Raw, 1, FirstColon - 1))

NumMinutes = Val(Mid(Raw, FirstColon + 1, SecondColon - 1))

NumSeconds = Val(Mid(Raw, SecondColon + 1, ThirdColon - 1))

NumFrames = Val(Mid(Raw, ThirdColon + 1, Len(Raw)))



T2D = CLng(NumHours)

T2D = T2D  60 + NumMinutes     T2D = T2D  60 + NumSeconds     T2D = T2D * 30 + NumFrames

Time2Num = T2D End Function

이것이 어떻게 작동하는지보기 위해 A4 셀에 37 : 15 : 42 : 06과 같은 문자열이 있고 수식 = Time2Num (A4)를 사용하면 결과는 37의 프레임 수인 4024266이됩니다. 시간, 15 분, 42 초, 6 프레임. 이러한 값을 다시 이해할 수있는 시간으로 변환하려면 다음 함수를 사용할 수 있습니다.

Function Num2Time(Raw) As String     Dim NumHours As Integer     Dim NumMinutes As Integer     Dim NumSeconds As Integer     Dim NumFrames As Integer     Dim RemainingTime As Long

Application.Volatile

NumHours = Raw \ (CLng(30  60)  60)

RemainingTime = Raw Mod (CLng(30  60)  60)



NumMinutes = RemainingTime \ (60 * 30)

RemainingTime = RemainingTime Mod (60 * 30)



NumSeconds = RemainingTime \ 30     RemainingTime = RemainingTime Mod 30

NumFrames = RemainingTime

Num2Time = Format(NumHours, "00") & ":" & _       Format(NumMinutes, "00") & ":" & _       Format(NumSeconds, "00") & ":" & _       Format(NumFrames, "00")

End Function

두 함수를 결합하여 시간과 함께 몇 가지 수학을 할 수 있습니다. 예를 들어 A4 셀의 시간이 00 : 29 : 10 : 10이고 A5 셀의 시간이 00 : 16 : 12 : 23이라고 가정합니다. 다음 수식을 셀에 넣으면 두 시간의 차이를 알 수 있습니다.

=Num2Time(Time2Num(A4)-Time2Num(A5))

결과는 00 : 12 : 57 : 17입니다.

여기에 제시된 예는 기초적인 것입니다. 오류 처리를 고려하지 않거나 사용 시간에 대한 제한 검사를하지 않습니다. 필요에 맞게 예제를 확장하거나 타사 소스를 살펴볼 수 있습니다. 예를 들어, 다음 URL에서 NTSC 및 PAL 시간에 대한 설명 (샘플 통합 문서 포함)을 찾을 수 있습니다.

http://www.kenstone.net/fcp_homepage/timecode_spreadsheet.html

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (3100)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다. 여기에서 Excel (Excel 2007 이상)의 리본 인터페이스에 대한이 팁 버전을 찾을 수 있습니다.

link : / excelribbon-Calculating_TV_Time [TV 시간 계산].