시간 표시 줄 (1 분에 1 개의 셀, 매우 작은 너비)을 나타내는 많은 셀이 포함 된 표가 있으며이 표에 3 단계가 포함 된 작업을 시각화하고 싶습니다. 예를 들어, 준비가 10:00에 시작되고 실제 작업이 10:23에 시작되면, 그 시간 사이의 23 개의 셀은 모두 빨간색으로 표시되어야합니다. 그것을위한 시간 값 (취해진 경우 셀 Excel은 조건부 서식 지정 수식을 변경합니다.
17 18 19 20 21 22 23 00 01 02 03 04
| | | | | | | | | | | |
OR1______________++++=================****______________++=========***____________
OR2______________________+++++======================*****_________________________
각 포맷
: 그리고 다음 55, 23 절 11시 18분 사이의 실제 동작을 나타내는 이와 같이, 등, 녹색 및이어야 여분의 행에서)는 시작/끝 값 중 두 자 사이에 있으며 자정 무렵에 숫자가있는 특별한 경우입니다.이 작업을 자동화하려면 (시간이 많이 걸리는 작업이 많음) 시간의 테이블 (3 단계의 시작과 끝의 4 개의 시간 열과 작업실을 나타내는 1 개의 열)을 실행하는 매크로를 작성하고 각각 제대로 작동합니다 세 조건부 서식, (유색 세포와) 큰 테이블의 컬럼 (I 수동으로 확인) :
T = time.Address(RowAbsolute:=True, ColumnAbsolute:=False)
Z1 = t1.Address
Z2 = t2.Address
Z3 = t3.Address
Z4 = t4.Address
fnc1 = "=OR(AND(" & Z1 & "<=" & T & ";" & T & "<" & Z2 & ");AND(" & Z2 & "<" & Z1 & ";" & Z1 & "<=" & T & ");AND(" & T & "<" & Z2 & ";" & Z2 & "<" & Z1 & "))"
fnc2 = "=OR(AND(" & Z2 & "<=" & T & ";" & T & "<" & Z3 & ");AND(" & Z3 & "<" & Z2 & ";" & Z2 & "<=" & T & ");AND(" & T & "<" & Z3 & ";" & Z3 & "<" & Z2 & "))"
fnc3 = "=OR(AND(" & Z3 & "<=" & T & ";" & T & "<" & Z4 & ");AND(" & Z4 & "<" & Z3 & ";" & Z3 & "<=" & T & ");AND(" & T & "<" & Z4 & ";" & Z4 & "<" & Z3 & "))"
Dim currentLine As Range
Set currentLine = Range(Cells(dline, data.Column), Cells(dline, data.Column).Offset(0, width))
Set frmt1 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc1)
Set frmt2 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc2)
Set frmt3 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc3)
frmt1.Interior.Color = RGB(255, 0, 0)
frmt2.Interior.Color = RGB(0, 255, 0)
frmt3.Interior.Color = RGB(0, 0, 255)
'(T1)을'.. 'T4'이 테이블의 셀 시작과 /입니다 'time'은 시각화 테이블의 각 열에 대한 리터럴 시간 (10:01, 10:02, ..., 'data'와 동일한 너비)을 가진 추가 행이며 'data'는 시각화입니다 table이고 'dline'은 현재 형식이 지정된 행의 수이고, calcul 수술실에 따라 다르다. '너비'는 이제 보통 300이지만, 일반적으로 60 * 표시된 시간 (따라서 해당 시간의 분 수)입니다.
이 모든 것은 오류없이 작동하며 올바른 형식의 문자열을 생성합니다 (디버깅 모드에서 fnc1..fnc3을 확인했습니다).
=OR(AND($KR$10<=C$13;C$13<$KS$10);AND($KS$10<$KR$10;$KR$10<=C$13);AND(C$13<$KS$10;$KS$10<$KR$10))
C13 시간의 첫 번째 셀이며, KR10과 KS10은 'T1'과 'T2'이 작업 (준비의 시작을위한, 그리고 시작의 위치 : 그들은 그들이해야하는이, 같이 실제 운영/준비 종료).
하지만 형식 문자열이 Excel에 저장되면 (매크로 완료) 더 이상 동일하지 않습니다.
=OR(AND($KR$10<=XCS$13;XCS$13<$KS$10);AND($KS$10<$KR$10;$KR$10<=XCS$13);AND(XCS$13<$KS$10;$KS$10<$KR$10))
같은 보통 무언가가 나오는 - 유일한 상대 하나 인 '시간'셀, 이상한, 높은 값을 변경 ('XCS'의 값 'WTC', 'XBR'...). 상대방 행을 상대적으로 만들면 나도 163552와 같은 숫자를 얻을 수 있습니다.
IronPython에서 처음 시도 했으므로 (매크로에서 실제로 해당 코드에서 번역 된) 동일한 방법으로 작업하고 동일한 오류가 발생했습니다. 매크로와는 별개의 것으로 보입니다. 내가 anyhing을 찾을 수 없기 때문에
가 난 가끔, 이제 ... 진짜 오류가되는 I에게
을 강하게 의심 Excel을 내가 테스트를 위해 손으로 공식을 할당하고 오류의 같은 종류를 가지고, 그래서 비슷한 오류에 대해서, 기억력이 있어야 할까? 너무 많은 세포? 또는 내 컴퓨터/설치/코드/...에 특정한 것이 있습니까?Excel 2007을 사용합니다. '데이터'표의 셀은 특별히 서식이 지정되어 있지 않으며 시간은 모두 hh : mm : ss입니다.
전체 내용이 어떻게 작동하는지 충분히 분명히 알았 으면 좋겠습니다. 그렇지 않으면 더 많은 코드 또는 필요한 정보를 요청하십시오.
여기서 너비의 값은 무엇입니까? 간격 띄우기 (0, 너비). 아직 이른 아침이지만 ColumnAbsolute : = False를 T로 설정하면 셀에 수식을 넣을 때 디버거에서 수식을 확인할 때와 비교할 때 예기치 않은 결과가 발생할 수 있습니다. – deusxmach1na
+ 1 질문에 대한 설명을 위해 :) –
VBA를 사용하여 조건부 서식을 적용 할 때 현재 활성 셀의 위치에 따라 다른/이상한 결과가 발생할 수 있습니다. 범위에서 첫 번째 셀을 선택하십시오. 조건을 추가하기 전에 cf를 적용하십시오. http://stackoverflow.com/questions/8316662/conditional-formatting-in-vba-based-on-functions/8318151#8318151 –