トランの毎日迷宮

Tech系ブログを目指すもの

【ExcelVBA】セルをダブルクリック【文字列取得】

こんばんにちございます。トランです。

さぁエクセルネタです。

今日はエクセルファイル内でセルをダブルクリックしたらそのセルの文字列を取得する、というものです。

早速やっていきましょう。まず新しいエクセルを開いてください。そして現在のシートがSheet1になっていることを確認してください。

まずは「開発」リボンがあるかどうかです。

f:id:trantran1021:20190227233459j:plain

もしこれがなければファイルリボンからオプションでこの開発リボンを出しましょう。

f:id:trantran1021:20190227233850j:plain

だしたら早速開発リボンをクリックしてください、そしたら真ん中らへんにコードの表示というのがあるのでクリック

f:id:trantran1021:20190227234208j:plain

するとこんな画面が出てくるはずです。

f:id:trantran1021:20190227234354j:plain

次に、ツールバーのツールの中の参照設定を見てください。

そして、参照設定でMicrosoft Forms 2.0 Object Libraryというところのチェックをいれてください。もし一覧で見つからないようでしたら右の参照というボタンをおして画像内の下の場所の横に書いてあるC:\WINDOWS\SysWOW64というフォルダの中にあるFM20.DLLというファイルを追加してください。

f:id:trantran1021:20190227234803j:plain

そうしたらばひとつ前の画像の真ん中あたりの(General)というところをクリックしてWorkSheetを選択してください。そうするとこんな画面になると思います。

この時左側のプロジェクトという小さめのウィンドウのなかのSheet1(Sheet1)が選択されていることを覚えておいてください。

f:id:trantran1021:20190227235411j:plain

次です。先ほどWorkSheetに変えた横にSelectionChangeとなっている所をクリックしてBeforeDoubleClickを選択してください。

f:id:trantran1021:20190228000016j:plain

すると、上の画像のような行が勝手に追加されているかと思います。

次は少しコーディングです。下の画像のように書いてみてください。

f:id:trantran1021:20190228000305j:plain

これでOKです。少し解説をいたしますと、

private Sub Worksheet_BeforeDoubleClickからEnd Subまでの処理は

WorkSheet1においてのみダブルクリックすると実行されます。

Sheet1でコードの編集をしたから当たり前言われるかもしれませんが、、、

またその実行の際ダブルクリックした選択位置をTargetという変数に持ちます。

各行の処理は

Dim cb As New DataObject

DataObjectというセルの値格納用の入れ物をcbという名前で新規作成します。

名前はcbでなくてもよいです。そしてこれは先ほど参照設定で追加したMicrosoft Forms 2.0 Object Libraryのおかげで使えています。

cb.SetText Target.Text

cbにTarget(選択位置)の文字列をセットします。SetTextとTargetの間には半角スペースを一つあけておいてください。

cb.PutInClipboard

cbの中身をクリップボードに格納します。

Range("A1").Activate

一番左上のセルにカーソルを移動させます。どうしてこれをやっているかというと数式セルに対して数式編集モードになるのを防ぐためです。勘のいい方ならわかったかもしれませんがもし一番左上のセルが数式セルだった場合は数式編集モードになってしまいます。。。。

さぁ×ボタンで閉じてウィンドウを閉じてください。

これでSheet1上でセルをダブルクリックするとその値がクリップボードに入るようになっているはずです。ダブルクリックが成功すると一番左上のセルにカーソルが移動します。

そんなわけで、おしまい