• ベストアンサー

ExcelVba 有効なセルかどうかを判定するには

いつもお世話になります。 指定されたセルが有効なセルかどうかを判定したいのですが、何かよい方法がないかどうか質問させていただきました。 ユーザにrangeオブジェクトの引数を入力してもらう形なのですが、指定された値が例えば、aaa などの場合、Range("aaa")となり、当然これは無効なので、そのような指定はできませんよ、としたいのですが、これをエラーとしてハンドリングするのではなく、よい判定方法はないものでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

こんにちは MsgBox Evaluate("ISREF(" & "A1" & ")") ' →「 True 」 MsgBox Evaluate("ISREF(" & "AA" & ")") ' →「 False 」 というようなことでしょうか? ワークシート関数のISREF()です。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

質問者が、発想を変えたら。 Sub test01() Dim x As Range Set x = Application.InputBox("セル範囲=", Type:=8) MsgBox x.Address End Sub のApplication.InputBox("セル範囲=", Type:=8) を知ってますか。知らないのでは。これなら範囲的に可笑しな指定はされずにすむ。 単1セル 複数セル 1行全行 1列全列 全ゼル CTRLを「押して2,3箇所のセル指定 などテストしましたが、正常な指定可能です。 ただCANSELボタンを押したときとかもう少し手当てが必要ですが。

  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.2

例えばRange("aaa")は無効と書かれておりますが、ある範囲に"aaa"と名前が付けられている場合だとRange("aaa")は有効となるはずですので、自分でパターンを1つずつチェックするというのは大変ではないでしょか? エラーハンドリングしたくないとありますが、私なら以下のような感じでチェック用のファンクションを使います。 ※インデントに全角スペースを使用しています。 ================================================================ Function CheckRange(strRange As String) As Boolean   Dim rng As Range   On Error GoTo RangeError   Set rng = Range(strRange)   CheckRange = True   Exit Function RangeError:   CheckRange = False End Function 呼び出し側では以下のような感じで… MsgBox "A1=" & CheckRange("A1") MsgBox "$A$1=" & CheckRange("$A$1") MsgBox "A1:B2=" & CheckRange("A1:B2") MsgBox "AA=" & CheckRange("AA") MsgBox "$A1$=" & CheckRange("$A1$") MsgBox "ああ=" & CheckRange("ああ") MsgBox "A:1=" & CheckRange("A:1") ================================================================

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

では正常な値とは何でしょう? "A:1"は正常?正常だとするとその規則を箇条書きにして見ましょう。 すると、一つずつチェックしていく内容が分かると思います。

kamakuragengorou
質問者

お礼

返答ありがとうございます。 正常な値: Range("A1") Range("$A$1") Range("A1:B2") など 無効な値: Range("AA") Range("$A1$") Range("ああ") Range("A:1") など 以上のような感じになります。 やはり自分で一つづつチェックするしか方法はないんでしょうか。何かよい関数か何かあれば、スマートになっていいなと思ったんです。

関連するQ&A