Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


29162 / 76732 ←次へ | 前へ→

【52855】Re:Caseに複数の条件
回答  neptune  - 07/12/6(木) 12:05 -

引用なし
パスワード
   ▼セイチ さん:
こんにちは


>重ねて質問してしまって申し訳ないのですが、
>Sub t()
>Dim r As Range
>  Set r = Application.Union(Range("B5"), Range("C5"), Range("D5"))
>  MsgBox CheckData(r)
>  Set r = Nothing
>End Sub
>のプログラムで、何故私の求める動きが出来るのでしょうか?
>この中に、
>「B5は入力あり」かつ「C5は入力なし」かつ「D5は入力あり」
>の条件が含まれているのですか?
↑はFunction CheckDataで判定しています。ステップ実行で1行ずつ実行
してみて下さい。動きがわかりますから。この辺りは基本ですから
よく勉強して於いてくださいね。

ちょっとサンプルを改造しました。若干ですが、説明を加えましたから
これで解っていただけますかね???

Sub t()
Dim r As Range
'  '変数を使う書き方
'  Set r = Application.Union(Range("B5"), Range("C5"), Range("D5"))
'  If CheckData(r) = True Then
'    MsgBox "条件を満たしています。"
'  Else
'    MsgBox "条件を満たしていません。"
'  End If
'  Set r = Nothing

  '変数を使わない
  If CheckData(Range("B5,C5,D5")) = True Then
    MsgBox "条件を満たしています。"
  Else
    MsgBox "条件を満たしていません。"
  End If
End Sub

'判断部分のみを関数化
'Boolean型を戻しているが、必要に応じ何型でもOK、独自に型を作っても良い
(EnumステートメントをHelpで調べて下さい。)
'引数
'pData Range型:評価したいRange
'戻り値:Boolean型 条件を満たす TRUE、満たさないFALSE を返す
Private Function CheckData(pData As Range) As Boolean
  Dim ret As Boolean
  '「B5は入力あり」かつ「C5は入力なし」かつ「D5は入力あり」のとき「「成功!」
  If (Not IsEmpty(pData(1, 1)) And IsEmpty(pData(1, 2))) And Not IsEmpty(pData(1, 3)) Then
    ret = True
  Else  '他の条件があればelseifにしてここに記述を追加する
    ret = False
  End If
  CheckData = ret
End Function

こうするメリットは、判断条件が変わっても関数部分を書き換えるだけで
Mainプロシージャは変更しなくてすみます。大きなメリットです。

※これはサンプルなので、データチェック、エラーハンドルなどは省略してます
から、そのままで実践には使わない方が身の為です。

詳しくはHelpの
visual basic プログラミングのヒント
 →Sub プロシージャと Function プロシージャの呼び出し
 →オブジェクト変数の作成
などをご覧下さい。

1 hits

【52817】Caseに複数の条件 セイチ 07/12/4(火) 23:34 質問
【52820】Re:Caseに複数の条件 りん 07/12/5(水) 6:40 回答
【52840】Re:Caseに複数の条件 neptune 07/12/5(水) 20:42 回答
【52842】Re:Caseに複数の条件 ponpon 07/12/5(水) 21:57 発言
【52844】Re:Caseに複数の条件 セイチ 07/12/5(水) 23:31 お礼
【52855】Re:Caseに複数の条件 neptune 07/12/6(木) 12:05 回答
【52845】Re:Caseに複数の条件 ichinose 07/12/5(水) 23:32 発言
【52889】Re:Caseに複数の条件 セイチ 07/12/7(金) 22:46 お礼

29162 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free