Excel 選択したセルを自動コピー

Excelでセルを選択した時点で、選択したセルの内容を自動的にクリップボードへコピーする方法を紹介します。

Excel VBAでセルを選択したイベントを発生させて
そのイベントの中でセルの内容をクリップボードへコピーします。

Excel VBAを使用する準備

Excelのメニューに「開発」と言う項目が有れば、
ここは飛ばして次に進んでください。

Excel でVBA開発を有効にする

Excelメニューの「ファイル」の下の方の「オプション」をクリックします。

Excelのオプションの「リボンのユーザー設定」をクリック
「開発」にチェックを入れて
右下の「OK」をクリックします。

これでExcelのメニューに「開発」表示されます。

VBAコードウィンドウを開く

Excelのメニュー「開発」の「コードの表示」をクリックします。

VBAのコードウィンドウが開きました。

セルクリック時のイベント関数を作成

ここで、セルクリックを検出させるのは、「Sheet1」上と言うことに決まます。
他のシートを指定する場合は、「Sheet1」と置き換えて解釈してください。

VBAのコードウィンドウの「Sheet1」を選択して
(プロジェクトペインの「Sheet1」をダブルクリック)
イベントは、「Worksheet」の「SelectionChange」
を選択すると
セルクリック時のイベント関数のコードが出来上がります。
イベントの中身はまだ空です。

クリップボードへコピーコマンドの書き込み

クリップボードへコピーするコマンドは、
セルの「Copy」メソッドを使います。

先程作ったイベント関数の引数Targetは、セルの範囲データが入ってます。
でコマンドは

   Target.Copy

になります。
これがイベント関数の中身になります。

セルをクリックした時に発生するイベント関数は、
これで完成です。

動作の確認

セルB2に適当に文字を入れて、クリックします。

テキストエディタへペーストして
セルB2と同じ文字が張り付けば成功です。

セルをクリックしただけでセルの内容がクリップボードへコピーされていることが確認できました。
「Sheet1」のイベント関数として作ったので「Sheet1」ならどこでもセルをクリックするだけでその内容がコピーできます。
また複数のセルを選択した場合も、選択したセルの内容がすべてコピーできます。

限られた範囲だけセルのクリックコピーをする

ある範囲(レンジ1)がある範囲(レンジ2)内に有るか判断するには
Intersect関数を用いることで実現できます。

    If Intersect(レンジ1,レンジ2) Is Nothing then
        ' レンジ1はレンジ2に含まれない

    End If

    '   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    If Not Intersect(レンジ1,レンジ2) Is Nothing Then
        ' レンジ1はレンジ2に含まれる

    End If

この後者の 「含まれる」条件文を使います
例えば
セルB2~D6の範囲内だけ
セルをクリックしたらセルの内容をコピーする場合は

    If Not Intersect( Target, Range("B2:D6")) Is Nothing Then
        Target.Copy
    End If

になります

実際にイベント関数に埋め込むと

これでセルB2~D6の範囲内だけ
セルをクリックしたらセルの内容を自動でコピーすることが出来ます