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.