役に立ちそうもないTips移転版

俺得なTipsを書き連ねるだけのブログ。

Excel: クリップボードを使わずセルコピー

と、いう話だとRange#Copyに引数指定しとけ、でFAなことが多いのだが、実はそれだけではだめだったり。
はっきりドキュメント化されているわけではないが、どうも引数指定してCopyメソッドを呼んでも、どこかの処理でクリップボードをクリアしてくれやがるらしいorz
参考: http://ap.atmarkit.co.jp/bbs/core/fdotnet/15564?page=2
というわけで、時間のかかるマクロを動かしながら別作業してると不意にコピペが効かなくなって(というか、コピーしたものが叩き消されてペーストできなくなる)困ったりするのだが、
回避方法は上記のページにある通りValueプロパティの引数にxlRangeValueXMLSpreadsheet指定して書式ごと値を取って書式ごと突っ込めばなんとかなる。
(もし書式が要らないなら、引数なしのValueプロパティでも用は足りる。)
Copyメソッドとの違いで気をつけることと言えば、コピー先のセル範囲サイズをコピー元に合わせる必要があることくらいか。

Public Sub CopyCells(ByVal src As Range, ByVal dst As Range)
    
    dst.Resize(src.Rows.Count, src.Columns.Count).Value(xlRangeValueXMLSpreadsheet) = src.Value(xlRangeValueXMLSpreadsheet)

End Sub

とかヘルパメソッド書いとくと楽かも。