Excel VBAでセルの選択を判定する方法のまとめ

Excel VBAでセルの選択を判定する方法のまとめ

Posted at May 16,2014 2:34 AM
Tag:[Excel, VBA]

Excel VBAでセルの選択を判定する方法をまとめました。

1.はじめに

仕事で、ExcelのB列以降のセル(複数行)にデータを設定したあと、A列に○印などの文字を設定して出力ボタンをクリックすると、その行の内容をCSVで出力するようなVBAを作りました。

が、A列に印をつけるのは一時的なものなので、A列のセルを選択状態にして出力ボタンをクリックすれば、その行の内容をCSVで出力するようにしました。

ということでセルの選択状態を判定する方法を調べましたので、本エントリーでまとめておきます。

前半で選択されたセルの取得方法、後半で選択セルの判定方法を紹介します。

2.セルの行と列を取得する

セルの行と列を取得するには「ActiveCell.Column」および「ActiveCell.Row」を利用します。

Sub sample()
    MsgBox ActiveCell.Column & " " & ActiveCell.Row
End Sub

「ActiveCell.Column」は選択されたセルの列、「ActiveCell.Row」は選択されたセルの行を表示します。

1つのセルを選択した場合、そのセルの行と列を表示します。

複数のセルが選択されている場合、最若番のセルの行と列のみを表示します。

Ctrlキーで複数のセルをばらばらに選択している場合、最後にカーソルがあたっているセルの行と列を表示します。

3.セルの番地を取得する

セルの番地を取得するには「ActiveCell.Address」を利用します。

Sub sample()
    MsgBox ActiveCell.Address(False, False, xlA1)
End Sub

Addressプロパティのパラメータの意味は次のとおりです。

  • 第1パラメータ:行の形式(True:絶対参照形式/False:相対参照形式)
  • 第2パラメータ:列の形式(True:絶対参照形式/False:相対参照形式)
  • 第3パラメータ:セル名の取得形式(xlA1:A1参照形式/xlR1C1:R1C1参照形式)

1つのセルを選択した場合、そのセルの行と列を表示します。

複数のセルが選択されている場合、最若番のセルの行と列のみを表示します。

Ctrlキーで複数のセルをばらばらに選択している場合、最後にカーソルがあたっているセルの行と列を表示します。

4.選択されたすべてのセルの番地を取得する

選択されたすべてのセルの番地を取得するには、Selectionプロパティを利用します。

Sub sample()
    MsgBox Selection.Address(False, False, xlA1)
End Sub

複数選択の場合、その一番上のセルと一番下のセルの番地を表示します。

選択範囲が矩形の場合、左上と右下の番地を表示します。

Ctrlキーで複数のセルをばらばらに選択している場合、カンマ区切りで番地を表示します。

5.繰り返し処理の中でセルが選択されていることを判定する

本題です。

「Sheet1」シートのB1からB10までのセルを順次サーチし、セルが選択されていることを判定する場合はIntersectメソッドを利用します。

Sub sample()
    Dim i As Integer
    for i = 1 To 10
        If Not Application.Intersect(ThisWorkbook.Worksheets("Sheet1").Cells(i, 2), Selection) Is Nothing Then
            MsgBox "セルが選択されています:" & Application.Intersect(ThisWorkbook.Worksheets("Sheet1").Cells(i, 2), ActiveCell).Address(False, False)
        End If
    Next i
End Sub

Intersectメソッドのパラメータには

  • 第1パラメータ:範囲1
  • 第2パラメータ:範囲2

を指定し、それぞれの範囲でセルを共有している場合にセルの情報を返却します。

セルを共有している場合には「Nothing」を返却します。

If文を「Not ~ Is Nothing」としているのは、「共有しているセルがNothingでなければ~」という判定を行っているためです。

ここでは選択したすべてのセルを対象にしたいので、4項の「Selection」を利用しています。

アクティブなセルだけを対象にしたい場合は、「Selection」を1項または2項で紹介した「ActiveCell」を利用します。

If Not Application.Intersect(ThisWorkbook.Worksheets("Sheet1").Cells(i, 2), ActiveCell) Is Nothing Then

6.ある範囲に選択されたセルが含まれていることをまとめて判定する

ある範囲に選択されたセルが含まれていることをまとめて判定するには、5項の判定文でRangeを利用します。

Sub sample()
    If Not Application.Intersect(Selection, Range("B1:B10")) Is Nothing Then
        MsgBox "セルが選択されています:" & ActiveCell.Address(False, False)
    End If
End Sub

ただし、この方法では1つのセルの情報しか取得できないようです。

7.参考サイト

参考サイトは下記です。ありがとうございました。

ActiveCell および Selection プロパティ
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)