【ExcelVBA入門】クリップボードを使ったデータの設定・取得方法とは

皆さんは、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メソッドもおすすめです!

以下で詳しく解説しているので、気になる方は見てみてくださいね!

まとめ

今回は、クリップボードを使った値の設定・取得方法について解説しました。

クリップボードを使えば一時的に保存したデータを、簡単に使うことができます。使い方も簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次