← コード一覧へ戻る
実務Excel・Windows連携

クリップボードにデータ形式があるか調べる

クリップボードの形式数を読み、ゼロ件か、何らかのデータがあるかを確認します。

実行前に確認

  • 形式数はコピーした件数ではありません。1回のコピーでも文字・HTMLなど複数形式を持つことがあります。
  • 現在のクリップボードだけを調べ、Windowsのクリップボード履歴は調べません。別アプリにより直後に内容が変わる場合があります。
  • 公式仕様とコードを照合した例です。Excel実機での実行は未検証です。業務ブックではなくコピーで試してください。

1サンプルコード

Option Explicit
Private Declare PtrSafe Function CountClipboardFormats Lib "user32" () As Long
Private Declare PtrSafe Sub SetLastError Lib "kernel32" (ByVal errorCode As Long)
Sub PracticeAdvanced8046()
    Dim count As Long, errorCode As Long
    SetLastError 0
    count = CountClipboardFormats()
    errorCode = Err.LastDllError
    If count = 0 And errorCode <> 0 Then
        MsgBox "形式数を取得できません。Windowsエラー: " & errorCode
    ElseIf count = 0 Then
        MsgBox "クリップボードの形式数は0です。"
    Else
        MsgBox "データがあります。形式数: " & count
    End If
End Sub

図で見る操作の流れ

イメージ図

準備、実行する操作、確認する結果の順で示しています。

  1. 準備

    Windows版VBA7の32/64ビット用です。最初はメモ帳で練習用の文字をコピーしておきます。

  2. 操作

    クリップボードの形式数を読み、ゼロ件か、何らかのデータがあるかを確認します。

  3. 結果

    データがある場合は形式数が表示されます。0件とAPIエラーは分けて表示します。

形式数はコピーした件数ではありません。1回のコピーでも文字・HTMLなど複数形式を持つことがあります。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[標準モジュール]へ、この例だけを貼り付けます。

  2. 2

    Windows版VBA7の32/64ビット用です。最初はメモ帳で練習用の文字をコピーしておきます。

  3. 3

    PracticeAdvanced8046を実行します。クリップボードの内容自体は取り出しません。

  4. 4

    データがある場合は形式数が表示されます。0件とAPIエラーは分けて表示します。

使っている機能の公式ドキュメント(Microsoft Learn)