質問

ExcelでいくつかのVBAを設定して、2つの日付が同じかどうかを確認します。私が抱えている問題は、セルの変数を「ActualStartDate」に割り当てた後、セルからすべてを削除することです。したがって、「ActualStartDate」は正しく割り当てられていますが、同時に削除されます。

これが私のコードです。どんな助けも素晴らしいでしょう。 (このアクティブセルは、すべて相対参照であるためです)

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

実行すると、テスト日が同じであると認識され、セルに色が付けられます。 " ActualStartDate"を含むセルのコンテンツを削除するだけです

役に立ちましたか?

解決

これが行っているのは、1つのセルを左に1つ移動し、そのセルの値を何も置き換えないことです。

Dim ActualStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate

ActualStartDate変数を作成しますが、何も割り当てません。したがって、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 も不要です。以下はまったく同じように実行する必要がありますが、フォローおよびデバッグする方が簡単だと思います。

  

**オフセットについてのジムと同じ注意、それらは少し奇妙に見えますが、意図されているものかもしれません**

    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 として明示的に宣言することも良いアイデアです。 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