Excel VBA質問箱 IV

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

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


8565 / 13644 ツリー ←次へ | 前へ→

【32545】コードの記述について(急ぎません) NK 05/12/17(土) 1:53 質問[未読]
【32546】補足です・・・ NK 05/12/17(土) 2:00 発言[未読]
【32547】Re:補足です・・・ Ned 05/12/17(土) 2:28 発言[未読]
【32548】Re:補足です・・・ Ned 05/12/17(土) 2:37 発言[未読]
【32549】ありがとうございました! NK 05/12/17(土) 2:48 お礼[未読]

【32545】コードの記述について(急ぎません)
質問  NK  - 05/12/17(土) 1:53 -

引用なし
パスワード
   いつも参考にさせて頂いております。
同じようなコードを複数行書く場合、FORステートメント等の繰り返しや
WITHステートメント等を使って書く事が多いと思います。
次のような場合、コードをスッキリ纏める記述の仕方、あるいは
ステートメント等を使ってうまく纏めるような事はできますか?
処理は正常に動いているので見た目だけの問題なのですが・・・
くだらない質問でスミマセン。。。

SUB 日付判定()
 Dim a As String
 a = "OK"
 If Not IsDate(Range("B2")) Then GoTo Error_Step
 If Not IsDate(Range("B8")) Then GoTo Error_Step
 If Not IsDate(Range("B10")) Then GoTo Error_Step
 If Not IsDate(Range("B12")) Then GoTo Error_Step
GoTo End_Step
Error_Step:
 a = "NG"
End_Step:
 Msgbox "チェック結果:" & a
END SUB

【32546】補足です・・・
発言  NK  - 05/12/17(土) 2:00 -

引用なし
パスワード
   > If Not IsDate(Range("B2")) Then GoTo Error_Step
> If Not IsDate(Range("B8")) Then GoTo Error_Step
> If Not IsDate(Range("B10")) Then GoTo Error_Step
> If Not IsDate(Range("B12")) Then GoTo Error_Step

この対象のセルは固定ではあるものの
規則的に並んでいたりするワケではありません。
全部で10個程度のセルを対象にするつもりです。

【32547】Re:補足です・・・
発言  Ned  - 05/12/17(土) 2:28 -

引用なし
パスワード
   ▼NK さん:
例えば、↓な感じ?^ ^
Sub 日付判定改()
  Dim a As String
  Dim r As Range
  a = "OK"
  For Each r In Range("B2,B8,B10,B12,C3,C9,C11:C14")
    If Not IsDate(r.Value) Then a = "NG": Exit For
  Next
  MsgBox "チェック結果:" & a
End Sub

【32548】Re:補足です・・・
発言  Ned  - 05/12/17(土) 2:37 -

引用なし
パスワード
   Sub 日付判定改2()
  Dim a As String, r As Range
  a = "OK"
  For Each r In Range("B2,B8,B10,B12,C3,C9,C11:C14")
    If Not IsDate(r.Value) Then _
      a = r.Address(0, 0) & "/NG": Exit For
  Next
  MsgBox "チェック結果:" & a
End Sub

【32549】ありがとうございました!
お礼  NK  - 05/12/17(土) 2:48 -

引用なし
パスワード
   ▼Ned さん:
>Sub 日付判定改2()
>  Dim a As String, r As Range
>  a = "OK"
>  For Each r In Range("B2,B8,B10,B12,C3,C9,C11:C14")
>    If Not IsDate(r.Value) Then _
>      a = r.Address(0, 0) & "/NG": Exit For
>  Next
>  MsgBox "チェック結果:" & a
>End Sub

単純にRangeオブジェクトで出来たんですね・・・
難しく考えすぎてRangeのヘルプを見ていませんでした。お恥ずかしい。
しかも結果の返し方もわかりやすくなってますし、
こんな時間にもかかわらず本当にありがとうございました!

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