- ベストアンサー
(VBA)指定したセルがアクティブかどうかを判別するには?
シートからいくつかのセルがアクティブ状態になっています。 そこから、セルを一つずつ指定してアクティブになっているかどうかを判断したいのです がそのような事は可能でしょうか? ご存知でしたら、ご教授ください。 For I = 1 To wsABC.Range("XXXXXX").Rows.Count If wsABC.Range("XXXXX").Selected(I) = True Then ~~~~~~~~~~~~ ↑ 気持ち的にはこのような指定がしたい。 (実際はSelectedプロパティはない。。)
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
選択したセルが、一定の範囲内にあるか知りたいって事かな? 例えば一定の範囲を A1:A10として、A1:B15 を選択してから実行すると A1~A10 をMsg表示する Sub Test() Dim r As Range, s As String If TypeName(Selection) <> "Range" Then Exit Sub For Each r In Selection If Not Application.Intersect _ (r, ActiveSheet.Range("A1:A10")) Is Nothing Then s = s & r.Address & vbCrLf End If Next r MsgBox s End Sub もっと具体的に何をしたいかが解かれば、他の良案があるかも。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
例えば、いまG8に注目したとします。 範囲指定して、G8を含む範囲を指定して下記を実行しますと、「範囲に含まれる」、範囲に隣接していたり、飛び離れていれば、「範囲と別」を表示します。 Sub test01() Set x = Selection Set y = Range("E8") Set z = Union(x, y) w = z.Areas.Count MsgBox w If w = 1 Then MsgBox "範囲に含まれる" Else MsgBox "範囲と別" End If End Sub 検討不十分ですが、参考までに上げます。
お礼
回答ありがとうございました。 シンプルでわかりやすいです。
- coco1
- ベストアンサー率25% (323/1260)
ご質問を整理してください。 選択範囲が複数あっても、アクティブセルは一つしかなく、ActiveCell.addressで求めることができますが、もしかしてselectedかどうか判別したい、ということですか?
お礼
回答ありがとうございました。
補足
すいません。アクティブ状態と選択状態を 掛け違えておりました。 Selected(選択状態)かどうかを判別したいと考えています。 また、アクティブセルかどうかを判別する場合は、ご回答にあるように ActiveCell.addressを使用すれば出来るとのことですが、 指定したセル(Range("ABC").Cell(X,X))がアクティブかどうか 調べる時は if Range("ABC").Cell(X,X).Address=ActiveCell.address then といような使い方が一般的でしょうか?
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 アクティブ状態ではなくて、選択状態ですね。 アクティブなセルはアクティブなシートを1つしかありませんから。 さて、ある列を順に調べるのではなくて、選択範囲(Selection)で、その列に該当するかどうかを調べてはどうでしょうか? 以下は、選択範囲で列番号が「1」(つまりA列)の場合に処理をするというコードです。 Dim rg As Range For Each rg In Selection If rg.Column = 1 Then '(処理) End If Next rg
お礼
ご回答ありがとうございました。 すいません。僕の説明不足でした。
お礼
ありがとうございました。 SelectionとIntersectで実現できました。 初心者なもんでIntersectがあるなんて想像もつきませんでした^^; ちなみに作成したのはこんな感じ For I = 1 To wsABC.Range("XXXXXX").Rows.Count If Not Application.Intersect(wsABC.Range("XXXX").Cells(I, 1), Selection) Is Nothing Then 多謝