セル全体を保存するのではなく、クリップボードにその値のみを保存する独自のコピールーチンを作成できます。
Sub OwnCopy()
Dim DataObj As New MSForms.DataObject
DataObj.SetText ActiveCell.Value 'depending what you want, you could also use .Formula here
DataObj.PutInClipboard
End Sub
マクロをコンパイルできるようにするには、参照として「Microsoft Forms 2.0オブジェクトライブラリ」を含める必要があります(Visual Basicエディターで、[ツール]-> [参照]に移動し、 1%windir%\system32
を参照します)。FM20.dll
これで、デフォルトのマクロ実行ダイアログを使用してこのマクロを別のショートカット(例:Ctrl-- Shift)に割り当てることができます。または、を実行しCて上書きすることもできます。ただし、上書きすることはお勧めしません。エディタに貼り付ける以外の場合は、通常は一緒にコピーされる他のすべての情報を使用することをお勧めします。CtrlcApplication.OnKey "^c", "OwnCopy"
Ctrlc
これを永続的にするには、マクロをパーソナルワークブックに保存するだけです。
複数のセル/選択領域も処理できる、より高度なコピールーチンが必要な場合は、次のコードを使用します。
Sub OwnCopy2()
Dim DataObj As New MSForms.DataObject
Dim lngRow As Long
Dim intCol As Integer
Dim c As Range
Dim strClip As String
Const cStrNextCol As String = vbTab
Const cStrNextRow As String = vbCrLf
With Selection
If Not TypeOf Selection Is Range Then
On Error Resume Next
.Copy
Exit Sub
End If
If .Areas.Count = 1 Then
For lngRow = 1 To .Rows.Count
For intCol = 1 To .Columns.Count
strClip = strClip & _
Selection(lngRow, intCol).Value & cStrNextCol
Next intCol
strClip = Left(strClip, Len(strClip) - Len(cStrNextCol)) _
& cStrNextRow
Next lngRow
Else
For Each c In .Cells
strClip = strClip & c.Value & vbCrLf
Next c
End If
strClip = Left(strClip, Len(strClip) - Len(cStrNextRow))
DataObj.SetText strClip
DataObj.PutInClipboard
End With
End Sub
1実際には、このファイルは次の場所に存在します-Office%ProgramFiles%\Microsoft Office\root\vfs\System
は、仮想化のトリックを実行して、ファイルが存在する場所に表示されるようにします。