パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)

EXCELのオブジェクト(セルの指定)

EXCELのVBAでプログラミングしようと思ったら、EXCELの独特なオブジェクトやメソッドについて知らねば
なりません。旧BASICやVisual Basicでのプログラムの経験は、EXCELのVBAプログラミングの習得に
おおいにやくたつと思います。しかし、旧BASICやVBの経験があっても、EXCELのオブジェクト、
プロパティ、そしてそれらの操作にはまた、非常に特有なものがあって、慣れるまで少しとまどうかも
しれません。また、それら特有のオブジェクト、プロパティ、メソッドに慣れないと、非効率で遅く、無駄な
コードを書くことになるでしょうし、あるいはEXCELでは何もできないと嘆くか、VBに比べてなんとしょぼいのか
とがっかりする(あるいは怒る)ことになるかも知れません。
しかし、わかってくると、EXCELのVBAに非常に便利で強力な命令が用意されてしることに
気づくでしょう。BASICあるいはVB流にやるると、10行にもおよぶコードになるところを(しかも遅い)、
VBAの強力な命令1つで、さらりとしかも高速にやることができたりします。
ここでは、そんな切れ味するどいけど、ちょっとくせのあるVBAについて、いろいろと取り上げていきたいと
思います。まずはEXCEL特有のオブジェクトについてです。

オブジェクトについては正確に学ぼうと思ったら、それ専門の何百ページという分厚い本が
あるくらいですから、結構大変なことです。従ってここでは、オブジェクトとは何ぞや、ということは触れずに
VBAでプログラムするという観点から実践的にいきたいと思います。
もし、もう少し正確に理解したいと思ったなら、「オブジェクト、コレクション、アクセッサ」を参考にして下さい。
また、Visual Basicのオブジェクトについては「初めて作るVBプログラム」で軽く触れましたので
参考にして下さい。
まず、表計算ソフトであるEXCELでは、セルを指定する、セルに値を入れるということが大基本ですから
その方法についてやってみます。

だいたいVBAでプログラムをやって見ようという方は、「EXCELのVBA入門」のような本を一冊は買われた
ことかと思います。入門書であっても、網羅的であったり、堅苦しい記述が多いですね。ここでは詳細なことは
本にまかせて、(1)躓きやすい点のエッセンスだけ、(2)EXCELを面白く使う方法を中心に
という方針でいきたいと思います。
ここに書いてあることが、理解できれば、本の内容もわかるようになると思います。
オブジェクトとかプロパティとはなんぞやといことはVBAプログラムを試行錯誤しながら作る内に、
いつのまにか、なんとなくわかるようになるでしょう。

1 セルを指定する

(1) セルの指定のしかた
それでは、
”hello.xls”というワークブックの
”sheet1”というワークシートの
”A1”のセルに
10という数値を入れたいといとします。

EXCELのVBAでは下記のように記述します。
Application.Workbooks("hello.xls").Worksheets("sheet1").Range("a1").Value=10
applicationオブジェクト Workbookオブジェクト  worksheetオブジェクト  rangeオブジェクト プロパティ

EXCELではオブジェクトが階層構造になっており、上位のオブジェクト−−>下位のオブジェクト
という風に指定していきます。
すなわち、日本で住所を表すのに 東京都−−>練馬区−−>大泉−−>1丁目 というように指定するのと
同じに、Application−−>Workbook−−>Worksheet−−>Range−−>プロパティ
という順に記述します。
ちょっと見にくいですが、オブジェクトとオブジェクトの間は .(ドット) がありますので、よく見て下さい。

これでセルA1に10という数値が入ります。
文字を入れたい場合は、Range以下を
Range("a1").Value="abcde"
とすれば、セルA1にabcdeという文字が入ります。

また、Apllicationは通常省略できます。

(2) Range
Rangeはある範囲のセルを指定できます。(Rangeは”範囲”ですから)
上の例では1つのセルだけを指定しましたが、A1からC5の範囲のセル全部に1を入れたいなら、
Range以下を
Range("a1:c5").Value=1
とすればA1からC5の範囲のセル全部に1が入ります。(下の表の様になる)

 
 
 
 
 
 
       

(3) Cells
Rangeの他にセルを指定するのにCells(行、列)という指定の仕方もあります。

Cells(1,1)とすればセルA1をさします。
Cells(2,3)とすればセルC2をさします。
Cells(2,3).Value=5
ではセルC2に5が入ります。


(4) Worksheets
Worksheetsはワークシートを指定します。上記の例では、ワークシートの見だし部分を
Worksheets("sheet1")のように指定しましたが、1枚めのワークシートなら
Worksheets(1)のように指定することもできます。
2枚めならWorksheets(2)ですね。

2 プロパティ
プロパティとは、オブジェクトのいろいろな状態を規定するものです。具体例を見たほうが速いでしょう。

(1)Range(Rangeオブジェクト)のプロパティ
既にValueはでましたが、Rangeによって指定されたセルの値を示します。
上では、セルの値を指定しましたが、次のようにすると、セルに入っている値を取得できます。
セルA1の値を変数Xに取得します
X=Workseets("sheet1").Range("a1").Value

Rangeオブジェクトのプロパティは数十ありますが、よく使いそうなプロパティの例をあげます

セルA1のフォントをイタリックにします(Font.Italic プロパティ)
Workseets("sheet1").Range("a1").Font.Italic = true

 
ABCD  
   


セルA1のフォントの色を赤にします(Font.Colorプロパティ)
Workseets("sheets").Range("a1").Font.Color=RGB(255,0,0)

 
abcd  
   

セルA1のセル内部の色を赤にします(Interior.Colorプロパティ)
Workseets("sheet1").Range("a1").Interior.Color=RGB(255,0,0)

  A B
1 abcd  
2    



(2) Worksheets(Worksheetオブジェクト)のプロパティ
Worksheetsにも数十のプロパティがありますが、面白いものを紹介します。
Visibleというプロパティは、そのオブジェクトの表示(Visible=true)、
非表示(Visible=false)に関するプロパティです。
sheet1というワークシートを消す(非表示にする)には次のようにします。
Worksheets("sheet1").Visible=false
これで、ワークシートを消して同僚を驚かしてみてください。

2 セルとセルの足し算
それでは、今までの復習として、セルA1とB1の値を足してC1に入れるVBAプログラムをつくってみます。

Sub ADD()
X=Worksheets("sheet1").Range("A1").Value
Y=Worksheets("sheet1").Range("B1").Value
Worksheets("sheet1").Range("C1").Value=X + Y
End Sub



実際のVBAプログラムは
Sub  
..........
..........
End Sub
という形式で書きます。
これは、Sub プロシージャと呼びます

TopPage > Visual BasIc&EXCEL活用研究目次