皆さんは、VBAでクリップボードを使った処理を書いたことがありますか? クリップボードを使った処理が使えると、コピーした値を簡単に使うことができるのでおすすめです!
そこで今回は、
- VBAでクリップボードを使う方法
- クリップボードの状態を確認する方法
- クリップボードを使うときの注意点
といった応用的な方法まで、徹底的に解説します!
クリップボードとは
クリップボードとは、何かをコピーしたときに一時的に保存されるデータのことです。テキスト、セル、画像など様々なデータを保存することができます。
そのため、VBAでクリップボードを使えるようになると直感的な処理でコピー、ペーストの処理を作ることができます。
VBAからクリップボードを操作する方法とは
次に、VBAからクリップボードを操作する方法について解説します。
事前準備
VBAでクリップボードを操作する場合は、DataObjectを変数として使うため事前に「Microsoft Forms 2.0 Object Library」を参照設定に追加する必要があります。
以下の手順で追加することができます。
1. VBEでツールタブから参照設定を開く
2. 「Microsoft Forms 2.0 Object Library」を探してチェック
なお、Excelのバージョンによって参照設定に表示されない場合がありますが、実体は「FM20.DLL」というファイルなので、「参照設定」からファイルを直接指定すれば追加できます。
参照設定に見当たらない場合は、ファイル検索して設定してみてくださいね。
クリップボードに値を入れる方法
次のように書くと、クリップボードに値を入れることができます。
Sub Test() Dim cbData As New DataObject 'DataObjectにメッセージを格納 cbData.SetText "サンプルメッセージ" 'DataObjectのデータをクリップボードに格納 cbData.PutInClipboard End Sub
「SetText」でDataObjectに値を入れてから、「PutInClipboard」でDataObjectの値をクリップボードにコピーするイメージです。
クリップボードの値を取得する方法
次に、値の取得方法について解説します。
「GetFromClipboard」を使うことで、クリップボードの値をデータオブジェクトにコピーすることができます。先ほどの流れに、クリップボードの値を取得するコードを追加しました。
Sub Test() Dim cbData As New DataObject 'DataObjectにメッセージを格納 cbData.SetText "サンプルメッセージ" 'DataObjectのデータをクリップボードに格納 cbData.PutInClipboard 'クリップボードからDataObjectにデータを取得する cbData.GetFromClipboard End Sub
クリップボードの状態を取得する方法
次に、クリップボードの状態を取得する方法について解説します。
クリップボードの状態は「Application.ClipboardFormats」で取得することができます。
Sub Test() Dim cbData As New DataObject Dim cbFormat As Variant 'DataObjectにメッセージを格納 cbData.SetText "サンプルメッセージ" 'DataObjectのデータをクリップボードに格納 cbData.PutInClipboard 'クリップボードからDataObjectにデータを取得する cbData.GetFromClipboard 'DataObjectのメッセージを表示 cbFormat = Application.ClipboardFormats MsgBox "クリップボードの形式は" & cbFormat(1) & "です。" End Sub
番号で返ってくるので、以下よく使う番号を覚えておくのがおすすめです。
- 0:テキスト
- 2:画像
- 9:BitMap
サンプルコード
最後に、クリップボードに保存した値を表示するサンプルコードを2つ用意しました。
- コピーしたセルの値をメッセージ表示するサンプル
- 直接クリップボードにテキストデータを入れてメッセージ表示するサンプル
コピーしたセルの値をメッセージ表示するサンプル:
Sub Test1() Dim cbData As New DataObject Dim cbFormat As Variant 'セルの値(侍エンジニア)をコピーしてクリップボードに保存 ActiveSheet.Range("A1").Copy 'クリップボードからDataObjectにデータを取得する cbData.GetFromClipboard 'DataObjectのメッセージを表示 MsgBox cbData.GetText End Sub
実行結果:
直接テキストをクリップボードに入れて値をメッセージ表示するサンプル:
Sub Test2() Dim cbData As New DataObject Dim cbFormat As Variant 'DataObjectにメッセージを格納 cbData.SetText "サンプルメッセージ" 'DataObjectのデータをクリップボードに格納 cbData.PutInClipboard 'クリップボードからDataObjectにデータを取得する cbData.GetFromClipboard 'DataObjectのメッセージを表示 MsgBox cbData.GetText End Sub
実行結果:
補足:クリップボードを使った処理を書くときの注意点
ここまでクリップボードを使う方法を紹介してきましたが、クリップボードはVBA以外の操作でコピーした場合でもデータが追加されてしまいます。
そのため、「実行中は他の操作をしないこと」が前提です。
他の操作もしつつセルのデータを使いたい場合は、Copyメソッド、Pasteメソッドもおすすめです!
以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、クリップボードを使った値の設定・取得方法について解説しました。
クリップボードを使えば一時的に保存したデータを、簡単に使うことができます。使い方も簡単なので、ぜひ使ってみてくださいね!