シートへのアクセス
これまで、Excel の上で Visual Basic を学んで来たが、本ページでは Excel らしさを活かし、
Excel のシート (表) にアクセスする方法を学ぼう。
シートの読み込みと書き出し
シートに対するデータの作成
シートの読み込みと書き出し
プログラムには
入力と出力
があることが多い。
プログラムに数字や文字列を入力する方法としては今まで2通りの方法を学んだ。
(1) プログラム中に直接記述する方法
(2) InputBox を使う方法
利用例は
(1) x = 5 (2) x = InputBox("数字を入力してください")
などである。
一方、出力方法として今まで多く取り扱ったのは
MsgBox で画面に文字列を表示
する方法である。これについては問題ないであろう。
ここで、本ページでは入力と出力に対して新たな手法を学ぶ。 それは
Excel のシート (表) に対して読み書きする
方法である。
これにより、「Excel の表からデータを取得し (入力)、Excel の表にデータを書き出す (出力)」などの処理が可能になる。
まず、準備として Excel の表のセル A1 と A2 に、それぞれ整数を入力しよう。
上の例では 10 と 20 を入力したが、この 10 と 20 の和を Visual Basic で計算させて求めることを考えよう。
もちろん、Visual Basic を使わず Excel のみでも 二つのセルの和は計算できる。
しかし、ここではそれをあえて Visual Basic 側で行うのが目的である。
では、10 と 20 の和を計算する以下のプログラムを記述してみよう。
(Visual Basic Editor の起動方法は「
第一回:プログラムを書き始めるまでの準備
」参照)
ここで、ポイントは
Sheet1.Cells(1,1).Value
という部分であり、これは
エクセルのシート1の座標 (1,1) のセルの値。
の意味を表す (なお、(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 を用いて実行するのがここでの目的である。
では、以下のプログラムを記述して実行してみよう。
このプログラムを理解するためのポイントは以下である。
「fillfunc -3.14, 3.14, 60」 は、下部で作成する Sub プロシージャを呼び出している。
数字の意味は「x が -3.14 から 3.14 の範囲で、60 点のデータを作成する」である。(実際には 61 点になる)
「fillfunc(x1 As Double, x2 As Double, nd As Double)」 の引数の意味は、
x1: x の最小値
x2: x の最大値
nd: データの個数
である。
dx はデータの刻み幅を表す。
x = x1 + dx * n によって、n 番目のデータの x を計算している。
y = Sin(x) が実際に関数計算をしている部分である。
上記プログラムを実行すると、Excel のシートに以下のようなデータが出力されている。
これが実際に sin のデータになっていることを確かめるため、グラフを描いてみよう。
作成された表をマウスでドラッグし、 グラフウィザードを起動して散布図を選択するのだった。
(詳細は
Office 2003 の基礎「Excel03: Excel を用いたグラフ作成 (理論グラフ作成)」
を参照)
以下の図はグラフ作成の途中であるが、確かに sin のグラフになっていることがわかる。
このように、Visual Basic を用いてデータを生成し (シミュレーション)、 その結果を Excel でグラフ表示することができることがわかった。
もちろん、Excel のみでもある程度簡単なデータなら生成することはできるのだが、
Visual Basic を用いると、If 文などを用いてより複雑なデータを作成することができる。
←プロシージャの再帰的呼び出し
/
シートへの高速なアクセス→
Excel / OpenOffice で学ぶ Visual Basic for Applications (VBA)
に戻る