マクロの自動記録で雛型作って適当に改造というお手軽さ。
一般企業の業務システムなんて殆ど何でも作れちゃうし!
でもトラブルの元になることもあったりする。
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 Sub
Dim i As Integer Dim j As Integer次に用意した変数に値を代入する。今回はセルを参照してそこに入力されている値を代入する。
i = Range("A1").Value j = Range("B1").ValueC1セルに計算結果を代入する。
Range("C1").Value = i * j
int 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 Sub
Sub 絶対参照02() Range("B1,B3,B5,B7,B9").Select End Sub
Sub 絶対参照03() Range("C1:D5").Select End Sub
Sub 絶対参照04() Range("A1,C1:D5").Select End Sub
Cells(行番号,列番号).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 Sub
Range("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 Sub
Range("A1:A10").Font.Name = "MS明朝"Boldプロパティによる太字の設定。Falseは太字の解除を行う。
Range("B1:B10").Font.Bold = TrueItalicプロパティによる斜体の設定。Falseは斜体の解除を行う。
Range("C1:C10").Font.Italic = TrueUnderlineプロパティによる下線の設定。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文を使う。~
If 条件 Then '条件が満たされているときの処理 処理1 Else '条件が満たされていないときの処理 処理2 End If