【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メソッドもおすすめです!

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

VBAでセル・シート・ファイルをコピー(値、書式のみも解説)
更新日 : 2019年4月21日

まとめ

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

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

\業界最安級/
月額2,980円のプログラミングスクール

✔ 業界最安値の月定額2,980円
✔ 「Q&A掲示板」で平均30分以内に回答がもらえる
✔ 月に一度の「オンライン相談」で悩みを解決
✔ 教材の数は30種類以上
✔ 入会金不要+いつでも退会OK

公式サイトはこちら

Writer

Sanshiro Wakizaka

フリーランス

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

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

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close