• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロ 条件分岐の仕方)

マクロ 条件分岐の仕方

このQ&Aのポイント
  • マクロの条件分岐について質問です。文字に『N 』が含まれている場合と含まれていない場合で処理を分けたいのですが、他に記述方法はありますか?
  • 質問内容は、マクロの条件分岐についてです。文字列に『N 』が含まれている場合と含まれていない場合で処理を分けたいのですが、他の方法はありますか?
  • マクロの条件分岐について質問です。文字列に『N 』が存在する場合と存在しない場合で処理を分けたいのですが、他の記述方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

If Worksheets("仮シート").Cells(2, b).Value Like "*N*" Then ’Nなら  If (Date - 30) <= c And c <= Date Then   res = 8  ElseIf (Date - 60) <= c And c <= (Date - 31) Then   res = 10  ElseIf c <= (Date - 61) Then   res = 3  End If else ’そうでないなら  if c <= date - 31 then  ’31日以前なら   res = 3  elseif c <= date - 11 then  ’そうではなく11日以前なら   res = 10  elseif c <= date then  ’そうではなく今日以前なら   res = 8  end if End If

kero1192kero
質問者

お礼

Nでない時を、If~Then で記述しながら変だなぁと思っていました。やっぱり変だったと分かって良かったです。それぐらい分かれよって言う質問でしたが、回答して頂きありがとうございました。

その他の回答 (1)

回答No.2

Else については、No.1 さんのご回答を参照してください。その他について書きます。 「(Date - 30) <= c」などは、本来、括弧を取って、「date - 30 <= c.value」です。セルの場合は「.value」が省略できることになっているので、これはこれで許されるのですが。 この場合、c は、セルというオブジェクトを入れる変数として定義されていることになります。オブジェクトだと set する必要があり、お示しのコードでもそのように記述されていますね。 しかし、c の代わりに「Dim d As Date」と宣言すると、set しないで「d = .Columns("C").Find("定期", , xlValues, 1, , 2).Offset(, -1).value」とすることができます。この「.value」も省略が可能です。そして if 文の中では、勿論、「date - 30 <= d」と書き、d はオブジェクト型ではないので「.value」を付けないですね。 いや、やはり variant 型の c を使うという場合は、「End Sub」の 1 行前に、「set c = nothing」の記述を挿入しましょう。 また、今回の条件分岐は if のほかに、select case という構文でもできます。可能なときは select case にしておいたほうが、コードがスッキリして読みやすくなります。 そうすると、次のとおり書き換えることとなります。「Is」が 1 か所のみに使われていることに注意。 If (Date - 30) <= c And …… …… res = 3 End If ↓ Select Case d   Case Is <= Date - 61     res = 3   Case Date - 60 To Date - 31     res = 10   Case Date - 30 To Date     res = 8 End Select

kero1192kero
質問者

お礼

回答が遅くなって申し訳ありません。 色々書いて下さり感謝しています。 variant 型の c を使うという場合は、「End Sub」の 1 行前に、「set c = nothing」の記述を挿入しましょう。 とありますが、何故でしょうか?Set cを無効にしないと不都合が発生するのでしょうか?あまり意味も分からず、ここで教えてもらった記述を、自分の都合のいいように少しかえて作っているもので・・・。よかったら教えて頂けないでしょうか?宜しくお願い致します。

関連するQ&A

専門家に質問してみよう