【VBA】セルの領域指定方法を詳細解説!一番端まで一括選択も!

f:id:yshgs_elec:20200924211355j:plain

この記事では、VBA初心者に向けて、セル領域を指定する方法をご紹介していきます。

 

セルの領域指定は、データをコピーして貼り付けたりする際に必須となるスキルです。ぜひこの記事を読んで、やり方をマスターしておきましょう。

 

さっそくやっていきます!

 

スポンサーリンク

 はじめに

この記事では3つのパターンで領域を指定する方法をご紹介していきます。

 

ぜひ一緒にエクセルを動かして、理解を深めていきましょう。

 

とはいえ、まずはVBAが使えないことには始まらないので、VBAを始めて使うという方は、以下の記事を参考に、まずはVBAを使える状態にしておきましょう。

www.higashisalary.com

 

それではここからは本格的なスキル紹介に移っていきます。

 

スポンサーリンク

セル領域を指定する3つの方法

ただ単に領域指定方法だけを説明しても、理解が深まらないと思いますので、この記事では、

①指定した領域のデータをコピーする

②別のセルを指定して、①でコピーしたデータを張り付ける

というVBAコードを書いていきます。

 

具体的には、下の画像のように、A1セルからC10セルまでをコピーし、E1セルに張り付けるという作業をVBAを用いて行っていきます。

セルの領域選択を練習する際の作業概要図

非常に簡単な作業ではありますが、この一連の流れの中でVBAでのセルの領域指定方法をしっかりと学ぶことができると思います。

 

それではここからは、この作業を行ってくれるVBAコードを3つのパターンに分けて紹介していきます。

 

cellsを使って領域を指定する方法

まず一つ目はcellsを使って領域を指定する方法についてです。

 

まずはcellsの基本知識を説明します。

VBAでは基本的にcells(*,*)という形でセルの場所を指定することができます。

 

この * の部分は

一つ目の * で行数(縦方向へのセルのカウント数)を表し、二つ目の * で列数(横方向へのセルのカウント数)を表しています。

 

具体的には、cells(1,1)はA1セル、cells(3,1)はA3セル、cells(2,3)はC3セル、という具合になります。

 

次はこのcellsを使った領域指定方法を説明します。

VBAで領域を指定するには

Range(cells(*,*),cells(*,*))

という形で記述します。

 

具体例を見てみましょう。

Sub region_select1()
    Range(Cells(1, 1), Cells(10, 3)).Copy
    Cells(1, 5).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

 

これが先ほど紹介したA1セルからC10セルまでをコピーしてE1セルに張り付けるVBAコードです。

2行目でコピーしたい領域を指定しています

 

cells(1,1)がA1セル、cells(10,3)がC10セルです。

それら2つのセルをRangeとカンマ( , )でつなげてあげることで領域指定しています。

 

領域指定ができたら、それを.Copyでコピーし、張り付けたい場所をcells(*,*)と .Select で指定し、ActiveSheet.Pasteで張り付けるという流れですね。

※最後のApplication.CutCopyMode=Falseはコピーしている状態を解除するために書いているものですので初心者の方は深く考えなくて大丈夫です。

 

というわけで、cellsを使った領域指定方法を理解いただけたのではないでしょうか?

 

直接セル領域を指定する方法

次は先ほど紹介したcellsを使わないで、直接セルの領域を指定する方法をご紹介します。

 

例えば、BC1セルからCD8セルまでを選択したい、となったときに、BC列やCD列が左から何行目かなんてすぐにわかりませんよね。

 

そのように、数えるのが面倒な場合は、直接セルの場所を指定することが出来ます。

 

その場合のVBAコードは次のようになります。

Range( ” * * : * * ” )

* * の部分にはA1とはC10というようにセルの場所を直接記入します。

 

実際の使用例を見てみましょう。

このコードも先ほどとやっていることは同じです。

Sub region_select2()
    Range("A1:C10").Copy
    Range("E1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

というわけで、cellsを使わずに、直接領域を指定する方法についても理解いただけたのではないでしょうか?

※このやり方の方が初心者には直観的でわかりやすいかもしれませんが、最初に説明したcellsを使ったやり方の方が、変数を簡単に使えたりするので、個人的にはcellsを使った方法に慣れておくことをお勧めします

 

一番下&一番右のデータ領域を一括選択する方法

ここまで紹介したしたやり方は、あくまでも指定したい領域がA1セルからC10セルまでであることがわかっている場合に使えるものでした。

 

しかし、コピーしたい領域がどのくらいのサイズなのかわからない場合もあると思います。

 

そこで次は、データ群の一番下&一番右までを指定する方法についてご紹介します。

 

いきなりですが、以下がその場合のVBAコードです。

※やっていることは先ほどまでと全く同じです。

Sub region_select3()
    Cells(1, 1).Select
    Range(Selection.End(xlToRight), Selection.End(xlDown)).Copy
    Cells(1, 5).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

 

すこし難しくなっていきましたね。

 

やっていることは

①まずは指定したいデータ群の左上の場所を指定する。

⇒Cells(1,1).select

②①で指定した場所から右端のデータまで移動した場所を取得する

⇒Selection.End(x|ToRight)

③①で指定した場所から一番下のデータまで移動した場所を取得する

⇒Selection.End(x|Down)

④Rangeで②と③で取得した場所を指定してあげる。

⇒Range(②, ③)

という流れです。

 

これは実際に業務効率化などに着手すると非常に重宝するスキルですので、ぜひマスターしておきましょう。

 

スポンサーリンク

おわりに

というわけで、VBAでのセル領域指定方法について、3つのパターンに分けて説明しました。基本中の基本スキルばかりですので、しっかりと覚えておきましょう。

 

このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。

■エクセル業務をもっと効率化したい。

■残業を減らしてもっと子供と遊びたい。

こんな人はぜひ他の記事も読んでみてください。

また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。

私にわかる範囲であればご協力いたしますので。(もちろん無料です。)

 

最後に・・・

このブログを応援してあげても良いよ、という方は以下のボタンをポチっていただけると嬉しいです。

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

Twitterもやっていますので、興味があれば覗いてみてください。

それではまた!!

コメント

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