脱・コピペ地獄!クリップボードを使わない「値渡し」でExcel仕事を10倍速にする

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!

突然ですが、VBAでデータを転記するとき、「コピーして、貼り付ける」というコードを書いていませんか?

もし「マクロ実行中に他のコピー作業ができなくてイライラする」なら、それは「値渡し(あたいわたし)」を知らないせいかもしれません。

今日は、「値渡し」テクニックをご紹介します。

【業務効率化】VBAの記事を見る

マクロがあなたの「コピー」を邪魔している?

よくある悩み。それは「マクロがクリップボードを占領すること」です。

VBAで .Copy と .Paste を使うと、PCのクリップボード(コピーしたデータを一時保存する場所)を使います。

つまり、マクロが動いている間、私たちは他のメールやチャットの文章をコピーできません。

もしうっかりコピーすると、本来コピペするはずじゃなかったデータがまぎり込んでしまったり、マクロがエラーを起こして止まってしまうことも……。怖いですよね。

「コピー」ではなく「テレポート」させよう

そこで登場するのが「値渡し」です。

  • Copy & Paste: 家具(データ)をトラック(クリップボード)に積んで、別の部屋に運ぶ。
  • 値渡し: 家具(データ)を、別の部屋にテレポートさせる。

「値渡し」はクリップボードというトラックを使いません

直接、セルからセルへ値を代入します。だから、マクロ実行中に私たちが裏で別の作業をしていても、全く問題ありません。

驚きのスピードと安定性

「値渡し」のメリットは安全性だけではありません。速いんです。

一般的なデータ量(数千行~数万行)であれば、クリップボードを経由しない分、処理速度は劇的に向上します。

実際に処理速度を計測させてみるのも面白いですよ。

そして、コードもたったの1行で済みます。

コピペで使える!魔法のコード

では、実際にコードを見てみましょう。

× 今までの方法(Copy & Paste)

Sub OldCopy()
    ' A1セルの値をB1セルにコピー&値貼り付け
    Range("A1").Copy
    Range("B1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False ' コピーモード解除(これを忘れると点線が残る)
End Sub

3行も使っていますね。しかも画面がチカチカします。

◎ これからの方法(値渡し)

Sub SmartTransfer()
    ' A1セルの「値」を、B1セルの「値」に入れる
    Range("B1").Value = Range("A1").Value
End Sub

たったこれだけです。

「B1セルの値は、A1セルの値と同じです」と宣言するだけです。

範囲指定もOKです

Sub RangeTransfer()
    ' A1:A10の値を、B1:B10に転記
    Range("B1:B10").Value = Range("A1:A10").Value
End Sub

※転記元と転記先のセルのサイズ(行数・列数)を合わせるのがコツです。

おわりに

もし、さらに大量のデータを扱うようになれば「配列」という技術もありますが、まずはこの「値渡し」で十分。ぜひ試してみてください。

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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