- ベストアンサー
ExcelVba 有効なセルかどうかを判定するには
いつもお世話になります。 指定されたセルが有効なセルかどうかを判定したいのですが、何かよい方法がないかどうか質問させていただきました。 ユーザにrangeオブジェクトの引数を入力してもらう形なのですが、指定された値が例えば、aaa などの場合、Range("aaa")となり、当然これは無効なので、そのような指定はできませんよ、としたいのですが、これをエラーとしてハンドリングするのではなく、よい判定方法はないものでしょうか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは MsgBox Evaluate("ISREF(" & "A1" & ")") ' →「 True 」 MsgBox Evaluate("ISREF(" & "AA" & ")") ' →「 False 」 というようなことでしょうか? ワークシート関数のISREF()です。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
質問者が、発想を変えたら。 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)
例えば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)
では正常な値とは何でしょう? "A:1"は正常?正常だとするとその規則を箇条書きにして見ましょう。 すると、一つずつチェックしていく内容が分かると思います。
お礼
返答ありがとうございます。 正常な値: Range("A1") Range("$A$1") Range("A1:B2") など 無効な値: Range("AA") Range("$A1$") Range("ああ") Range("A:1") など 以上のような感じになります。 やはり自分で一つづつチェックするしか方法はないんでしょうか。何かよい関数か何かあれば、スマートになっていいなと思ったんです。