セル指定の方法(RangeとCells)
エクセルマクロを作成する時、セル指定が初心者には使いづらいので、ちょっと調べました。
マクロの記録機能のセル表現
まずは、単一セルのコピーと複数セルのコピーをマクロの記録機能でコード化しました。以下です。
1 2 3 4 5 6 7 8 9 10 11 |
'単一セル Range("A1").Select Selection.Copy Range("A4").Select ActiveSheet.Paste '複数セル Range("A1:B2").Select Selection.Copy Range("A6").Select ActiveSheet.Paste |
セル指定のアルファベットを使いたくない
上記の通り、Rangeの引数は、単独セルの場合、”A1″、複数セルの場合、”A1:B2″になります。えー、アルファベットがはいってる... って思いませんでした? これでは、Forと数値の変数を使って繰り返し命令を作成できないですよね。そこで行列の指定部分をアルファベットをつかわずにできないかを調べた結果、Cellsを使える様でした。以下のように書き換えることができます。
1 2 3 4 5 6 7 8 9 10 11 |
'単一セル Range(Cells(1,1),Cells(1,1)).Select '変更 Selection.Copy Range(Cells(4,1),Cells(4,1)).Select '変更 ActiveSheet.Paste '複数セル Range(Cells(1,1),Cells(2,2)).Select '変更 Selection.Copy Range(Cells(6,1),Cells(6,1)).Select '変更 ActiveSheet.Paste |
Cellsを引数にするRangeの引数は(開始セル、終了セル)です。次に、Cellsの引数は(行,列)です。Cellsを引数にしないRangeの引数は”A1″の列,行に対して、Cellsの引数は行,列であり、注意が必要です。また、Cellsを引数にするRangeで単独セルを示す場合も、開始セル,終了セルの引数が2つ必要なところにも違和感があります。なんでこんなに直観的でないのだろうと思いつつも、RangeとCellsを組み合わせて、アルファベットを使わずに表現できる様になりました。
違和感があれば
ちなみに、単独セルを指定するのに、Range(Cells(1,1),Cells(1,1))を使うことに違和感があれば、Cellsで表現できます。以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 |
'単一セル Cells(1, 1).Select '変更 Selection.Copy Range(Cells(4, 1), Cells(4, 1)).Select ActiveSheet.Paste '複数セル Range(Cells(1, 1), Cells(2, 2)).Select Selection.Copy Cells(6, 1).Select '変更 ActiveSheet.Paste |
いかがでしょうか。Cellsを使用して行列を数値、数値で表現できるようになれば、Forを利用した繰り返し文も作成しやすくなります。面倒なエクセル作業もエクセルマクロを使って効率的にできれば良いですね。それでは