マクロの自動記録で雛型作って適当に改造というお手軽さ。
一般企業の業務システムなんて殆ど何でも作れちゃうし!
でもトラブルの元になることもあったりする。

はじめに

VBAはMicrosoft Officeに搭載されている統合開発環境Visual Basic Editor(VBE)上で開発する。
コードはMicrosoft Excel 2003と2007で動かしているが2003以前でも2007以降でもたぶん動く。

HelloWorld

変数の利用

計算

Sub 計算()
Dim i As Double
Dim j As Double
  i = 3
  j = 2
  '加
  Range("D1").Value = i + j
  '減
  Range("E1").Value = i - j
  '乗
  Range("F1").Value = i * j
  '除
  Range("G1").Value = i / j
  '除(整数)
  Range("H1").Value = i \ j
  'あまり
  Range("I1").Value = i Mod j
  'べき乗
  Range("J1").Value = i ^ j
  '文字列結合演算子
  Range("k1").Value = i & j
End Sub

セルの操作

条件分岐

条件(セルの中の値や計算の結果など)によって処理を分けたいときにはIf文やCase文を使う。~

繰り返し

無限ループを作ってしまったらEscキーで強制終了しよう。

配列

ワークシートとブックの操作

関数の活用

Excel関数やVBA関数の活用

ユーザー定義関数

Excelではあらかじめ用意されているExcel関数だけではなくユーザー定義関数として自作した関数をワークシート上で使うことができる。
また戻り値を他のプログラムで使うことができる。これについては次項で説明する。

複数のプロシージャを組み合わせたプログラム

処理を分割したり規模の大きなプログラムを作る。

ユーザー定義型の変数

グラフ

ピボットテーブル

データベース

ユーザーフォーム

デバッグ

エラー処理

Win32APIの呼び出し

その他

高度なトピックやTips、説明漏れ、今後の指標など。

オブジェクト指向

VBAはオブジェクト指向言語ではないが一応おまけ程度のクラスの仕組みはあるので
意識すればオブジェクト指向のような実装は可能。
クラスのメソッドを経由して親クラスの変数やメソッドにアクセスできない、
子クラス内から親クラスの変数やメソッドにアクセスできないなどの制限がある。
詳細は参考のオブジェクト指向を参照。

思うようなサンプルが見つからない

そのようなときはVB(ただし.net以前のVBである6.0等)のものを参考にすればよい。
VBAはOfficeの活用に特化したVBであり実行ランタイムも同じである。
つまりVBAもVBの一種でありVBでできることの多くはVBAでもできるのである。
VBの資産を有効活用してより効率的なプログラムの開発をしよう。

バージョン間の互換-2003と2007以降

VBAの言語仕様はほぼ変わっていないがリボンの導入や最大列数・行数の増加、Officeアシスタントの廃止など
操作する対象であるExcel自体がずいぶんと様変わりしてしまった。
そのためプログラムの内容(メニューやツールバー周りや検索するといったようなもの)によっては
予期せぬ結果になってしまったりエラーになってしまう場合もある。
またFileSearchのように一部廃止・変更になっている関数やメソッドもある。
配布や移行などする場合はこれこのようなMSの資料やヘルプ、オブジェクトブラウザに目を通したり
検索や書籍等でして調べるなどしてバージョン間の違いについてしっかり把握しておきたい。

OpenOfficeやその派生との互換

ごく基本的なことを除いてあまり互換性はない。まず動かない。

With文

With文を使うことによってプログラムの記述量を減らすことができる。
また速度的にも有利である。ただしコードが読みづらくなる。
次のプログラムをWith文を使い書き換える。

 Sub 設定()
   'セルの指定
   Range("A1:A10").Select
   'フォント
   'Selectionは相対参照の項で使ったActiveCellと同じで現在選択されているセルを参照する。
   'ただし複数セルを選択しているときActiveCellは先頭のセルしか参照しないので注意すること。
   '今回の場合、ActiveCellを使うとA1セルしか以下の設定が反映されない。
   Selection.Font.Name = "MS明朝"
   '太字
   Selection.Font.Bold = True
   '斜体
   Selection.Font.Italic = True
   '下線
   Selection.Font.Underline = True
 End Sub

With文を使うと以下のようになる。With~End With間のすべてのSelectionを省略することができる。
オブジェクトの記述を1回にまとめてしまうのだ。

Sub 設定()
 'セルの指定
 Range("A1:A10").Select
 With Selection
   'フォント
   .Font.Name = "MS明朝"
   '太字
   .Font.Bold = True
   '斜体
   .Font.Italic = True
   '下線
   .Font.Underline = True
 End With
End Sub

With文の基本形

With 重複しているメソッドやオブジェクト
…
End With

次のように複数のメソッドやオブジェクトを省略することもできる。

 'セルの指定
 Range("A1:A10").Select
 With Selection.Font
       'フォント
       .Name = "MS明朝"
       '太字
       .Bold = True
       '斜体
       .Italic = True
       '下線
       .Underline = True
   End With
End Sub

このようにIf文(後述)などの他の構文と組み合わせることもできる。

Sub 文字列の比較1完全一致()
Dim str As String
str = Range("A1").Value
   With Range("A2")
    If str Like "a" Then
        'A1セルに半角のaが入力されたとき
        .Value = "一致"
    Else
        'それ以外
        .Value = "一致しない"
    End If
   End With
End Sub

値渡し

参考


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-02-23 (木) 23:33:34