
댓글을 바탕으로 제가 무엇을 요구하는지 명확히 하고 있습니다.
여러 셀에 걸쳐 중첩된 수식을 단일 수식으로 병합하고 싶습니다.
다음 예는 수동으로 수행할 수 있는 방법을 보여주기 위한 것입니다. 그러나 수식은 모든 종류/유형일 수 있으며 아래 예와 전혀 관련이 없습니다.
코드/도구/Excel 자체를 사용하여 다음이 가능한지 궁금합니다.
이미지에서 볼 수 있듯이 in hours
수식은 매우 간단하지만 실제로는 다른 셀의 수식 묶음으로 구성됩니다. 하나의 거대한 수식에 모든 수식을 사용하여 생성된 하나의 수식을 얻어서 중간계산을 없애는 것이 가능한지 궁금합니다.
이런 방식으로 대규모 수식을 디자인하고 디버깅하는 것은 쉽지만 프로덕션 환경에서는 경험이 없는 사용자가 시트를 수정하려고 시도하여 수식의 일부를 쉽게 파괴할 수 있습니다. 시트를 잠그고 다른 항목을 잠금 해제하여 보호할 수 있지만 수식 범위를 확장할 수 없거나 새 행을 추가할 수 없는 등의 의도하지 않은 부작용도 있습니다.
그래서 생산을 위해 이런 식으로 구성된 것에 대해 단일 수식 답변을 얻는 것이 가능한지 궁금했습니다.
위의 예에서는 문자열 시간에서 숫자 시간을 계산하려고 합니다.
in hours = in seconds / 3600 = O2 / 3600
in seconds = HOURS * 3600 + MINUTES * 60 + SECONDS
HOURS = extract digits if they exist between 'h' and beginning of string
MINUTES = extract digits if they exist between 'h' and 'm'
SECONDS = extract digits if they exist between 'm' and end of string
따라서 수식을 수동으로 대체하면 다음과 같이 나올 것입니다.
in hours = (HOURS * 3600 + MINUTES * 60 + SECONDS) / 3600
= (extract digits if they exist between 'h' and beginning of string * 3600 + extract digits if they exist between 'h' and 'm' * 60 + extract digits if they exist between 'm' and end of string) / 3600
보시다시피 이 예제는 매우 간단하지만 다른 복잡한 복합 함수에도 이를 수행할 수 있는지 궁금합니다.
Excel은 이미 일종의 방식으로 이 모든 계산을 자체적으로 수행합니다.AST나는 이미 순환 종속성 등을 감지했기 때문에 가정합니다. 그렇다면 스스로 할 수 있는 방법이 있어야 할까요? 아니면 동일한 공식을 추출하기 위해 Excel 기반에 연결하시겠습니까?
답변1
원하는 작업을 수행하는 것이 가능할 수도 있지만 사용할 수 있다면 UDF가 더 깔끔할 수 있습니다.
Option Explicit
Function MyHrs(MyType As String, target As String) As Single
Dim x As Long, y As Long, z As Long
Dim Hrs As Long, Mns As Long, Ss As Long
On Error Resume Next
x = InStr(target, "h")
y = InStr(target, "m")
z = InStr(target, "s")
Hrs = Left(target, x - 1)
Mns = Mid(target, x + 1, y - x - 1)
Ss = Mid(target, y + 1, z - y - 1)
If MyType = "h" Or MyType = 1 Then MyHrs = Hrs + Mns / 60 + Ss / 3600
If MyType = "m" Or MyType = 2 Then MyHrs = Hrs * 60 + Mns + Ss / 60
If MyType = "s" Or MyType = 3 Then MyHrs = Hrs * 3600 + Mns * 60 + Ss
End Function
Alt + F11을 사용하여 개발자 창을 연 다음 모듈을 삽입하고 코드를 붙여넣습니다. 시트에서는 다음과 같이 사용합니다.
이것은 생성된 오류를 피하기 위해 좀 더 코딩을 더 많이 할 수 있지만 개념을 보여주기 위해 작동해야 합니다.