셀을 삭제하지 않고 변수를 할당하는 원래 내용
문제
나는 두 날짜를 비교하여 동일한 지 확인하기 위해 Excel에서 VBA를 설정하고 있습니다. 내가 겪고있는 문제는 셀의 변수를 "실제 상태"에 할당 한 후 셀에서 모든 것을 삭제한다는 것입니다. 따라서 "realStartDate"는 올바르게 할당되지만 동시에 삭제됩니다.
여기 내 코드가 있습니다. 어떤 도움도 환상적입니다. (이 ActiveCell은 모두 상대적으로 참조하기 때문입니다)
Dim ActualStartDate, ProjectedStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = ProjectedStartDate
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Range("A1").Interior.Color = RGB(0, 0, 255)
End If
그것이 실행되면, 그것은 내 테스트 날짜가 동일하고 셀을 색칠하는 것으로 인식합니다. "실제 상태"가 포함 된 셀의 내용을 삭제합니다.
해결책
이 모든 일은 하나의 셀을 옮기고, 하나의 세포를 왼쪽으로 움직이고, 그 셀의 값을 아무것도 대체하는 것입니다.
Dim ActualStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate
실제 스타트 데이트 변수를 생성하지만 아무것도 할당하지 않습니다. 따라서 셀에 셀에 실제 날짜가 셀을 적용하면 기존 날짜를 "삭제"합니다.
스프레드 시트를 어떻게 설계했는지 모르기 때문에 오프셋에 대해 잘 모르겠지만 이와 같은 일을하고 싶을 것입니다.
Sub Button1_Click()
Dim ActualStartDate, ProjectedStartDate
ActiveCell.Offset(-1, -1).Select
ActualStartDate = ActiveCell.FormulaR1C1
ActiveCell.Offset(1, 0).Select
ProjectedStartDate = ActiveCell.FormulaR1C1
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
End If
End Sub
다른 팁
값을 변경하기 전에 셀을 선택하는 것은 불필요하며 FormulaR1C1
공식의 범위에 들어 가지 않기 때문에 불필요한 것입니다. 다음은 정확히 동일하게 수행해야하지만 따르고 디버그하기가 더 쉽다고 생각합니다.
** 오프셋에 대한 Jim과 동일한 경고, 그들은 조금 이상하게 보이지만 의도 된 것일 수 있습니다 **
Dim ActualStartDate, ProjectedStartDate
ActualStartDate = ActiveCell.Offset(-1, -1)
ProjectedStartDate = ActiveCell.Offset(1, 0)
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
End If
변수의 유형을 명시 적으로 선언합니다 Date
또한 내부적으로 저장되므로 좋은 생각입니다. Variant
더 많은 메모리가 필요하고 Excel이 데이터를 처리하는 방법을 결정해야 할 책임이 남아 있기 때문에 예상치 못한 결과를 초래할 수있는 데이터 유형.
Dim ActualStartDate as Date
Dim ProjectedStartDate as Date
ActualStartDate = ActiveCell.Offset(-1, -1)
ProjectedStartDate = ActiveCell.Offset(1, 0)
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
End If