【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日

まとめ

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

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説