Windows > Office関連 > Excel > セルの値をクリップボードにコピー

目的

Windows標準のコピー([Ctrl] + [C])コマンドでなく、ボタンコントロールなどを押したタイミングでセルの内容をクリップボードにコピーする方法についてのメモです。
簡単な内容であれば、普通にセルをコピーで問題ないですが、加工した結果などをセルに出力せずにクリップボードに入れる時などに使えるTIPSだと思います。


内容

実際のクリップボードの操作

Private Sub SendToClipBoard(vStr As String)
    Dim oDO As New DataObject
    Call oDO.SetText(vStr)
    Call oDO.PutInClipboard
    Set oDO = Nothing
End Sub
まずクリップボードの内容にアクセスするためのDataObjectオブジェクトを生成します。
作成したオブジェクトにテキストデータをセットし、クリップボードへ送信しています。
従ってこのオブジェクト自体がクリップボードであるわけではないようです。

なお.NETの同名クラスでは、クリップボードに対応している各種フォーマットを操作するためのメソッド・プロパティが用意されていますが、VBAでの機能はかなり制限されているようです。
MSDNライブラリ DataObject メンバ(System.Windows.Forms)

制限されているDataObjectのメンバを調べるにはVisual Basicエディタのオブジェクトブラウザで表示すれば確認できます。

尚、このDataObjectを使うためには参照の追加が必要です。
以下の手順で追加します。

リボンに[開発]タブが表示されていない場合は、[オプション]で[[開発]タブをリボンに表示する]チェックボックスをオンにします。

[開発]タブを選択して、[Visual Basic]ボタンをクリックします。

[ツール]メニュー、[参照設定]メニューをクリックします。
"%SYSTEMROOT%\system32\FM20.dll" を選択します。

[Microsoft Forms 2.0 Object Library]チェックボックスをオンにします。
[OK]ボタンをクリックします。

この参照設定は2003までは、デフォルトで[参照可能なライブラリ ファイル]リストボックスに表示されていたようですが、2007でデフォルトではなくなりました。
といっても上記のように手動で追加すればいいだけの話なのですが。


Sub Button1_Click()
    Dim oSheet As Excel.Worksheet
    Set oSheet = ThisWorkbook.Sheets(1)
    
    Dim vStr As String
    vStr = oSheet.Cells(14, 3)
    
    Call SendToClipBoard(vStr)
End Sub
実際にワークシート、セルを指定して文字列として取得し、クリップボードへ送信します。




最終更新日 : [2008-09-22]
最終更新:2008年09月22日 18:33