문제

나는 두 날짜를 비교하여 동일한 지 확인하기 위해 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top