VBAで自動化

【VBA】クリップボードを操作する方法_値の追加と呼び出し

Excel VBAでクリップボードを操作するに大きく2種類の操作方法があります。
1つ目はExcel自体にコピー・カット・ペーストの機能があるので、これを呼び出す方法
2つ目はVBA でクリップボードの内容を直接操作するための機能がないため、外部オブジェクトのDataObjectを使用する方法

Excelのビルトイン機能を活用する方法

Excelのビルトイン機能を利用してVBAでクリップボードを操作する方法はExcel操作をイメージしてコードをかけるので比較的簡単にできます。

コピーをする方法

セルやセルの範囲をクリップボードにコピーするには、Copyメソッドを使用します。

Range("A1").Copy ' A1セルの内容をクリップボードにコピー

あるいは、一つの範囲から別の範囲へ直接コピーすることもできます。

Range("A1").Copy Destination:=Range("B1") ' A1の内容をB1にコピー

カットする方法

Cutメソッドを使用して、セルや範囲の内容をクリップボードに移動します。

Range("A1").Cut ' A1セルの内容をクリップボードに移動

ペーストする方法

コピーまたはカットした内容を貼り付けて、PasteSpecialメソッドを使用します。

Range("B1").PasteSpecial Paste:=xlPasteValues ' クリップボードの内容をB1にペースト

PasteSpecialメソッドには、様々なオプションが用意されており、値だけ、書式だけ、コメントだけといった特定の内容を指定してペーストすることができます。

クリップボードの選択状態を解除する方法

Excelでコピー操作を行った後、範囲が選択状態になっていることがあります。CutCopyModeプロパティをFalse設定すると選択状態が解除されます。
クリップボードの内容をクリアするわけではありませんが、Excelの選択状態を解除するため、ペースト操作ができなくなります。

Application.CutCopyMode = False

外部オブジェクトのDataObjectを使用する方法

クリップボードを直接操作するためには、DataObjectを利用する方法があります。
DataObjectForms 2.0 Object Libraryに含まれているオブジェクトで、クリップボードのデータを読み取ったり、クリップボードにデータを設定したりすることができます。

ライブラリの参照設定

  1. VBAエディタの「ツール」メニューから「参照設定」を選択します。
  2. 参照可能なライブラリのリストから「Microsoft Forms 2.0 Object Library」を探してチェックを入れて、OKをクリックします。

クリップボードにテキストをセットする方法

DataObjectオブジェクトを活用して、クリップボードにテキストをセットする場合、SetTextメソッドとPutInClipboardメソッドを活用します。
それぞれ役割が異なります。

SetTextメソッドとは「指定された文字列をクリップボードのテキストとしてセットするために使用されます。」

PutInClipboardメソッドとは「DataObjectに保存されているSetTextの内容をクリップボードにコピーするために使用されます」

以下のサンプルコードでは
変数「DataObj」に「Hello, Clipboard!」のテキストをセットします。
クリップボードにコピーします。

Dim DataObj As New MSForms.DataObject

DataObj.SetText "Hello, Clipboard!"
DataObj.PutInClipboard

クリップボードからテキストを取得する方法

クリップボード操作をサポートするためのメソッドにクリップボードから情報を取得するのにGetFromClipboardメソッドとGetTextメソッドが必要です。

クリップボードから情報を取得

GetFromClipboardは、クリップボードの内容をDataObjectオブジェクトに転送するメソッドです。

使い方:DataObject.GetFromClipboard

テキストの取得

GetTextメソッドは、DataObjectオブジェクトからテキストデータを取得するために使用します。

使い方:DataObj.GetText([Format])

「DataObj.GetFromClipboard」でクリップボードの内容を転送します。
「strClip = DataObj.GetText」でテキストデータを取得します。

Dim DataObj As New MSForms.DataObject
Dim strClip As String

DataObj.GetFromClipboard
strClip = DataObj.GetText

MsgBox strClip

DataObjectの注意点

DataObjectを使用する場合、テキストデータの取得・設定がメインになります。画像や他のデータ形式に対する操作は制限されています。
Excel VBAには、クリップボードに直接アクセスするビルトイン機能が提供されていないため、DataObjectのような外部のオブジェクトを利用することが必要となります。

-VBAで自動化