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の範囲内だけ
セルをクリックしたらセルの内容を自動でコピーすることが出来ます