次の条件に見合うマクロををご教示いただければ幸いです

B1の値がXならA1の日付に30日加えた日付けをC1にかえす
B1の値がYならA1の日付に15日加えた日付をC1にかえす
B1の値がZならA1の日付をそのままC1にかえす

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/09/04 12:16:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:poppyday No.1

回答回数96ベストアンサー獲得回数21

ポイント20pt

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

でいいのでは?

その他の回答4件)

id:poppyday No.1

回答回数96ベストアンサー獲得回数21ここでベストアンサー

ポイント20pt

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

でいいのでは?

id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント20pt

マクロとありますが 数式でも できます。

C1に

=IF(B1="X",A1+30,IF(B1="Y",A1+15,IF(B1="Z",A1,"")))

と入れて C1の書式設定を 日付にしてあげればいいです。

id:Silvanus No.3

回答回数180ベストアンサー獲得回数71

ポイント20pt

下記の式を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)。

id:Silvanus No.4

回答回数180ベストアンサー獲得回数71

ポイント20pt

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]の値が入力されているセル位置が

限定されることもありませんし、条件・処理の追加も容易ですね。

id:LimgHT No.5

回答回数30ベストアンサー獲得回数10

ポイント20pt

直接な回答ではありません。

マクロを使う背景についての情報が無かったので…(検索できた人のためにも)参考に


マクロは回答者1ので問題ないと思います。

ただ、この程度の機能はセルC1に次の式を入れて実現するのが普通かと。マクロの出番じゃない。


=if(B1="X",A1+30,if(B1="Y",A1+15,if(B1="Z",A1,"")))

  • id:poppyday
    回答者1です。「ベストアンサー」までもらってしまったのに誠に申し訳ありませんが、回答にバグがあります。(_ _;)

    >B1の値がYならA1の日付に15日加えた日付をC1にかえす
    ということでしたので、回答中の

    Range("C1").Value = Range("A1").Value + 10

    Range("C1").Value = Range("A1").Value + 15
    に修正してくださいませ。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません