値のみ貼り付けをするマクロ 2.エラー回避

エラー回避
エラー回避

リンクユニット


マクロ 17回

 値の貼り付けをするマクロ

マクロ講座16回では、形式を選択して貼り付けを行う場合の、
「値の貼り付けをするマクロ」を作成しました。

今回は、その中身を見ていきます。

(サンプルファイルは、こちらから マクロ講座17回サンプルデータ

Selection.PasteSpecialを使う

VBEを起動させます。
Alt+F11
前回記録した時の値の貼り付けマクロのコードを見てみましょう。
Sub Macro1()
    Range("F2:F4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
にあるRange("F2:F4").Select の部分は汎用マクロには必要ないので、削除できます。
残りのコードは以下です。
Sub 値の貼り付け2()
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
End Sub    
【コードの解説】

Selection.PasteSpecial は、

Selection 選択した位置に PasteSpecial 形式を選択して貼り付け
を実行しなさいということ

Paste:=xlPasteValues 
の部分が、
貼り付ける形式は 「値」とするの意味です。

Operation:=xlNone 演算は「行わない」
SkipBlanks:=False 「空白を 無視する」はオフ
Transpose:=False 「行列を入れ替える」はオフ
   
Paste は、Special なのよ、だからPasteSpecial


 PasteSpecialは、形式を選択して貼り付け。
 いろいろあって特別なので、PasteSpecial という名前。
 (英語はストレートでいいね。)
Operation:=xlNone 
SkipBlanks:=False 
Transpose:=False 
の3つも今回のコードには不要です。 

マクロの編集

マクロ講座16回のマクロコードに
On Error Resume Next 
の1行を追加します。
Sub 値の貼り付け2()
    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

さらに、以下のコードの不要部分を削除すると、すっきりします。
Operation:=xlNone,SkipBlanks?:=False,?Transpose:=False
Sub 値の貼り付け2()
    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteValues
End Sub

エラーを回避~ エラー回避のコードを入れておく

注意
ここで一つ注意点があります。
汎用的に使うために、セル範囲を先にコピーしました。つまり、このマクロを実行する前に、あらかじめどこかのセルをコピーしておかなければいけないということ。

クリックボードの中に貼り付けるものが入っていることが必要です。
もし、コピーせずに、PasteSpecialを実行しようとすると、エラーになります。
エラーが表示されたら、終了ボタンを押します。
エラーメッセージが嫌だなという時は、エラー回避のコードを入れておくと嫌な思いをしないで済みます。
マクロ講座17回のサンプルでは、この実行時エラーを回避するために、
On Errorステートメントでエラーを回避しています。

On Error Resume Next 

 エラーの原因となった行を無視し、その次の行を再開します。サンプルコードは次の行がないのでそのまま終了します。
不要コードを削除した値の貼り付けマクロコード
Sub 値の貼り付け()
    Selection.PasteSpecial Paste:=xlPasteValues
End Sub    
エラー回避を追加したコード
Sub 値の貼り付け()
    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteValues
End Sub
今日の講義は以上です。お疲れ様でした。