「値のみ貼り付け」を 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
注意点
貼り付け先 = コピー元
別の言い方をすれば、
出力したい場所 = 取得したい場所
というコードになります。
逆に書くいて大事なデータが消えない様に注意しましょう(経験者は語る)。
コメント
別のブックから貼り付けたいときはどうしたらいいですか?
結合セルにも使えますか?
コメントありがとうございます。
>別のブックから貼り付けたいときはどうしたらいいですか?
動作が高速で簡単な方法がありますよ。
記事にしてみました。
https://nanmemo.com/ather_book_reference
>結合セルにも使えますか?
出来ます。
こちらも上記の記事き記載してみました。
お役に立てば幸いです。