技術tips保管庫

技術tips保管庫

Excel VBAを中心に、仕事で役立つあれこれを記録

【Excel VBA】値のみ貼り付けをデフォルトにする

このページで書くこと

Excelでコピペする際、[ctrl] + V で値のみ貼り付けできるようにします。
Excel以外のテキストをコピーしてExcelに張り付ける際に便利です。
もちろんExcelの関数などをコピペしたいときにも役立ちます。

経緯

たくさんのデータをExcelにコピペしたいときがたまにあります。
関数やVBAで自動化できれば一番いいのですが、コピー元ファイルの形式や入力方法によっては手作業にならざるを得ない場合も多々……。

でも、いちいち右クリックで「値のみ貼り付け」を選択するのは面倒すぎる!
なので、せめて楽に貼り付けができるよう、VBAで「値のみ貼り付け」をデフォルトにしてみました。

使用するコード

クリップボードとのデータのやり取りです。

Sub COPY_DEF()
'
    Dim cbCopy As Variant 'コピーした値
    Dim clipOjt As New DataObject
    '
    cbCopy = ""
    '
    With clipOjt
        .GetFromClipboard 'クリップボードからデータオブジェクトへ値を渡す
        cbCopy = .GetText 'データオブジェクトのデータを変数に入れる
    End With
    '
    ActiveCell = cbCopy '選択したセルに値を入れる
'
End Sub

上記のマクロを [ctrl] + V に登録してください。

備考

コピーしたデータはクリップボードに保存されます。
そのデータを一度VBAのデータオブジェクトに格納し(clipOjt.GetFromClipboard)、その後テキスト形式で変数に渡します(cbCopy = .GetText)。
変数の値を選択したセルに入力するようにしておけば(ActiveCell = cbCopy)、[ctrl] + Vでペーストする動きとうまく連動してくれます。

処理後は、このマクロの削除や拡張子の修正(xlsm→xlsx)などを忘れずに!

注意

上記のマクロをコンパイルする際、「コンパイルエラー:ユーザ定義型は定義されていません。」というエラーメッセージが表示されることがあります。

f:id:arekoretips:20210605045914p:plain
コンパイルエラー:ユーザ定義型は定義されていません。

そのメッセージの解決方法は以下のページに記載してありますので、もしエラーが出た際にはお試しください。
arekoretips.hatenablog.jp

以上です。