VBATips

コピペでワークシートの書式を壊されないようにする【Worksheet_Change】【ExcelVBA】

ユーザーがシートにコピペをして書式情報がおかしくなる

エクセルはユーザーが自由に色々と出来てしまう事がメリットであり、デメリットです。
ワークシート内の書式情報をコピペで崩されてしまう経験はないでしょうか。

(例)
・エクセル初心者が書式情報を壊して、表示がおかしくなった!と問い合わせが来た。
→値で貼り付けしてねの回答でOK(この時間も無駄・・・)
・エクセルを少し知っている人や、書式情報が壊れても何も思わない人は問い合わせすらない。
→成果物提出時に書式情報を修正する(無駄な時間・・・)
上記を解決するのに書式情報を再作成でもよいのですが、メンテナンスを考えると避けたいです。
その為、複数のデータを一度に更新された場合、値で貼付処理に自動変換してしまうのがスムーズです。

コピペされても強制的に値で貼付処理するサンプルコード

WorkSheet_Change(ワークシートが更新されたら)マクロを実行します。

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    
    '■更新されたセル数が1なら抜ける
    If Target.Count = 1 Then Exit Sub
    
    Application.EnableEvents = False
    
    '■処理内容(ペースト処理)を戻し、値で貼付する
    Application.Undo
    Selection.PasteSpecial xlPasteValues
    
    Application.EnableEvents = True
End Sub

注意点

関連記事

特定のセル範囲で値が変更された時に処理を実行【ExcelVBA】
特定のシートのみで、OnKeyイベントを取得したい
形式を選択して貼り付ける【PasteSpecialメソッド】
クリップボードの中身を貼り付ける【Pasteメソッド】※PasteSpecialがおすすめ

コメント

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