EXCEL-VBA


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

VBA(Visual Basic for Applications)


マクロとは、アプリケエーションソフトの操作を自動化するための機能である。
シートやフォームに関連しないコードを 標準モジュール という。
メッセージボックスを表示する。

Sub Message()
  MsgBox "Hello World!"
End Sub

SubとEnd Subの間に記述したコードのかたまりをプロシージャという。
ステートメントを次の行に続ける場合は、改行の前に「 _」(半角スペースとアンダーバー)を記述する。
コメントは「'」(シングルクォーテーション)を使って記述する。

変数の宣言


Integer型(整数)の変数aを宣言する。
Dim a As Integer

文字列型

文字列はStringというデータ型に格納する。
Dim fruit As String
fruit = "りんご"

定数

定数はConstを使って定義する。
Const PI As Integer = 3.14
定数に値を代入することはできない。

特殊文字


  • vbCr 改行
  • vbTab タブ
  • vbBack バックスペース
  • vbNullChar NULL文字

配列

配列の宣言
Dim a(1 To 4) As Integer
または、
Dim a(3) As Integer
配列の要素の参照と代入
a(0) = 1
MsgBox a(0)

MsgBox関数


MsgBox (prompt[, buttons][,title][, helpfile, context])

Buttonsには、vbOKOnly、vbOKCancel、vbYesNo、vbYesNoCancelなどを指定できる。


プロシージャ

Subプロシージャは戻り値がない。
SubステートメントとEnd Subステートメントを使って定義する。
引数のあるプロシージャは以下のように定義する。
Sub A(str As String)
  MsgBox str 
End Sub

Functionプロシージャは戻り値がある。
FunctionステートメントとEnd Functionステートメントを使って定義する。
Function A()
  aaa = "Hello"
End Function

プロシージャの呼び出しにはCallステートメントを用いる。
Call A
引数を渡して呼び出す場合
Call A("引数1")

変数のスコープ

プロシージャ内で宣言した変数は、宣言したプロシージャ内でのみ有効である。
モジュールの先頭で宣言した変数は、モジュール内で有効である。

バリアント型

宣言せずに使用した変数のデータ型をバリアント型(Variant)という。
バリアント型のサイズは16バイトである。
モジュールの先頭で次のように記述すると、宣言していない変数を使用できないようにできる。
Option Explicit

文字列連結演算子

MsgBox "2010" & "年"

""IF~Thenステートメント

If 条件 Then
  処理1
ElseIf 条件2 Then
  処理2
ElseIf 条件3 Then
  処理3
Else
  処理4
End If

""Select Caseステートメント
Select Case 式
Case 値1
   処理1
Case 値2
   処理2
Case Else
   処理n
End Select

値の指定方法
Case 4,5,6
Case 2 To 5  // 範囲指定
比較演算子の使用
Case Is < 10

For~Nextステートメント

Dim i As Integer
For i = 0 To 3
   処理
Next
増分の指定
Dim i As Integer
For i = 2 To 30 Step 3
   処理
Next

For Each ~Nextステートメント

あるオブジェクトの集まりに対して、その中のすべての要素に対して処理を行う。
Dim ws As WorkSheet
For Each ws In WorkSheets
   処理
Next

Do~Loopステートメント

Do While~Loopステートメント

処理の前に条件を評価する。
Do While 条件
   処理
Loop

Do ~Loop Whileステートメント

処理の後に条件を評価する(必ず1度処理を実行する)。
Do
   処理
Loop While 条件

ある条件が成立するまで繰り返しを実行するには、Untilを使用する。

Do Until~Loopステートメント

処理の前に条件を評価する。
Do Until 条件
   処理
Loop

Do ~Loop Untilステートメント

処理の後に条件を評価する(必ず1度処理を実行する)。
Do
   処理
Loop Until 条件

Exitステートメント

Exit For

Exit Do


無限ループ

[Ctrl] + [Break]で中断可能


オブジェクト

操作の対象となる、Excelのワークブックやワークシートをオブジェクトという。
また同じ種類のオブジェクトをひとまとめにしたものをコレクションという。
オブジェクトはObject型の変数に代入できる。
Setステートメントで変数とオブジェクトを関連付ける。
Dim obj As Object
Set obj = Application
変数とオブジェクトの関連付けを無効にする場合は、Nothingキーワードを使用する。
Set obj = Nothing

プロパティ

プロパティとは、オブジェクトの状態や属性のことである。
参照
Dim cnt As Integer
cnt = ThisWorkbook.Worksheeets.Count

メソッド

メソッドとは、オブジェクトを操作したり、動作させるインターフェースである。

ワークブックBook2をアクティブにする。
Workbooks("Book2").Activate

例 A1:A3にHelloを記入する。
Sub SheetActivate
  Sheet3.Activate
  ActiveSheet.Range("A1:A3").Select
  Selection.Value = "Hello"
End Sub

ワークブックBook1を、保存せずに閉じる。
WorkBooks("Book1").Close False

2番目のワークシートの次に、ワークシートを1つ追加する。
Worksheets.Add After:=Worksheets(2), Count:=1


ユーザーフォームの操作


ユーザーフォームを表示する
Load UserForm1
UserForm1.Show

ユーザーフォームを閉じる
Unload UserForm1

セルの参照

1つのセルを参照するには、CellsプロパティまたはRangeプロパティを使用する。
A1セルに10を代入する。
Cells(1,1).Value = 10
Range("A1").Value = 10

セル範囲の参照
Range("A1","B2").Select

アクティブセルの参照
MsgBox ActiveCell.Value

VBAで数式を取得・設定するにはFormulaプロパティを使用する。
Cells(1,1).Formula= "=1+1"

セルの表示形式
NumberFormatプロパティを使用する。
  • 日付
ActiveCell.Value = "2010/5/5"
ActiveCell.NumberFormat = "yyyy年m月d日"
  • 通貨
ActiveCell.Value = "1000"
ActiveCell.NumberFormat = "\\#,##0"
  • 桁数指定
ActiveCell.Value = "10"
ActiveCell.NumberFormat = "0.00"

文字の色
Cells(1,1).Value = "AAAAA"
Cells(1,1).Font.Color = RGB(255,0,0)

文字の大きさ
Cells(1,1).Value = "AAAAA"
Cells(1,1).Font.Size = 8

罫線
ActiveCell.Borders.LineStyle = xlContinuous
他には、xlDash、xlDoubleなど

セルの塗りつぶし
ActiveCell.Interior.Color = RGB(200,200,200)