マクロの自動記録で雛型作って適当に改造というお手軽さ。
一般企業の業務システムなんて殆ど何でも作れちゃうし!
でもトラブルの元になることもあったりする。
VBAはMicrosoft Officeに搭載されている統合開発環境Visual Basic Editor(VBE)上で開発する。
コードはMicrosoft Excel 2003と2007で動かしているが2003以前でも2007以降でもたぶん動く。
バージョン間の互換性は高い。
Sub HelloWorld()
'これはコメント、アポストロフィーのあとに入力する
'メモみたいなもん
'実行結果はA1セルにHelloWorldと表示される
Range("A1").Value = "HelloWorld"
End Subオブジェクト名.メソッド名 オブジェクト名.プロパティ名 = 値Range("A1").Value はRange(セル)にValue(値の代入の設定を行うプロパティ)をするという意味である。
Sub 変数()
'あらかじめA1セルとB1セルに入力されている整数を掛けて計算結果をC1セルに表示する
Dim i As Integer
Dim j As Integer
i = Range("A1").Value
j = Range("B1").Value
Range("C1").Value = i * j
End SubDim i As Integer Dim j As Integer次に用意した変数に値を代入する。今回はセルを参照してそこに入力されている値を代入する。
i = Range("A1").Value
j = Range("B1").Value
C1セルに計算結果を代入する。
Range("C1").Value = i * jint i,j,k;VBAではこのようにするとk以外はVariantになってしまう。
Dim i, j, k As Integer正しくは
Dim i As Integer, j As Integer, k As Integer他にもVBA(VB)は独特の仕様があるから気を付けよう。
| 型 | 扱えるデータ | メモ |
| Integer | ||
| long | ||
| Songle | ||
| Double | ||
| String | ||
| Byte | ||
| Boolean | ||
| Currency | ||
| Date | ||
| Object | ||
| Variant |
Sub 計算()
Dim i As Single
Dim j As Single
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
Sub 相対参照()
'セルG7を選択する
Range("G7").Select
'ActiveCellは現在選択されているセルを参照する。
'Offsetはセルを移動させる。左の数値は上下の指定、右の数値は左右の指定。
'下に1つ、右に3つセルを移動させる。移動後のセルはJ8。
ActiveCell.Offset(1, 3).Select
End Sub| -2,-2 | -2,-1 | -2,0 | -2,1 | -2,2 |
| -1,-2 | -1,-1 | -1,0 | -1,1 | -1,2 |
| 0,-2 | 0,-1 | 基準 | 0,1 | 0,2 |
| 1,-2 | 1,-1 | 1,0 | 1,1 | 1,2 |
| 2,-2 | 2,-1 | 2,0 | 2,1 | 2,2 |
=$C$1+$D$1
Sub 絶対参照01()
Range("A1").Select
End SubSub 絶対参照02()
Range("B1,B3,B5,B7,B9").Select
End SubSub 絶対参照03()
Range("C1:D5").Select
End SubSub 絶対参照04()
Range("A1,C1:D5").Select
End SubCells(行番号,列番号).Select
Sub コピペ()
'文字列の代入
Range("A1").Value = "( ^ω^)"
Range("A2").Value = "\(^o^)/"
Range("A3").Value = "(´∀`)"
Range("A4").Value = "キタ━(゚∀゚)━!"
Range("A5").Value = "vipper"
'コピペ
Range("A1:A5").Copy 'Copy→Cutにするとカット
Range("B1").PasteSpecial'コピー先の先頭を指定してペースト
End SubRange("B1,B3,B5,B7,B9").Copy
やRange("A1,C1:D5").Copy
のようなセルの指定はできない。Sub 設定()
'フォント
Range("A1:A10").Font.Name = "MS明朝"
'太字
Range("B1:B10").Font.Bold = True
'斜体
Range("C1:C10").Font.Italic = True
'下線
Range("D1:D10").Font.Underline = True
End SubRange("A1:A10").Font.Name = "MS明朝"
Boldプロパティによる太字の設定。Falseは太字の解除を行う。
Range("B1:B10").Font.Bold = True
Italicプロパティによる斜体の設定。Falseは斜体の解除を行う。
Range("C1:C10").Font.Italic = True
Underlineプロパティによる下線の設定。Falseは下線の解除を行う。
Range("D1:D10").Font.Underline = True'セルの塗りつぶし
Range("A1").Interior.ColorIndex = 10
'文字色の変更
Range("A1").Font.ColorIndex = 10'セルを塗りつぶす
Range("A1").Interior.Color = RGB(255, 255, 255)
'文字色の変更
Range("A1").Font.Color = RGB(255, 255, 0)Range("A1").Font.Size = 12そのような場面では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を省略することができる。
Sub 設定()
'セルの指定
Range("A1:A10").Select
With Selection
'フォント
.Font.Name = "MS明朝"
'太字
.Font.Bold = True
'斜体
.Font.Italic = True
'下線
.Font.Underline = True
End With
End Sub
条件(セルの中の値や計算の結果など)によって処理を分けたいときにはIf文やCase文を使う。