【VBA】値のみ貼り付け

「値のみ貼り付け」を VBA で実現させようとした時、随分と悩んでしまいました。
思い付くのは、コピーして、貼り付ける際に「値のみ貼り付け」に該当するコードを書く、という発想でした。
教科書通りに書けば実現は出来るのですが、どうも小難しい。
どうもこれが深く考え過ぎていた様で、実はもっと単純な発想をすれば良かったのだと、後から気付きました。

分かってみれば簡単な事、ではありますが、分からない時って、得てしてこういうものですよね。
これが解決してから、コードの書き方が随分と変わりました。
要は、発想次第なんだな、と思うようになったのです。

さて、難しくないコードで実現させる「値のみ貼り付け」のコードを紹介しますね。

「値のみ貼り付け」とは

セルC1 に、A1 と B1 を合計する関数が入っています。

=A1+B1 つまり ⇒ =5+10

これを、関数は不要なので、値のみにしたい場合があります。
Excel 上での操作だと、下記のようになりますね。
・セルC1 をコピー
・セルC1 に「値のみ貼り付け」を実行
すると、値のみが上書きされます。
セルの中身は、下記のようになりますね。

=A1+B1 ⇒ 15

次に、VBA で実行するコードを見てみましょう。

コード

教科書通りなのだが・・・

始めに使っていたコードは、次のようなコードです。

Sub 値のみ貼り付け_教科書的()

  'セルC1 をコピー
  Range("C1").Copy

  'セルC1 に「値のみ貼り付け」
  Range("C1").PasteSpecial Paste:=xlPasteValues

  'コピー状態を解除
  Application.CutCopyMode = False

End Sub

こんなに長いコード(スペル)は、ノンプログラマーには、ソラで書くのは難しい。

もっと簡単な方法があった

他のコードを書いている時に、ふっと思い付いて、次のように書いてみました。

Sub 値のみ貼り付け_簡単()
  Range("C1").Value = Range("C1").Value
End Sub

あれ、上手く行った。
という落ち。

C1 の Value(値) を、C1 の Value(値) に入力する(つまり上書きする)。
これだけで良かったのですね。

この経験をして以来、以前よりコーディングの発想が柔軟になりました。

使い所

コツ

「〇〇のセルの値は、〇〇のセルの値だ」というコードだと思えば、使い所のイメージが湧き易いと思います。
例えば、先程のコードを Sheet2 の C1 にコピペしてみます 。

Sub 値のみ貼り付け_簡単_別シートの値()
  Worksheets("Sheet2").Range("C1").Value = Worksheets("Sheet1").Range("C1").Value
End Sub

注意点

貼り付け先 = コピー元

別の言い方をすれば、

出力したい場所 = 取得したい場所

というコードになります。
逆に書くいて大事なデータが消えない様に注意しましょう(経験者は語る)。

コメント

  1. かな より:

    別のブックから貼り付けたいときはどうしたらいいですか?
    結合セルにも使えますか?

    • 7716nosola より:

      コメントありがとうございます。

      >別のブックから貼り付けたいときはどうしたらいいですか?

      動作が高速で簡単な方法がありますよ。
      記事にしてみました。
      https://nanmemo.com/ather_book_reference

      >結合セルにも使えますか?

      出来ます。
      こちらも上記の記事き記載してみました。
      お役に立てば幸いです。

タイトルとURLをコピーしました