【Excel VBA】クリップボードのデータを取得・クリア(削除)する方法

こちらの記事では、Excel VBAを利用したクリップボードへのデータ格納方法やクリップボード内のデータをクリア(削除)する方法をご紹介しています。

また、エクセル上で格納されたデータだけではなく、エクセル以外からクリップボードに格納されたデータも含めてすべて削除可能な方法を合わせてご紹介しています。

 

sponsor link

Excel VBA でクリップボード内のデータを取得する方法

コピーしてクリップボードに格納されたデータを取得するには GetFromClipboard メソッドを利用します。

利用方法としては、GetFromClipboardメソッドで DataObject オブジェクトにデータを転送してからGetTextメソッドで取り出します。

実際の使用例は下記の様になります。

Dim objCb As New DataObject
 
objCb.GetFromClipboard
MsgBox objCb.GetText

 

 

Excel VBA でクリップボード内のデータをクリアする方法①

VBAでクリップボード内のデータをクリアするには、Application.CutCopyMode プロパティに対して False を設定することで簡単にクリアする事が可能です。

※この方法ではエクセル上でコピーされたデータのみクリア可能です。

エクセル以外でコピーされたデータをクリアする場合は後述する②の方法をご参照ください。

 

Application.CutCopyMode = False

 

Application.CutCopyMode を利用するクリップボードクリア方法は、Excel上でコピーされたデータのみに対して有効であり、Excel以外でコピーされてクリップボードに格納されたデータはクリアできません。

Excel以外でコピーして格納されたデータをクリアする場合は、後述する『Excel VBA でクリップボード内のデータをクリアする方法②』を参照してください。

 

 

Application.CutCopyMode の構文

CutCopyModeプロパティから取得できる値と説明。

戻り値説明
False切り取りモードとコピー モードが共に選択されていない状態(クリア状態)
xlCopyコピーモード
xlCut切り取りモード
(参考)https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.cutcopymode

 

CutCopyModeプロパティに設定可能な値と説明。

設定値説明
False切り取りモードまたはコピー モードを解除し、点滅している枠線を取り除きます(クリアする)
True切り取りモードまたはコピー モードを開始し、点滅している枠線を表示
(参考)https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.cutcopymode

 

 

Excel VBA でクリップボード内のデータをすべてクリアする方法②

ここでは、Excel以外でコピーしてクリップボードに格納されたすべてのデータに対して有効なクリア方法をご紹介しています。もちろんExcel上でコピーして格納されたデータに対しても有効です。

 

クリップボード内のデータをクリアするには Window API を利用します。

32bitバージョンのexcelと64bitバージョンでは記述が若干異なりますのでご利用環境に合せる必要があります。

 

 

クリップボードクリア処理のサンプルコード

ExcelVBA を利用して下記の内容を処理するサンプルコードを掲載します。

①クリップボードにコピーされたデータがあるか判定。

②クリップボードにデータがあればメッセージボックスで内容を表示する。

③クリップボード内のデータをクリア。

 

32bitバージョン

Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long


Private Sub CommandButton1_Click()
    Dim objCb As New DataObject
    
    'クリップボード内にデータがある場合のみ処理
    If Application.ClipboardFormats(1) <> -1 Then
        
        'クリップボードのデータをオブジェクトに格納
        objCb.GetFromClipboard
        MsgBox objCb.GetText
        
        'クリップボードに格納されたコピーデータをクリアする
        OpenClipboard (0&)
        EmptyClipboard
        CloseClipboard
    
    End If
    
End Sub

 

64bitバージョン

Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long
Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long


Private Sub CommandButton1_Click()
    Dim objCb As New DataObject
    
    'クリップボード内にデータがある場合のみ処理
    If Application.ClipboardFormats(1) <> -1 Then
        
        'クリップボードのデータをオブジェクトに格納
        objCb.GetFromClipboard
        MsgBox objCb.GetText
        
        'クリップボードに格納されたコピーデータをクリアする
        OpenClipboard (0&)
        EmptyClipboard
        CloseClipboard
    
    End If
    
End Sub

 

 

まとめ

・Excel上でコピーしてクリップボードに格納されたデータをクリアする場合は、CutCopyModeプロパティに False を設定するだけでクリア可能。

Excel以外でコピーしてクリップボードに格納されたすべてのデータをクリアする場合は、Windows APIを利用することでクリアすることが出来る。

 

タイトルとURLをコピーしました