Excelでコピーする場合(コピーされた領域にはアリの境界線があります)、データは実際にはクリップボードにありません。Excelはクリップボードを使用して、貼り付け時にソースセルからリアルタイムで転送します。これは、貼り付け操作中に数式を新しい相対セル参照に再加工できるようにするためです。ソースセルを削除すると、Excelには貼り付け操作中にデータをプルするためのデータが何もありません。
VBAには、クリップボードを直接操作するためのネイティブサポートがありません。ただし、MSFormsをVBAプロジェクトに追加してから、Clipboard関数をサポートするオブジェクトを宣言することができます。
VBAからクリップボードに直接アクセスする手順と例については、次のWebサイトを参照してください。
http://www.cpearson.com/excel/Clipboard.aspx
私の場合、のサイトでreferences
提案されているように、使用可能なリストにMSFormsがありませんでしたcpearson
が、C:\ドライブでFM20.dllを検索したところ、あいまいなフォルダーに埋め込まれていることがわかりました。それをC:\のルートにコピーし、ダイアログからreference
クリックして追加することができました。browse
add references
MSFormsが利用可能になったら、このコードを使用して、ソースセルが削除された後も保持されるクリップボードにテキストをコピーできます。
Public Sub Test()
Dim obj As New MSForms.DataObject
obj.SetText ActiveCell.Value
obj.PutInClipboard
End Sub
これは、持続する数式をコピーします。
Public Sub Test()
Dim obj As New MSForms.DataObject
obj.SetText ActiveCell.Formula
obj.PutInClipboard
End Sub
セルのフォーマットをクリップボードにコピーする方法を理解する時間がありませんが、コピーした値を保持してソースセルの後に貼り付ける場合は、これが進むべき方向のようです。削除されます。
編集#1
Windowsクリップボードは、1つのアイテムに対して複数の形式(たとえば、コピーされた選択範囲のRTFバージョンとテキストバージョン)を保存できますが、一度に保存できるのは1つのアイテムのみです。
OfficeクリップボードはWindowsクリップボードを使用しません。コピーされた値自体を保存し、さまざまな選択を保存できます。ただし、Office 2000の時点では、VBAを介して制御することはできず(Office 2000クリップボードの使用方法を参照)、Excelからコピーされた選択範囲は「テキストの貼り付け」または「すべて貼り付け」のいずれかです。フォーマットを貼り付けるだけの特別な貼り付けはありません。それ以降のバージョンのOfficeでは異なることを言うものは何も見つかりませんでした。
結論:VBAを使用して特別な貼り付けを行う唯一の方法は、アクティブ/有効/コピーされた選択を行うことです。したがって、唯一の解決策は、独自の永続グローバル変数(オブジェクトのリストなど)を宣言し、コピーされた各選択の形式をリストに格納することであることに同意します。クリップボードは実際には実行可能なソリューションではなく、SetData
無関係SetDataObject
であるため... VBAコードの1行でセルのフォーマットをキャプチャすることが不可能であることが判明した場合は、いつでも対象のフォーマットを列挙し、保存されているフラグを設定できます。後で使用するためのオブジェクト。