初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門-実践基礎:セルを操作する-その2

前回はセルの操作というテーマでざっくりと、プログラムってこうやって書く。的なことを書きましたが、今回も似たようなことをやっていきたいと思います。繰り返すことで、できるようになります!今日はセルの操作その2ということで、コピーとか、削除とかその辺を触ってみたいと思います。やることは同じです。

  • 最初と最後を書いて、
  • やることを日本語で書いて、
  • 日本語をVBAに翻訳するだけ。

これです。

セルをコピーする。


以前もブログで取り上げているんですが、セルのコピーをマクロで記録するとこうなります。

Sub Macro1()

    Range("A1:A6").Select
    Selection.Copy
    Range("B1").Select
    ActiveSheet.Paste
End Sub

大体「コピー」という言葉は動作が2つ含まれていたりします。本来ならコピー&ペーストなんて呼んだりしますよね。ですが大体はコピー。ですませます。ですがこの記録されたマクロを見るとやっぱり二つなんですよね。CopyメソッドとPasteメソッドがあります。初心者の方で、私のブログを読んでいない人はきっと・・・

Sub Macro1()
    Range("A1:A6").Copy
    Range("B1").Paste
End Sub

っふ、できたぜ。。。。



となるのでしょうが、これ「ダメ」ですね。まずどのシートか?が書かれていない。そして、実はPasteメソッドは「いらない」のです。


( ゚д゚)?貼り付けないってこと?


違います。その答えは。。。。

そろそろヘルプでも読んでみようか?


エクセルのVBAにはヘルプがあります。このヘルプ。普段はほとんど見ないと思いますが、エクセルのマクロを作る上では非常に重要な役割を果たしてくれます。わからないことは良くGoogle先生に頼りますが、その後でちゃんとその機能はどういうものなのか?をヘルプで見る習慣を付けて行きましょう。

はっきり言ってヘルプは「読みにくい」し「わかりにくい」と思います。しかし、やっぱり読むべきです。そしてわかるところだけでも理解しておけば良いのです。例えば今回で言えばコピーメソッドですよね?調べてみましょう。


f:id:drumer2sh:20131213102957p:plain


( ゚д゚)?じゅ、じゅもん・・・・?


正直何が書いてあるのか最初はわからないと思いますが頑張って読んでみましょう。するとこんなことが書かれている記述があります。

expression.Copy(Destination)

expression : 必ず指定します。上のいずれかのオブジェクトを返すオブジェクト式を指定します。 
Destination:省略可能です。バリアント型 (Variant) の値を使用します。コピー先のセル範囲を指定します。この引数を省略すると、クリップボードにコピーします。 

( ゚д゚)?どういうこと?


ゆっくり読めば分かるはずです。expressionは要するにRangeとかのCopyメソッドが使えるオブジェクトを指定しないといけないよー。という意味です。そりゃそうですね。そうじゃないと何をコピーすればいいのかわかりません。注目すべきはDistinationです。よく読んでください。

「コピー先のセル範囲を指定します。」

ん?コピー先?


(゚д゚)ハ!


そうです。コピーメソッドにはもうペーストする先を指定する引数があってそれを省略するとクリップボード、指定すればその先にコピーされるというわけです!では、やってみましょうね。

最初と最後を書いて・・・

' コピーするマクロ
Sub Macro1()



End Sub

日本語を書いて・・・

' コピーするマクロ
Sub Macro1()

    ' セルA1~A6をB1にコピーする。

End Sub

VBAに翻訳する。

' コピーするマクロ
Sub Macro1()

    ' セルA1~A6をB1にコピーする。
    Sheet1.Range("A1:A6").Copy Destination:= Sheet1.Range("B1")
    
End Sub

引数は1つしかないのでDestinationを省略して

' コピーするマクロ
Sub Macro1()

    ' セルA1~A6をB1にコピーする。
    Sheet1.Range("A1:A6").Copy Sheet1.Range("B1")
    
End Sub

と書くこともできます。これが本来、私のブログで提唱したいCopyメソッドの使い方です。いかがでしょうか?これならたった1行書くだけです。Paste?何それ?的でもいいですよね。

セルを削除する


さっくりと終わらせます。簡単なので。「Deleteメソッド」使ってください。

最初と最後を書いて・・・

' 削除するマクロ
Sub Macro1()



End Sub

日本語書いて・・・

' 削除するマクロ
Sub Macro1()

    ' セルA1を削除する(上に詰める)

End Sub

VBAに翻訳する

' 削除するマクロ
Sub Macro1()

    ' セルA1を削除する(上に詰める)
    Sheet1.Range("A1").Delete Shift:=xlUp
    
End Sub

はい、終わり。引数Shiftは「どう詰めるか?」を指定します。このxlUpって実は色々と出てきていますので、改めて書いておくと。

項目 説明
xlUp 上に詰める。Endプロパティなら最後に入力されたセルへ上に飛ぶとなる。
xlDown 下に詰める。Endプロパティなら入力された最終セルへ下へ飛ぶとなる。
xlRight 右に詰める。Endプロパティなら以下略・・・
xlLeft 左へ詰める。以下略・・・

となります。このxlUp単体ならば、エクセルならCtrl+十字キーを押したときの動きと同じになるのです。試にやってみるとわかりますが、データが入力されている最終セルへ一気に移動してくれます。A1~D100まで表形式にデータあって、C32のセルから、Ctrl+↓キーを押す。つまりEnd(xlDown)をすると、セルは一気にC100まで移動してくれます。
ただし、あくまで「連続しているデータの最終セル」になりますので、どこかで入力されてないセルがあると、その手前までしか移動できません。これは、エクセルですぐに試せることなので、Ctrl+十字キーを積極的に使ってみてください。
おそらくマウスで操作するよりもかなり早くエクセルを操作できると思います。

今日はここまでー。


次回は、セルの範囲とかセルのはじめと終わりをとったりとかその辺。基礎の基礎ですが意外とできてない人が多いです。


かしこ