IF 수식을 단축 할 수있는 솔루션을 찾고


9

다음 구조의 긴 수식이 있습니다.

=IF(!X!<>0,!X!+A1,"")

어디 ! X! 매우 긴 공식입니다.

! X 반복을 피하는 해결책이 있습니까? 두번? 두 가지 이유가 필요합니다.

  1. 시트 사용자가 수식을 읽을 수있게하려면
  2. 처리 시간을 줄이려면

도움을 주셔서 감사합니다.

고마워, Dio


1
원하는 경우 To reduce the process time결과를 어딘가에 저장해야합니다. 그렇지 않으면 조건이 일치 할 때 Excel에서 값을 다시 계산해야합니다. 부서는 또한 매우 비용이 많이 드는 작업입니다
phuclv

2
궁금한 점이 있으시다면 가능한 한 긴 공식을 "골프"시켰습니까? 더 짧게하기 위해 명명 된 범위를 추가 할 수 있습니까?
BruceWayne

긴 수식을 더 읽기 쉽게하려면 alt + return을 사용하여 인수를 다른 줄로 분리하십시오. 단점은 사용자가 수식 막대의 높이를 확장하지 않으면 수식이 불완전하게 보입니다.
Brad Smith

답변:


12

또 다른 방법은 이중 반전 을 사용하는 것입니다 .

=IFERROR(1/(1/really_long_formula)+A1,"")

는 IF really_long_formula이 평가 0 , 당신은 0으로 나누기를 얻을 것하고는 IFERROR()그것을 잡을 것입니다!

이 요구 사항을 처리 하는 일반적인 방법 (및 최선의 방법) 은 도우미 셀을 사용하는 것입니다.


7
부동 소수점 나누기로 인해 정밀도가 손실 될 수 있습니다.
phuclv

3
@ LưuVĩnhPhúc 당신은 완전히 정확합니다! AFH 방식은 가장 좋은 방법입니다!
게리의 학생

이것은 좋은 더러운 속임수입니다. 나는 그것을 많이 사용하지 말고 최후의 수단으로 누가 압니까?
André Chalella

3
참고 : 정밀 손실 이있을 수는 있지만 관련 문제는 거의 없습니다. 1/1/xExcel에서 100,000 개의 난수로 여러 번 테스트 했으며 반올림 오류가있는 시간의 1.4 % 만 발생했습니다. 내가 찾은 최대 상대 오차는 1.6e-16이며 실제로는 0입니다. 또한 흥미롭게도 정수는 반올림 오류를 표시하지 않습니다 (0에서 1e14까지 여러 범위에서 테스트 됨). 따라서이 답변은 순도 / 청결성 관점에서 눈살을 찌푸 릴 수 있지만 실제 계산 관점에서는 그렇지 않습니다.
André Chalella

1
게리의 솔루션이 최고라고 생각합니다. 먼저 (Andre도 언급했듯이) 깨끗하고 다른 사용자가 읽을 수 있기 때문입니다. 둘째, 그것은 나의 필요를 충족시키기 때문입니다. 복잡하거나 긴 정수가 없습니다. 이 방법을 선택한 사용자가이 솔루션의 장단점에 대해 알고 자하는 의견을 읽어 보시기 바랍니다.
Dio

23

분명한 대답은 공식을 메인 시트에서 멀리 떨어진 작업 셀에 넣는 것입니다. 예를 들어를 사용하는 경우 다음 H1과 같이 설정하십시오.

=!X!

그러면 수식이됩니다.

=IF(H1<>0,H1+A1,"")

이것은 다른 프로그래밍 언어에서 수행하는 작업의 전형입니다.


도움말 열을 추가 할 수 없습니다. 어쨌든 고마워
Dio

2
@Dio 보이지 않으면 열을 숨기십시오. 열 / 범위의 이름을 쉽게 읽을 수 있도록 만들 수도 있습니다.
phuclv

4
@ 디오-OK. 허용되는 대답은 다소 영리하지만 반올림으로 인해 특히 정수 데이터를 처리하는 경우 정확도 1/(1/x)가 항상 정확하지 않을 수 있습니다 ( 항상 정확하게 동일하지는 않음 x). 더 일반적으로 적용 할 수 없습니다 (예 : 0보다 작은 지 확인). (댓글은 @ LưuVĩnhPhúc의 답변으로 수락되었습니다.)
AFH

당신의 조언과 의견에 감사드립니다. 여전히 새로운 제안이 있는지 확인하기 위해 질문을 계속 열어 두겠습니다.
Dio

2
긴 공식을 보는 것이 도움이 될 것입니다. 작업 셀 외에도 ​​공식을 포함하는 워크 시트에서 이름을 정의 할 수 있습니다
datatoo

3

결과가 ""틀린 경우에 정말로 필요 합니까? 만에 셀이 필요한 경우 모양 빈을 (예를 들어, 당신은 같은 것을 사용하지 않습니다 =ISNUMBER(), 당신은 사용할 수 있습니다 나중에에를) 조건부 서식을 거짓 경우 내용을 숨 깁니다.

셀에 적용 할 조건부 서식아무것도 표시하지 않도록 다음 ""과 같이 사용자 정의 형식입니다 (포르투갈어로 있지만 아이디어를 얻음).

빈 셀에 대한 사용자 정의 형식

셀의 수식은 예상대로 간단 =!X!+A1합니다.

조건부 서식 수식 은 일=!X!=0있지만 !X!원하지 않는 ( "포인트 2")를 다시 계산 해야합니다. 그것은 사용하여 세포 자체를 활용하는 것이 좋습니다 =B1=A1(우리의 셀을한다 가정하면 B1 ) - 그 의미 것이다 !X! = 0.

셀 내용이 실제로 필요하더라도 ""워크 시트에서 일반적으로 약간의 변경을 수행하여이 방법을 사용할 수 있습니다. 이 경우 상황을 설명하는 의견을 남겨주십시오.


1

도움말 열을 추가 할 수 없습니다. 어쨌든 고마워

도우미 열을 추가 할 수없는 경우 전체 워크 시트를 추가하지 않겠습니까? 여기에는 몇 가지 장점이 있습니다.

  • 도우미 셀은 별도의 워크 시트에 있기 때문에 사용할 수있는 공간을 차지하지 않습니다.
  • 셀 이름을 지정한 다음 이름으로 지정할 수 있습니다 . 예 :=IF(X<>0,X+A1,"")
  • 둘 이상의 셀에서이 작업을 수행해야하는 경우 다음을 수행 할 수 있습니다.
    1. 헬퍼 워크 시트 이름을 "헬퍼"로 바꿉니다.
    2. 도우미 방정식을 주 방정식과 같은 셀에 넣습니다 (이를 호출하겠습니다) D5.
    3. helper!D5기본 시트에서와 같이 셀을 지정하십시오 .
  • 필요한 경우 도우미 시트를 숨길 수 있습니다.
  • 두 번 평가하는 것보다 빠릅니다.
  • 정밀도를 잃지 않습니다.

내가 볼 수있는 단점은 다음과 같습니다.

  • sheetname!D5대신 메인 시트에서 이름이없는 셀을 참조해야합니다 D5.
  • 이제 공식은 하나가 아닌 두 부분으로되어 있습니다.
  • 워크 시트 확산.

장점과 단점을 비교해 보면 많은 사용 사례에서 이것이 좋은 솔루션이라고 생각합니다. 내가 생각할 수는 없지만 최적이 아닌 상황이 있습니다.


1
좋은 대답입니다. 내가 볼 수있는 단점은 다음과 같습니다. 1. 이제는 큰 수식이 숨겨져 있기 때문에 사용자에게 더 간단하게 계산 하는 데 도움이되지 않습니다 . 2. 많은 통합 문서가 이미 시트로 가득합니다. 숨기더라도 숨겨지지 않은 많은 시트를 통과해야 할 수도 있습니다. 그 외에는 좋은 해결책입니다.
André Chalella

@ AndréNeves 감사합니다! 그 첫 번째 것이 나에게 일어 났지만 단점 섹션 을 작성할 때까지 잊어 버렸습니다 .
wizzwizz4

1

아직 제안되지 않은 옵션은 사용자 정의 함수를 작성하는 것입니다. 메뉴 막대에서 개발자 탭을 켜고 (google it) 모듈을 만들어야합니다.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

그런 다음 수식 입력 줄에서

=udf_myCalc(A1)

참고 :이 파일은 이제 .xlsx (매크로 포함) 파일이되며 매크로는 악의적 인 목적으로 사용될 수 있으며 일부 전자 메일 필터는이를 차단하므로 회사 네트워크에서 추가 권한이 필요할 수 있습니다. 함수는 문서화되지 않았으므로 함수가 수행하는 작업에 대한 메모를 제공해야하며 모든 함수 udf_xxxxx를 호출하여 내장 함수가 아님을 분명히 알 수 있습니다.

UDF와 함께 다른 GOTCHA도 있습니다. 몇 가지 유용한 팁은이 링크를 참조하십시오. http://www.decisionmodels.com/calcsecretsj.htm

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.