programing

AND() 함수를 이용한 조건부 포맷

codeshow 2023. 10. 24. 21:39
반응형

AND() 함수를 이용한 조건부 포맷

저는 시트에 조건부 서식을 시도하고 있습니다.나는 다음 조건문에 따라 세포에 일정한 색을 채워야 합니다.

=AND((INDIRECT(ADDRESS(4;COLUMN()))>=INDIRECT(ADDRESS(ROW();4)));(INDIRECT(ADDRESS(4;COLUMN()))<=INDIRECT(ADDRESS(ROW();5))))

AND() 함수의 문을 따로 시도해 보면 작동하는 것처럼 보이지만 함수에 문을 합하면 포맷이 발생하지 않습니다.

다음은 몇 가지 배경입니다.현재 열의 4행에는 날짜(DATE1)가 들어 있습니다.또한 "현재 행"(DATE2 및 DATE3)의 D 및 E 열에 날짜가 있습니다.그래서 DATE1이 DATE2와 DATE3 사이에 있다면 셀에 색을 채우고 싶습니다.

공식이 왜 작동하지 않는지 알 수가 없습니다.어떤 도움이라도 주시면 감사하겠습니다.

업데이트(2011년 12월 13일):

이 기능이 필요한 셀에서 호출하는 기능을 구현했습니다.함수는 정수 값을 반환합니다.조건부 서식은 셀의 정수만 사용합니다.이렇게 하면 조건부 포맷이 덜 복잡해집니다.구현하는 함수에 INDIRECTED(ADDESS(ROW());COLUMN())를 전달하고 있습니다.따라서 상대 및/또는 절대 셀을 작업할 때 필요한 모든 정보를 가지고 있습니다.현재 셀을 범위에 따라 함수에 전달하는 더 간단한 방법을 알고 싶습니다.

참고: ActiveCell은 제게 적합하지 않은 것 같습니다.이것은 기능을 실행할 때 선택되는 셀의 데이터를 사용합니다.그건 제가 원하는 게 아니에요.물론 셀 자체를 통과할 수는 있지만(A4, B7 등과 같이) 성능적으로 문제가 되는지는 잘 모르겠습니다.

제 질문에 대답해주신 여러분들께 감사드립니다.

AND()가 조건부 포맷을 깨는 것에 대해서도 같은 문제를 겪고 있었습니다.우연히 AND를 곱셈으로 취급해봤는데 효과가 있어요!AND() 함수를 제거하고 인수를 곱하기만 하면 됩니다.Excel은 부울을 true인 경우 1로 처리하고 false인 경우 0으로 처리합니다.방금 이 공식을 테스트해봤는데 효과가 있는 것 같습니다.

=(INDIRECT(ADDRESS(4,COLUMN()))>=INDIRECT(ADDRESS(ROW(),4)))*(INDIRECT(ADDRESS(4,COLUMN()))<=INDIRECT(ADDRESS(ROW(),5)))

훨씬 더 간단한 공식을 사용할 수 있습니다.저는 그것을 테스트하기 위해 새로운 워크북을 만들었습니다.

Column A = Date1 | Column B = Date2 | Column C = Date3

열 A를 강조 표시하고 조건부 형식 공식을 입력합니다.

=AND(A1>B1,A1<C1)

덜 복잡한 공식에 대해서도 비슷한 문제가 있었습니다.

= If (x > A & x <= B) 

그리고 내가 제거할 수 있다는 것을 발견했습니다.AND그리고 두 가지 비교에 참여합니다.+

  = (x > A1) + (x <= B1)        [without all the spaces]

이것이 덜 복잡한 비교로 다른 사람들에게 도움이 되기를 바랍니다.

이는 열() 및 행() 함수 때문일 수 있습니다.조건부 포맷에서 어떻게 적용되는지 잘 모르겠습니다.이 공식의 값을 사용하여 새 열을 만든 다음 형식 지정 필요에 맞게 사용해 보십시오.

COLUMN()그리고.ROW()전화를 거는 셀에 적용되기 때문에 이런 방식으로는 작동하지 않을 것입니다.조건부 형식에서는 암시적 형식이 아니라 명시적 형식이어야 합니다.

예를 들어 셀에서 시작하는 범위에서 이 조건부 형식을 사용하려면A1, 시도해 볼 수 있습니다.

`COLUMN(A1)` and `ROW(A1)`

Excel은 조건부 서식을 현재 셀에 자동으로 적용합니다.

저는 현재 레거시 코드가 많은 엑셀 어플리케이션을 담당하고 있습니다.이 코드의 가장 느린 부분 중 하나는 각각의 조건부 형식 공식을 설정하는 6열의 500개의 행을 순환하는 것이었습니다.공식은 셀 내용물이 비어 있지는 않지만 명명된 범위의 일부를 형성하지 않는 위치를 식별하는 것이며, 따라서 원래 다음과 같이 쓰여진 셀 자체를 두 번 언급합니다.

=AND(COUNTIF(<rangename>,<cellref>)=0,<cellref><>"")

분명히 각 열(범위)에 있는 모든 셀을 한 번에 업데이트하면 오버헤드가 훨씬 줄어들 것입니다.그러나 위에서 언급한 바와 같이 ADESS(ROW(),COLUMN()을 사용하는 것은 이러한 상황에서는 작동하지 않습니다. 즉, 다음과 같이 작동하지 않습니다.

=AND(COUNTIF(<rangename>,ADDRESS(ROW(),COLUMN(),1))=0,ADDRESS(ROW(),COLUMN(),1)<>"")

저는 빈 문제집을 가지고 광범위하게 실험을 해보았지만 ISBLANK와 같은 다양한 대안을 사용하여 이를 해결할 방법을 찾을 수 없었습니다.결국 이 문제를 해결하기 위해 다음과 같은 두 가지 사용자 정의 함수를 만들었습니다(이 사이트의 다른 곳에 있는 팁을 사용).

Public Function returnCellContent() As Variant

  returnCellContent = Application.Caller.Value

End Function

Public Function Cell_HasContent() As Boolean

  If Application.Caller.Value = "" Then
    Cell_HasContent = False
  Else
    Cell_HasContent = True
  End If

End Function

조건 공식은 다음과 같습니다.

=AND(COUNTIF(<rangename>,returnCellContent()=0,Cell_HasContent())

잘 작동하는군요.

이를 통해 Excel 2010의 코드 속도가 5초에서 1초로 빨라졌습니다.이 코드는 데이터가 응용 프로그램에 로드될 때마다 실행되므로 이러한 절약은 사용자에게 중요하고 눈에 띕니다.또한 훨씬 깨끗하고 재사용이 가능합니다.

저는 이 사이트나 다른 곳에서 이 모든 상황을 다루는 답변을 찾을 수 없었기 때문에 시간을 내어 이 글을 올렸습니다. 하지만 위의 접근 방식을 통해 이익을 얻을 수 있는 다른 사람들과, 업데이트해야 할 셀의 수가 훨씬 더 많을 수도 있다고 확신합니다.

보고된 다른 문제와 동일한 문제 - Excel 2016 사용에 대해 조건 공식을 적용할 때; AND, 조건 곱하기, 조건 추가가 실패했음을 발견했습니다.TRUE/FALSE 논리를 직접 작성해야 함:

=IF($C2="SomeText",0,1)+IF(INT($D2)>1000,0,1)=0

언급URL : https://stackoverflow.com/questions/8473622/conditional-formatting-using-and-function

반응형