선생님, 수정해주신 코드에 주석을 달아보았는데요.. 제가 작성한 주석이 맞는건지 잘모르겠습니다
바쁘시겠지만 한번 검토해주시면 감사드립니다~^^
Sub total()
Dim rngStart As Range, rX As Range, rngTarget As Range
Dim rngAR As Range
Dim rngAR2 As Range '제가 임의로 변수를 추가해봤습니다
Application.ScreenUpdating = False
Set rngStart = [C7]
Set rngTarget = Range(rngStart, rngStart.End(xlDown))
For Each rX In rngTarget
If IsNumeric(rX.Offset(-1, 0)) Then 'C8
Set rngAR = rX.Offset(-1, 0).Resize(2) 'C8:C9
Set rngAR2 = rX.Offset(0, 0).Resize(2) 'C9:C10
rX.Offset(0, 1) = Round(Application.Average(rngAR), 1) 'D9 <= ROUND(AVERAGE(C8:C9),1)
rX.Offset(-1, 1) = Round(Application.Average(rngAR2), 1) 'D10 <= ROUND(AVERAGE(C9:C10),1)
'IF(AND(D9<0,D10<0),"B",IF(C10>D10,"A","B"))
If rX.Offset(0, 1) < 0 And rX.Offset(-1, 1) < 0 Then 'IF(AND(D9<0,D10<0)
rX.Offset(0, 2) = "B" 'E10 <= "B"
Else
rX.Offset(0, 2) = IIf(rX > rX.Offset(0, 1), "A", "B") 'E10 <= IF(C10>D10,"A","B"))
End If
If IsNumeric(rX.Offset(-2, 0)) Then 'C7
rX.Offset(0, 4) = Application.Average(rngAR) - Application.Average(rngAR.Offset(-1, -1)) 'G9 <= AVERAGE(C8:C9)-AVERAGE(B7:B8)
rX.Offset(0, 5) = rX.Offset(0, 4) - rX.Offset(-1, 4) 'H9 <= G9-G8
With rX.Offset(0, 3) 'F9 ??
'IF(G9>0,"A",IF(AND(G9<0,H9<0),"B",IF(COUNTIF(E7:E9,"A")<2,E8,E9)))
If .Offset(-1, 1) <> "" Then 'IF(G9 <> "")
If .Offset(-1, 1) > 0 Then 'IF(G9>0)
.Value = "A" 'F10 <= "A"
ElseIf .Offset(-1, 1) < 0 And .Offset(-1, -1) < 0 Then 'IF(AND(G9<0,H9<0)
.Value = "B" 'F10 <= "B"
ElseIf Application.CountIf(.Offset(-3, -1).Resize(3), "A") < 2 Then 'IF(COUNTIF(E7:E9,"A")<2)
.Value = .Offset(-2, -1) 'E8
Else
.Value = .Offset(-1, -1) 'E9
End If
End If
End With
End If
End If
Next
Application.ScreenUpdating = True
End Sub
첫댓글 열심히 하시는 군요^^
=>
[c7]가 rX 시작셀인데 두번 순환후 [c9]셀을 기준으로
주석을 달았군요
어차피 rX변수가 순환하니까 'rngAR2' 변수가 들어간 코드는 삭제해도 무방합니다.
---------------------------------------------------------------------------
지금와서 살펴보니 주석없인 코드를 알아보기 힘들군요 다음엔 신경쓰겠습니다.
끝으로 if절이 넘많으니 산만한 느낌?
Select~Case 구문으로 정리하든지 아니면 이름정의한 변수를 사용하든,
코딩을 알아보기 쉽게 정리할 필요가 있군요
한편으론,
Range.Formula를 이용한 다음 최후엔 값으로 받는법도 있으니 연구하시길~~
답변감사합니다^^
근데 혹시 아래처럼 연산식을 변수로 치환한후 그 변수의 좌표를 변경하는 방법좀 여쭤볼수있을까요?
계속 오류가 뜹니다^^;
간단히 문의드리면..
아래와 같습니다.
Dim rngAR As Range
Dim rngAR2 As Range
Dim A2 As Double
Set rngAR = rX.Offset(-1, -1).Resize(2) 'rngAR 에 B7값 입력
Set rngAR2 = rX.Offset(0, -1).Resize(2) 'rngAR2 에 B8값 입력
rX.Offset(0, 4) = Round(Application.Average(rngAR), 2) 'C9 : C10 평균
rX.Offset(0, 5) = Round(Application.Average(rngAR.Offset(-1, 0)), 2) 'C8 : C9 평균
A2 = Round(rX.Offset(0, 4) - rX.Offset(0, 5), 1) '연산식을 변수로 치환
Range("A1") = A2
' ================= 질문시작===================
If A2 < 0 And A2 < 0 Then '변수로 제어문 실행
'If A2.Offset(-1, 0) < 0 And A2.Offset(-1, 0) < 0 Then '위의 식을 이렇게 바꾸고 싶습니다.. 계속 수식오류라고 뜹니다..
' ================= 질문끝=====================