シートへのアクセス

これまで、Excel の上で Visual Basic を学んで来たが、本ページでは Excel らしさを活かし、
Excel のシート (表) にアクセスする方法を学ぼう。

シートの読み込みと書き出し

プログラムには入力と出力があることが多い。

プログラムに数字や文字列を入力する方法としては今まで2通りの方法を学んだ。 利用例は

(1)
	x = 5
(2)
	x = InputBox("数字を入力してください")


などである。

一方、出力方法として今まで多く取り扱ったのは する方法である。これについては問題ないであろう。

ここで、本ページでは入力と出力に対して新たな手法を学ぶ。 それは 方法である。

これにより、「Excel の表からデータを取得し (入力)、Excel の表にデータを書き出す (出力)」などの処理が可能になる。

まず、準備として Excel の表のセル A1 と A2 に、それぞれ整数を入力しよう。



上の例では 10 と 20 を入力したが、この 10 と 20 の和を Visual Basic で計算させて求めることを考えよう。

もちろん、Visual Basic を使わず Excel のみでも 二つのセルの和は計算できる。

しかし、ここではそれをあえて Visual Basic 側で行うのが目的である。

では、10 と 20 の和を計算する以下のプログラムを記述してみよう。
(Visual Basic Editor の起動方法は「第一回:プログラムを書き始めるまでの準備」参照)



ここで、ポイントは という部分であり、これは の意味を表す (なお、(i,j) は縦 i 行目、横 j 列目の意味であり、数学の行列の添字と同じ記法)

これによりエクセルのシート (表) のセル値を Visual Basic から利用できる。
プログラミング用語では、これを「エクセルのシートのセルの値にアクセスする」という言い方をする。

これを左辺に持って来れば、値をシートのセルに書き込むこともできる。
上のプログラムでは足し算の結果 (30) をセル (1,2) に書き込んでいる。

プログラム実行後、エクセルのシートを見てみると、確かにセル (1,2) 、即ちセル B1 に結果が書き込まれていることがわかる。



つまり、上のプログラムは、シートから値を入力として受け取り、シートに値を出力した、というわけである。

なお、シートへのアクセスでは、Sheet1.Cells(i,j) のような記述が多くなり、若干記述量が多い。
記述量を多少減らすため、以下のような「With 〜 End With 文」が用意されている。



この「With 〜 End With」内部では「Sheet1」を省略して記述できる。

シートに対するデータの作成

次に、Excel に沢山のデータを一気に出力する例を見よう。

特にここで新しい知識を学ぶわけではないが、 これまで学んだ知識の多くを活用するので、若干難しく見えるかもしれない。

以下のプログラムは、 「Excel のシートに sin 関数のデータを生成するプログラム」である。

入力は取らず、出力先が Excel のシートとなっているわけである。

もちろん、Visual Basic を使わず、Excel のみで sin 関数のデータを出力することは可能であるが、
それを敢えて Visual Basic を用いて実行するのがここでの目的である。

では、以下のプログラムを記述して実行してみよう。



このプログラムを理解するためのポイントは以下である。 上記プログラムを実行すると、Excel のシートに以下のようなデータが出力されている。



これが実際に sin のデータになっていることを確かめるため、グラフを描いてみよう。
作成された表をマウスでドラッグし、 グラフウィザードを起動して散布図を選択するのだった。
(詳細は Office 2003 の基礎「Excel03: Excel を用いたグラフ作成 (理論グラフ作成)」 を参照)







以下の図はグラフ作成の途中であるが、確かに sin のグラフになっていることがわかる。
このように、Visual Basic を用いてデータを生成し (シミュレーション)、 その結果を Excel でグラフ表示することができることがわかった。

もちろん、Excel のみでもある程度簡単なデータなら生成することはできるのだが、
Visual Basic を用いると、If 文などを用いてより複雑なデータを作成することができる。







←プロシージャの再帰的呼び出しシートへの高速なアクセス→

Excel / OpenOffice で学ぶ Visual Basic for Applications (VBA)に戻る