元のコンテンツを削除せずにセルに変数を割り当てる
質問
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