クリップボードを経由せずに値だけをコピー貼り付けしたいが?(2)

Question 015p 拙著「組み方講座・プロの定番」 Previous Next
77ページ 2章1 定番(1)[A1] ◆ 環境・・ Excel 2000
詳細は こちら
「Excel VBA マクロ 組み方講座 プロの定番・裏技・合わせ技[編]」の第2章1-7
「セルの内容などをコピーしたい」の77ページにある [A1] について質問します。

クリップボードを非経由方式でコピーする方法はわかりましたが、
数式も含めてコピーされるので、値のみコピーするには、どのように記述しますか。
よろしくご指導くださいませ!
Answer   Copyright (C) 2007.1.20 永井善王
ご愛読いただきまして、ありがとうございます。
[A1] は 「セルの内容をクリップボードを非経由ですべてコピーする」 と題して、3とおりのコードを紹介しています。
その1番目のアクティブシート内の場合は、下記のとおりです。
    コピーセル範囲 = "A2:A12"                   '""内は例(以下同じ)
    貼付セル範囲 = "B2"
    Range(コピーセル範囲).Copy Range(貼付セル範囲)
結論からご説明しますと、数式を含めないで値だけをコピー貼り付けしたい場合は、
P.080 [B1]の 「セル範囲を指定してコピーする」 と、
P.082 [C1]の 「クリップボードの内容をセルへ貼り付けする」 を組み合わせれば実現できます。

例えば、アクティブシートのA1:A3セル範囲をB1セルへ貼り付ける場合は、
Range("A1:A3").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues
 となります。

あるいは、コピーではありませんが、下記コードで実現できる場合がありますから、お試しください。
Range("B1:B3").Value = Range("A1:A3").Value 左辺がコピー先、右辺がコピー元に相当します。

【参考】
P.077[A1]のマクロはタイトルにありますとおり、「・・・すべてコピーする」 ためのCopyメソッドを利用しています。よって、当然ですが 「数式も含めてコピーされる」 ことになります。
Excelは通常、コピー先はクリップボードになります(注)が、Copyメソッドの引数Destinationにセル範囲を指定して実行すると、クリップボードを経由しないで直接コピーされます。

(注)Excelのハンド操作でセル範囲をコピーする場合、一旦、クリップボードへコピーし、改めて別のセルを選択して貼り付けるという、2ステップを要します。 このときコピーされるのは「すべて」であり、貼り付ける時に何をどう貼り付けるかを選択します。「コピー」するときには選択できません。
Copyメソッドの引数Destinationにセル範囲を指定すると 1ステップで行われますが、何をどうするかは指定できません。 よって、Excel流の言い方をすると、「値のみコピー」はなくて「値のみ貼り付け」になろうかと思います。

クリップボードを経由せずに値だけをコピー貼り付けしたいが?(1)

Question 54.3
詳細は こちら 500連発(第1弾)マクロ番号 316の「クリップボードを経由せずにコピーして全て貼り付ける」についてお尋ねします。
クリップボードを経由しないで、コピーして値だけ(数式だけ、書式だけ等)を貼り付ける方法があれば教えてください。
Excel2000を使用しています。
Answer   Copyright (C) 2002.7.5 永井善王
掲載されたマクロを簡単に書くと、下記のとおりです。
'------------------------------------------------------------------------------
Sub クリップボードを経由せずにコピー貼り付けする()
    Worksheets("SSS").Range("A1:C3").Copy _
        Destination:=Worksheets("SS2").Range("A4")
End Sub
'------------------------------------------------------------------------------
このマクロは、"SSS"シートのA1:C3セル範囲の内容を、同一ブック内の "SS2"シートのA4セルを左上端として、コピーします。
Copyメソッドは通常、Destination引数を省略して使用するので、コピー先がクリップボードになります。
しかし、Destination引数にコピー先のセル範囲を設定すると、クリップボードを経由しないで、直接そこへコピーされます。つまり、「コピー」という動作はあるが、「(クリップボードの内容を)貼り付ける」という動作がありません。

よって、Copyメソッドを利用して値だけ、数式だけ、書式だけをコピー先のセル範囲へ直接 コピー するためには、Destination引数のほかに、もう一つ引数が必要ということになるのでしょうが、Excel2002でも、そういう引数は存在しないので、できないかと思います。

値だけ、数式だけ、書式だけに限定して貼り付けるには、オーソドックに PasteSpecialメソッドの引数Pasteを設定して、クリップボード経由で行うことになるでしょう。

Excel VBA Macro