セル入出力


セルの値を操作

VBAを使って簡単にエクセルのシートにアクセスすることができます。

エクセルとの連携が他のプログラミング言語を使用した場合に対して比較的容易であることがVBAの強みでもあります。


参照形式

セルを指定する場合、A1参照形式R1C1参照形式があります。

おそらくA1参照形式が初期設定になっているかと思いますが、VBAを使う場合、R1C1参照形式の方が便利なケースが多いと思います。

この機会にR1C1形式の使い方を覚えておきましょう。

A1参照形式の場合、エクセルの列(横方向)の上にA、B…とアルファベットが振ってあると思います。

R1C1参照形式の場合、この表示が縦方向と同じように数字で表されるようになり、座標を考えるときに分かりやすくなります。

設定の仕方は、ツールバーのファイルオプション数式→『R1C1参照形式を使用する』にチェックを入れるだけです。

元に戻したい場合はチェックを外せばOKです。

R1C1参照形式の設定

セルに文字を出力

まずはVBAを使ってセルに文字を出力してみましょう。

VBEを開き、標準モジュールに以下のように書いて実行してみてください。

'セルに文字列を出力
Sub syuturyoku()
    Cells(1, 1) = "文字"
End Sub
セルへの書き込み

Cells(1,1)というのは縦座標が1、横座標が1のセルを示しています。R1C1参照形式ではCells(縦座標,横座標)でセルの位置を指定します。ちなみにA1参照形式で表現すると同じセルはRange("A1")となります。

ここでは(1,1)のセルに"文字"という文字列を出力しました。


セルから文字を入力

今度はセルの値をVBAで読み取ります。

以下のコードを書いて実行してみましょう。

'セルの値を読み込む
Sub nyuuryoku()
    Dim s As String
    s = "セル(1, 1)の文字は「" & Cells(1, 1) & "」です"
    MsgBox s
End Sub
セルの読み取り

sという文字列変数に"セル(1, 1)の文字は「" & Cells(1, 1) & "」です"という文字列を格納し、変数の値をメッセージボックスに表示しています。

ここでは、 & を使って複数の文字列を結合しています。真ん中のCells(1, 1)という部分が、エクセルのセルの値を指定している部分です。厳密にはセルのなのでCells(1, 1).valueとするのが正しいのですが、これは普通省略されます。もちろん、省略しなくても構いません。

Cells(1, 1)の値("文字")が取得され、前後の文字列と結合されて"セル(1, 1)の文字は「文字」です"という一つの文字列として変数 s に格納されていることが分かります。


セルの指定方法

上記例ではCells(1,1)とだけ書きましたが、実はセルの指定としては不明瞭です。例えばSheet2を選択して(アクティブにした状態で)nyuuryoku()を実行すると、以下のように先ほどとは違う結果になります。

シートを指定していない例

これはつまり、Cells(1,1)だけではアクティブなシートのセルを指定しまうからで、アクティブシートに関係なくいつでもSheet1を指定したい場合にはSheet1.Cells(1, 1)とシートまで指定して書きます。

シートを指定した例

ただし、これでも不十分です。なぜなら、エクセル上で複数のファイル(ブック)を開いて作業することがあるからです。他のブックがアクティブになっている場合、他のブックのSheetが参照されてしまいます。

他のファイルを開いているときでも作業しているブック(VBAを記述したファイル)を指定したい場合には、ThisWorkbook.Sheets("Sheet1").のように書きます。

直接ファイル名自体を指定したい場合はWorkbooks("Hello.xlsm").Sheets(のようにします。

これは面倒なようですが、無関係なファイルを上書きしてしまうリスクを考えると大事なことです(VBAで実行した処理は『Ctrl+Z』で元に戻せないので注意が必要です!)し、他のファイルを操作できるというのはとても重要なことです。


マクロの自動記録を利用する

エクセルのマクロという言葉を聞いたことがあるかもしれませんが、マクロはVBAを利用した簡易的な作業を実行するためのショートカット機能です。

マクロは開発タブから選択することができます。開発タブが表示されていない場合は、リボンのユーザー設定で追加してください。

マクロの選択

マクロの自動記録を使うと、シート上で行った動作をVBAのコードとして記録することができます。

VBAで処理したい動作の書き方が分からない場合、自動記録したコードを参考にして自分で編集することができるので便利です。

自動記録すると、標準モジュールが作成され、マクロ名で指定した名前のSubプロシージャが自動的に作られます。もちろん、自動記録されたマクロ自体を編集することもできます。

また、自分で作成したマクロにショートカットキーを登録することができますが、誤作動の原因となることがあるので、あまりおすすめしません。実行時にはVBEから起動するか、専用のボタン等を作成してそこにマクロを登録するのが無難です。

ボタン等は開発挿入フォーム コントロールから選択して追加します。

フォームの追加

配置したボタンにマクロを登録したい場合、デザインモードで配置済みのボタンをダブルクリックすればVBEが起動するので、そこにプログラムを記述することができます。