概要
GetClipTextは、クリップボードに入っている文字列を取得し、Stringとして返すExcel VBA汎用関数です。
ユーザーがコピーした文字列や、別の処理がクリップボードへ入れた文字列を、VBA側で読み取って再利用したい場面で使います。
たとえば、一次元配列ループの雛形を生成するMCCLoopArray1Dでは、事前にコピーしておいた配列名をGetClipTextで取得し、その文字列を使ってループコードを生成しています。
使う場面
- コピー済みの文字列をVBAで読み取りたい
- クリップボード経由で、外部アプリや別マクロから文字列を受け取りたい
- 文字列をセル、フォーム、変数へ取り込みたい
- コード生成補助マクロで、コピー済みの変数名や配列名を入力値として使いたい
- ClipTextでクリップボードへ格納した文字列を、別処理で取得したい
ClipTextが「文字列をクリップボードへ入れる」部品であるのに対し、GetClipTextは「クリップボードから文字列を取り出す」部品です。
処理イメージ
ユーザーが文字列をコピー
↓
GetClipText
↓
DataObject.GetFromClipboard
↓
DataObject.GetText
↓
Stringとして返す
単体では小さな関数ですが、コード生成補助や文字列加工処理では入力口として使いやすい部品です。
使用例
現在クリップボードに入っている文字列を、イミディエイトウィンドウへ出力する例です。
コードを読み込み中...事前に「テスト文字列」をコピーしてから実行すると、イミディエイトウィンドウに次のように表示されます。
テスト文字列
コピー可能な実装コード
コードを読み込み中...初心者向けコード解説
Public Function GetClipText() As Stringは、文字列を返す関数です。引数はなく、現在のクリップボード状態を読み取ります。
Public Function GetClipText() As String
On Error Resume Nextは、クリップボードに文字列以外の内容が入っている場合でも、処理全体を止めにくくするための記述です。クリップボードには、画像、ファイル、図形、空データなどが入っていることもあります。その状態で.GetTextを実行するとエラーになる可能性があります。
On Error Resume Next
Dim Clip As New DataObjectでは、DataObjectを作成しています。DataObjectはMSForms系のオブジェクトで、クリップボードの文字列を扱うときに使えます。
Dim Clip As New DataObject
.GetFromClipboardで現在のクリップボード内容をDataObjectへ読み込み、.GetTextで文字列として取り出します。
.GetFromClipboard
Output = .GetText
最後にOn Error GoTo 0でエラー無視の状態を解除し、GetClipText = Outputで取得した文字列を関数の戻り値にします。
On Error GoTo 0
GetClipText = Output
VBAでは、関数名に値を代入することで戻り値を設定します。この場合、Outputに入った文字列がGetClipText()の結果になります。
MCCLoopArray1Dとの関係
GetClipTextは、MCCLoopArray1Dの下位にある子部品として使われます。
MCCLoopArray1D
↓
MakeClipCodeLoopArray1D
↓
GetClipText
↓
コピー済みの配列名を取得
↓
一次元配列ループのコードを生成
↓
ClipTextで生成コードをクリップボードへ格納
この流れでは、GetClipTextが「ユーザーがコピーした配列名を受け取る入口」になります。親処理であるMakeClipCodeLoopArray1Dは、取得した文字列を配列名として使い、For I = 1 To Nの雛形コードを組み立てます。
つまり、GetClipTextは単なるクリップボード取得関数ではなく、コード生成補助マクロの入力部品としても重要です。
注意点
DataObjectを使うため、VBEの「ツール」→「参照設定」でMicrosoft Forms 2.0 Object Libraryが必要になる場合があります。- クリップボードに画像やファイルなど、文字列以外の内容が入っている場合は、空文字が返ることがあります。
On Error Resume Nextでエラーを握りつぶすため、原因調査が必要な処理ではErr.NumberやErr.Descriptionを確認する形に変更してください。- クリップボードの内容はユーザー操作にも依存します。実行直前に何がコピーされているかを前提にする処理では、空文字チェックを入れると安全です。
- パスワード、APIキー、個人情報などの機密情報をクリップボードから扱う場合は、誤ってログやセルへ出力しないよう注意します。
関連記事
- 一次元配列ループの雛形を生成するMCCLoopArray1D
- 文字列をクリップボードへ格納するClipText
- エラー回避コードのひな形を生成するMCCErrorEscape
- コードウィンドウへ戻すShowCodeWindowDelay
- イミディエイトウィンドウをCUIのように使ってプロシージャコードを半自動生成する
軽いまとめ
GetClipTextは、クリップボード内の文字列をVBAから取得するための小さな汎用関数です。
単体ではシンプルですが、ClipTextと組み合わせると、VBAで「文字列を生成してコピーする」「コピー済み文字列を取得して次の処理に使う」という流れを作れます。
特にMCCLoopArray1Dのようなコード生成補助マクロでは、コピー済みの配列名を受け取る子部品として再利用しやすいプロシージャです。
