4年に一度のスポーツの祭典 全競技速報中

いつもお世話になります。

指定されたセルが有効なセルかどうかを判定したいのですが、何かよい方法がないかどうか質問させていただきました。

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

よろしくお願いします。

gooドクター

A 回答 (4件)

こんにちは



MsgBox Evaluate("ISREF(" & "A1" & ")")
' →「 True 」
MsgBox Evaluate("ISREF(" & "AA" & ")")
' →「 False 」

というようなことでしょうか?

ワークシート関数のISREF()です。
    • good
    • 6

質問者が、発想を変えたら。


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ボタンを押したときとかもう少し手当てが必要ですが。
    • good
    • 0

例えば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")
================================================================
    • good
    • 0

では正常な値とは何でしょう?


"A:1"は正常?正常だとするとその規則を箇条書きにして見ましょう。
すると、一つずつチェックしていく内容が分かると思います。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。

正常な値:
Range("A1")
Range("$A$1")
Range("A1:B2")
など

無効な値:
Range("AA")
Range("$A1$")
Range("ああ")
Range("A:1")
など

以上のような感じになります。
やはり自分で一つづつチェックするしか方法はないんでしょうか。何かよい関数か何かあれば、スマートになっていいなと思ったんです。

お礼日時:2009/06/25 00:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング