アラフィフからのプログラミング!デジタルの海にダイブした私のリアルな体験#3
シートの選択や文字の入力、消去などがボタン一つでできるようになったことに興奮した私。この調子で大嫌いなコピペも自動化してしまえ!と学習は続きます。
ついに自動でコピー&ペースト!
「練習」という名前のシートのE3セルに「あいうえお」と入力して、その文字を消すことができましたので、今度はE3セルの「あいうえお」をC8セルにコピペしてみます。
Sub コピペ()
Sheets("練習").Select
Range("E3").Copy
Range("C8").PasteSpecial Paste:=xlPasteValues
End Sub
これを動かしてみると、本当にC8セルに「あいうえお」の文字がコピーされました!手でコピペするときと同様、ペーストするときには値貼り付け、数式貼り付け、書式貼り付けなど、いろいろありますが、それもきちんとかき分けることができます。すごい!
じゃあ、セル一つじゃなくて、複数のセルをまとめてコピペとかできるのかなあ?ということで、読み進めます。
複数のセルを範囲で選択するといってもその端っこの場所が毎回違うということがよくあります。毎月毎月データが追加されるシートだったりすると、今月は30行目まで入力されていても、来月は31行目、再来月は32行目・・・とどんどん行が増えていってしまいますよね。こういうシートを手でコピーしているとき、私たちの頭の中ではどのように処理しているのでしょうか?おそらく
目的のシートを開く
A列目を上から下まで見ていく
データが入っている一番最後の行を見つける
見つけた行を右のほうまで見ていく
データが入っている一番最後の列を見つける
A1から③で見つけた行の⑤で見つけた列のセルまでを範囲で選択する
コピー
張り付けたいシートを開く
貼り付け先の左上のセルにペースト
こういう手順を無意識に行っていますよね。あまりにデータが多い場合には「スクロールがめんどくさいなあ」などと思ったりしますが。でも、プログラミングは常にこの分解作業をやっていると思います。分解したらVBAに翻訳していくということですね。
プログラミングとは分解と翻訳
世の中のプログラマーとかエンジニアといった人たちは、世の中のあらゆる物事をこのように見ることができる、見る訓練をしているんだと思います。私が接したことのあるエンジニアの人たちの印象で言ってしまいますが、彼ら・彼女らは物事を論理的に順序だてて考えられる人だと思います。世の中の複雑なものをデジタルで扱おうとする際には、こうして細かく分解して単純化し、手順通りに並べていく必要があるんだということが分かりました。
で、実際のコードはこんな感じ(実際にはもっと簡単に書けます)
Sub 隅から隅まで選択()
Sheets("練習").Select
Range("A1").Select
Selection.End(xlDown).Select
Selection.End(xlToRight).Select
Range(Cells(1, 1), Selection).Select
End Sub
これで、データがどこまで続いていても、欲しい部分だけコピーすることができるということが分かりました。実際に仕事で行っている作業はもっと複雑ですが、抽象度を上げて考えると「コピーしたい部分を探して選択する」わけですから。
コピペは全部自動化だ~!
さらに、実際の仕事では同じシートの中でコピペというのはあまりなく、隣のシートだったり、別のファイルからコピーしてきます。こういうのもできるのでしょうか?もちろんできます。同じシートの中でコピペできるのであれば、選択する場所が別のシートにあろうが、別のファイルにあろうが理屈は同じです。
ということは、ファイルをまたいで目的のセルのコピー&ペーストが自動でできるなら、これを応用して応用して応用して・・・やっていけば、究極的には毎月のコピペも自動でできるってことだよね!?
ということで、「この調子で担当しているすべてのコピペを自動化してやるぞ~!」と俄然やる気になった私なのでした。
この記事が気に入ったらサポートをしてみませんか?