• ベストアンサー

(VBA)指定したセルがアクティブかどうかを判別するには?

シートからいくつかのセルがアクティブ状態になっています。 そこから、セルを一つずつ指定してアクティブになっているかどうかを判断したいのです がそのような事は可能でしょうか? ご存知でしたら、ご教授ください。 For I = 1 To wsABC.Range("XXXXXX").Rows.Count If wsABC.Range("XXXXX").Selected(I) = True Then               ~~~~~~~~~~~~                 ↑               気持ち的にはこのような指定がしたい。               (実際はSelectedプロパティはない。。)

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

選択したセルが、一定の範囲内にあるか知りたいって事かな? 例えば一定の範囲を 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 もっと具体的に何をしたいかが解かれば、他の良案があるかも。

komagoma
質問者

お礼

ありがとうございました。 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 多謝

その他の回答 (3)

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

例えば、いま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 検討不十分ですが、参考までに上げます。

komagoma
質問者

お礼

回答ありがとうございました。 シンプルでわかりやすいです。

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.2

ご質問を整理してください。 選択範囲が複数あっても、アクティブセルは一つしかなく、ActiveCell.addressで求めることができますが、もしかしてselectedかどうか判別したい、ということですか?

komagoma
質問者

お礼

回答ありがとうございました。

komagoma
質問者

補足

すいません。アクティブ状態と選択状態を 掛け違えておりました。 Selected(選択状態)かどうかを判別したいと考えています。 また、アクティブセルかどうかを判別する場合は、ご回答にあるように ActiveCell.addressを使用すれば出来るとのことですが、 指定したセル(Range("ABC").Cell(X,X))がアクティブかどうか 調べる時は if Range("ABC").Cell(X,X).Address=ActiveCell.address then といような使い方が一般的でしょうか?

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 アクティブ状態ではなくて、選択状態ですね。 アクティブなセルはアクティブなシートを1つしかありませんから。 さて、ある列を順に調べるのではなくて、選択範囲(Selection)で、その列に該当するかどうかを調べてはどうでしょうか? 以下は、選択範囲で列番号が「1」(つまりA列)の場合に処理をするというコードです。 Dim rg As Range For Each rg In Selection   If rg.Column = 1 Then     '(処理)   End If Next rg

komagoma
質問者

お礼

ご回答ありがとうございました。 すいません。僕の説明不足でした。

関連するQ&A