調査データを記載するブックを作ったのですが、記載者が関連資料からコピペしてきた際に書式までもってくるので見た目が酷い事に・・・・

 

「値で貼り付けてね、お願いしてもたまにやるので強硬手段に」

 

まず参考にしたサイト

 

Excelで値のみを貼り付ける(フォーマットを防ぐ)ように制限するにはどうすればよいですか?

 

ここの

VBAコードで値のみを貼り付ける(フォーマットを防ぐ)ように制限する

に着目
 
ブックのVBAScript内「 ThisWorkBook 」に下記を張り付けるだけ
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    On Error Resume Next
    Target.PasteSpecial xlPasteValues
    Application.CutCopyMode = True
End Sub
お手軽・・・だけど、コピーしてセルでクリックすると即貼り付いてしまう
間違えて貼り付ける要因になりそう、「戻る」で戻せないし




次に参照したサイト
【Excel VBA】値のみ貼り付けをデフォルトにする
ここは目からウロコ、マクロをctrl+vに設定する事でctrl+vで貼り付けるときに
値で貼り付けを強制するw
これええやん!と思ったので早速実行
Sub COPY_DEF()
'
    Dim cbCopy As Variant 'コピーした値
    Dim clipOjt As New DataObject
    '
    cbCopy = ""
    '
    With clipOjt
        .GetFromClipboard 'クリップボードからデータオブジェクトへ値を渡す
        cbCopy = .GetText 'データオブジェクトのデータを変数に入れる
    End With
    '
    ActiveCell = cbCopy '選択したセルに値を入れる
'
End Sub
これを同じく ThisWorkBook に記載、気を付ける点は ツール>参照設定 で、
Microsoft Forms 2.0 Object Library」にチェックが入っていないと
コンパイルエラーになります


さっそくやってみたのですがいい感じ!右クリックして形式選択貼り付けすれば
従来通りでも貼り付けできるし


ただ・・・・
なんで改行はいってんねん

 

ん?なんか改行入ってない?

 

これはちょっといただけないなって事で改造


参考サイト
【VBA】無駄な改行コードを削除【ReplaceとCleanがあります】


ここの WorksheetFunction.Clean を使います
元のコードの
ActiveCell = cbCopy '選択したセルに値を入れる
ActiveCell = WorksheetFunction.Clean(cbCopy) '選択したセルに値を入れる
に書き換え、すると

いい感じ~~~~!!
しばらくこれで様子見ながら運用してみます。