クリップボードにデータ格納「CBSetText 」の解説

今回は、クリップボードにデータを格納するサブルーチンについて解説していきます。
VBAのIE制御では、情報収集したデータを加工することはよくあることです。
収集データを元にコンテンツを作成することもあります。
その際にセルをコピーしてテキストツールなどに貼り付けると「"(ダブルクォーテーション)」が付く場合があります。
こちらはセルに改行がある場合に出現するようで、解決法としては置換するかセルの中のデータを選択してコピーするかの対応が必要となります。
1つ2つの話であればそれでも大丈夫かと思いますが、1000,2000の話になってくると非効率な作業となってしまいます。
そこで、私はいつもセルをダブルクリックして直接クリップボードにデータを格納する方法をとっています。
今回はコピーではなく、直接クリップボードにデータを格納する方法について解説していきます。

スポンサー リンク

クリップボードにデータ格納のサブルーチン


Sub CBSetText(strValue As String)

    With New MSForms.DataObject
    
        .SetText strValue
        .PutInClipboard
        
    End With
    
End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

クリップボードにデータ格納のマクロ


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Target.Column = 1 Then
    
        Call CBSetText(Target.value)
        
        Cancel = True
    
    End If

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

こちらの引数は以下の1つです。

引数名データ型内容値の事例初期値省略
strValueStringクリップボードに格納する文字列"クリップボードに格納する文字列"×
CBSetText("クリップボードに格納する文字列")

引数は必須項目となります。

「strValue」には、クリップボードを格納する文字列を入力します。
本来の目的はセルコピーによる「"(ダブルクォーテーション)」の回避ですので、基本的にセルを指定します。


With New MSForms.DataObject
   
	.SetText strValue
	.PutInClipboard
       
End With

※ドラッグ(スワイプ)すると全体を確認できます。

クリップボードを操作する方法はいくつかありますが、MSFormsライブラリのDataObjectオブジェクトを利用します。
こちらのライブラリを利用するためには、「参照設定」で「Microsoft Forms 2.0 Object Library」を設定する必要がありますので、こちらは忘れずにしてください。

DataObjectオブジェクトはクリップボードを直接操作するのではなく、VBAとクリップボードのデータ間を操作します。
SetTextメソッド」でクリップボードに送信するデータをDataObjectオブジェクトに格納します。
そして、「PutInClipboardメソッド」を利用して、データをクリップボードに送信します。これで完了です。
非常に簡単ですね。

次はマクロ側の制御方法について、見ていきましょう。


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
(省略)
End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

こちらでは、Worksheet_BeforeDoubleClickイベントマクロで設定しています。
こちらは、セルをダブルクリックした後に処理をするイベントマクロです。
Targetにはダブルクリックしたときにマウスポインターに最も近いセルが渡されますのでここではダブルクリックしたセルになります。


If Target.Column = 1 Then
(省略)
End If

※ドラッグ(スワイプ)すると全体を確認できます。

こちらでは、ダブルクリックしたセルがA列の場合に次の実行処理をするようにしています。
これは全てのセルに対してではなく決まったセル列だけを対象にした方が作業がしやすいためです。


Call CBSetText(Target.value)
Cancel = True

※ドラッグ(スワイプ)すると全体を確認できます。

そして「CBSetText」サブルーチンにセルデータを渡して、クリップボードにセルデータを格納しています。
最後に「Cancel = True」とすることで、マクロ終了後にダブルクリック処理操作を無効としています。
こちらがtrueのままの場合は、ダブルクリックされた状態となりますので、どちらがいいかはご自身で判断してください。

こちらの制御は頻繁に利用しますので、私的には非常に役に立つサブルーチンです。
以上がクリップボードにデータ格納「CBSetText 」の解説となります。

次の記事: VBAでIE操作に役立つIEのクッキー削除 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。

ExcelのVBA初心者入門

↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。

目次

IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作のVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作のステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。