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に含まれているオブジェクトで、クリップボードのデータを読み取ったり、クリップボードにデータを設定したりすることができます。
ライブラリの参照設定
- VBAエディタの「ツール」メニューから「参照設定」を選択します。
- 参照可能なライブラリのリストから「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のような外部のオブジェクトを利用することが必要となります。