B1の値がXならA1の日付に30日加えた日付けをC1にかえす
B1の値がYならA1の日付に15日加えた日付をC1にかえす
B1の値がZならA1の日付をそのままC1にかえす
C1のセル書式が日付に設定されている条件で
Sub Macro()
If (Range("B1").Value = "X") Then
Range("C1").Value = Range("A1").Value + 30
ElseIf (Range("B1").Value = "Y") Then
Range("C1").Value = Range("A1").Value + 10
ElseIf (Range("B1").Value = "Z") Then
Range("C1").Value = Range("A1").Value
End If
End Sub
でいいのでは?
C1のセル書式が日付に設定されている条件で
Sub Macro()
If (Range("B1").Value = "X") Then
Range("C1").Value = Range("A1").Value + 30
ElseIf (Range("B1").Value = "Y") Then
Range("C1").Value = Range("A1").Value + 10
ElseIf (Range("B1").Value = "Z") Then
Range("C1").Value = Range("A1").Value
End If
End Sub
でいいのでは?
マクロとありますが 数式でも できます。
C1に
=IF(B1="X",A1+30,IF(B1="Y",A1+15,IF(B1="Z",A1,"")))
と入れて C1の書式設定を 日付にしてあげればいいです。
下記の式をC1に入力して下さい。
=IF(B1="X",A1+30,IF(B1="Y",A1+15,IF(B1="Z",A1,"Error")))
式入力後でも結構ですので、C1のセル表示形式を「日付」に設定して下さい。
B1に入力された値がX、Y、Zの何れにも該当しない場合は
"Error"というテキストを出力する様にしてありますので、
不要であれば当該部分を削除して下さい。
相対参照になっておりますので、この式を他のセルにペイストしても
同様に使用できます(例: 元の日付 D5、[X、Y、Z] E5、結果の日付 F5)。
Excel標準の関数[If()]でなく、マクロでオリジナル関数を作成し使用する場合は
Function DateCal(RDate As Date, CCheck As String) As Date
Select Case CCheck
Case "X"
DateCal = RDate + 30
Case "Y"
DateCal = RDate + 15
Case "Z"
DateCal = RDate
Case Else
DateCal = RDate
End Select
End Function
という様なマクロを入力して、セルC1に
=DateCal(A1,B1)
と入力すればOKです。セルC1の表示形式を「日付」にすることをお忘れなく。
この方法であれば、元の日付と[X、Y、Z]の値が入力されているセル位置が
限定されることもありませんし、条件・処理の追加も容易ですね。
直接な回答ではありません。
マクロを使う背景についての情報が無かったので…(検索できた人のためにも)参考に
マクロは回答者1ので問題ないと思います。
ただ、この程度の機能はセルC1に次の式を入れて実現するのが普通かと。マクロの出番じゃない。
=if(B1="X",A1+30,if(B1="Y",A1+15,if(B1="Z",A1,"")))
コメント(1件)
>B1の値がYならA1の日付に15日加えた日付をC1にかえす
ということでしたので、回答中の
Range("C1").Value = Range("A1").Value + 10
↓
Range("C1").Value = Range("A1").Value + 15
に修正してくださいませ。