ExcelVBA入門
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
** Excel VBAとは [#s418c7c6]
- 概要
-- Excelを自動化するためのプログラミング言語
- 知識
-- Excel
- 用語
-- ワークブック>ワークシート>セル
- オブジェクト(ワークブック、ワークシート、セル)
-- プロパティ(属性)
-- メソッド(処理)
** Visual Basic Editorを使おう [#n4d47930]
- Visual Basic Editorを開く
-- 開発>Visual Basic
-- プロパティウィンドウ、ツールバーを表示させる
- 新規プロジェクト作成
-- 挿入>標準モジュール
** はじめてのExcel VBA [#n37101ac]
- Hello Worldを表示させる
-- 「HelloWorld」はプロシージャ名
Sub HelloWorld()
MsgBox ("hello world")
End Sub
- Editor上のみで改行する場合
MsgBox _
("hello world")
- コメントを挿入(シングルクォーテーションを使用)
'コメント
** セルに値を表示してみよう [#hfbd18b7]
Sub CellChange()
Worksheets("Sheet1").Range("A1").Value = "hello"
Range("A2").Value = "hello2" 'アクティブなシートは指定...
Cells(3, 1).Value = "hello3" '行列番号で指定
Cells(3, 1).Offset(1, 0).Value = "hello4" '相対位置を指定
End Sub
** 複数のセルに値を表示してみよう [#r9a86547]
Sub CellsChange()
Range("A1", "B3").Value = "hello" 'A1-B3まで表示
Range("A5:C7").Value = "hello2" 'A5-C7まで表示
Range("4:4").Value = "row 4" '4行目に表示
Range("C:C").Value = "Column C" 'C列目に表示
Cells.Clear '値を全てクリア
End Sub
** Withで命令をまとめてみよう [#mbc0315b]
- オブジェクトにプロパティを設定する
Sub WithTest()
Range("A1").Value = "hello"
Range("A1").Font.Bold = True '文字を太字に設定
Range("A1").Font.Size = 16 '文字サイズを16に設定
Range("A1").Interior.Color = vbRed 'セルの背景色を赤に...
End Sub
- 上記のプロシージャをWithステートメントでまとめる
Sub WithTest2()
With Range("A2")
.Value = "hello"
With .Font
.Bold = True '文字を太字に設定
.Size = 16 '文字サイズを16に設定
End With
.Interior.Color = vbRed 'セルの背景色を赤に設定
End With
End Sub
** セルの値を取得してみよう [#za308e51]
Sub GetTest()
MsgBox Range("A1").Value 'A1の値を取得し表示
MsgBox (Range("A1").Font.Size) 'A1の文字サイズの値を取...
End Sub
** メソッドを使ってみよう [#u4e31753]
Sub MethodTest()
'Range("B2").Clear
'Range("B5").Delete shift:=xlShiftUp 'B5を削除し上方向...
Worksheets.Add after:=Worksheets("Sheet2"), Count:=2 'S...
End Sub
** Excel VBAとマクロの関係 [#ed0340a3]
- VBAとマクロは表裏一体
-- VBAで記述した処理は自動的にExcelのマクロとして登録される
-- マクロの記録を実行するとExcel側で自動的にVBAのコードが...
** Integer型の変数を使ってみよう [#h4d7343d]
Sub VaiableTest()
Dim x As Integer 'Integer型の変数名xを宣言
x = 10 + 5
x = x + 1
'四則演算
'+ - / *
'商,余
'\ mod
'べき乗
'^
x = 2 ^ 3
'Range("A1").Value = x
Debug.Print x 'イミディエイトウィンドウに表示
End Sub
- イミディエイトウィンドウは値を確認したい時などデバグ時...
** 他データ型の変数を使ってみよう [#paa32f57]
Sub VariableTest()
Dim y As Double '実数
Dim s As String '文字列
Dim d As Date '日付
Dim z As Variant '宣言時は型を決定しない
Dim f As Boolean '真偽値
Dim r As Range 'Rangeオブジェクト
y = 19.5
s = "hello"
d = "2012/04/23"
f = True
Set r = Range("A1")
Debug.Print y / 3
Debug.Print s & "world"
r.Value = d + 7 'dに7日間追加
End Sub
** 配列を使ってみよう [#zcc04cc5]
- 記述法1
Sub VariableTest()
'sales_0 = 200
'sales_1 = 150
'sales_2 = 300
Dim sales(2) As Integer
sales(0) = 200
sales(1) = 150
sales(2) = 300
Debug.Print sales(1)
End Sub
- 記述法2
Sub VariableTest2()
Dim sales As Variant
sales = Array(200, 150, 300)
Debug.Print sales(2)
End Sub
** Ifで条件分岐をしてみよう [#f76db6d8]
Sub IfTest()
' = < > <= >= <> and not or
If Range("a1").Value > 80 Then
Range("a2").Value = "OK!"
ElseIf Range("a1").Value > 60 Then
Range("a2").Value = "soso..."
Else
Range("a2").Value = "NG!"
End If
End Sub
** Selectで条件分岐をしてみよう [#x194c7cf]
Sub SeletTest()
Dim signal As String
signal = Range("a1").Value
Dim result As Range
Set result = Range("a2")
Select Case signal
Case "red"
result.Value = "STOP"
Case "green"
result.Value = "GO!"
Case "yellow"
result.Value = "CAUTION!"
Case Else
result.Value = "n.a."
End Select
End Sub
** While/Forでループ処理をしてみよう [#i084b6f8]
- While文
Sub WhileTest()
'A1-A9に1-9の値を挿入
Dim i As Integer
i = 1
Do While i < 10
Cells(i, 1).Value = i
i = i + 1
Loop
End Sub
- For文
Sub ForTest()
Dim i As Integer
For i = 1 To 9
Cells(i, 1).Value = i
Next i
End Sub
- For文にてStepを利用すると間隔を空けて表示さることが可能
For i = 1 To 9 Step 2
** Eachで配列のループ処理をしてみよう [#d6b83b61]
Sub EachTest()
Dim names As Variant
names = Array("taguchi", "fkoji", "dotinstall")
For Each Name In names 'namesから1つずつ取り出してNames...
Debug.Print Name
Next Name
End Sub
** Callでプロシージャを呼びだそう [#va17a204]
Sub CallTest()
Dim names As Variant
names = Array("taguchi", "fkoji", "dotinstall")
For Each name In names
Call SayHi(name)
Next name
End Sub
- CallTetプロシージャを別プロシージャから呼び出す
Sub SayHi(ByVal name As String)
Debug.Print "hi!," & name
End Sub
- イミディエイト
hi!,taguchi
hi!,fkoji
hi!,dotinstall
** Functionプロシージャを使ってみよう [#r9955062]
- Subプロシージャ
-- 返り値を返さない
- Functionプロシージャ
-- 返り値を返す
- 呼び出し元
Sub CallTest()
Dim names As Variant
names = Array("taguchi", "fkoji", "dotinstall")
For Each name In names
Debug.Print SayHi(name)
Next name
End Sub
- 呼び出し側
Function SayHi(ByVal name As String)
SayHi = "hi!," & name
End Function
- イミディエイト
hi!,taguchi
hi!,fkoji
hi!,dotinstall
** 成績表を処理してみよう [#r57da2bb]
- 名前とスコアの一覧表をExcelに入力(A1-10,B1-10)
- 基準より低い点数をにハイライト設定しその数を集計を行う
Sub FindLowScores()
Dim i As Long 'LongはIntegerより桁数の大きい数値を扱える
Dim n As Long
i = 2
n = 0
Do While Cells(i, 1).Value <> "" '値が空ではない場合
If Cells(i, 2).Value < 60 Then
Cells(i, 2).Interior.Color = vbRed
n = n + 1
End If
i = i + 1
Loop
MsgBox (n & "件該当しました!")
End Sub
終了行:
** Excel VBAとは [#s418c7c6]
- 概要
-- Excelを自動化するためのプログラミング言語
- 知識
-- Excel
- 用語
-- ワークブック>ワークシート>セル
- オブジェクト(ワークブック、ワークシート、セル)
-- プロパティ(属性)
-- メソッド(処理)
** Visual Basic Editorを使おう [#n4d47930]
- Visual Basic Editorを開く
-- 開発>Visual Basic
-- プロパティウィンドウ、ツールバーを表示させる
- 新規プロジェクト作成
-- 挿入>標準モジュール
** はじめてのExcel VBA [#n37101ac]
- Hello Worldを表示させる
-- 「HelloWorld」はプロシージャ名
Sub HelloWorld()
MsgBox ("hello world")
End Sub
- Editor上のみで改行する場合
MsgBox _
("hello world")
- コメントを挿入(シングルクォーテーションを使用)
'コメント
** セルに値を表示してみよう [#hfbd18b7]
Sub CellChange()
Worksheets("Sheet1").Range("A1").Value = "hello"
Range("A2").Value = "hello2" 'アクティブなシートは指定...
Cells(3, 1).Value = "hello3" '行列番号で指定
Cells(3, 1).Offset(1, 0).Value = "hello4" '相対位置を指定
End Sub
** 複数のセルに値を表示してみよう [#r9a86547]
Sub CellsChange()
Range("A1", "B3").Value = "hello" 'A1-B3まで表示
Range("A5:C7").Value = "hello2" 'A5-C7まで表示
Range("4:4").Value = "row 4" '4行目に表示
Range("C:C").Value = "Column C" 'C列目に表示
Cells.Clear '値を全てクリア
End Sub
** Withで命令をまとめてみよう [#mbc0315b]
- オブジェクトにプロパティを設定する
Sub WithTest()
Range("A1").Value = "hello"
Range("A1").Font.Bold = True '文字を太字に設定
Range("A1").Font.Size = 16 '文字サイズを16に設定
Range("A1").Interior.Color = vbRed 'セルの背景色を赤に...
End Sub
- 上記のプロシージャをWithステートメントでまとめる
Sub WithTest2()
With Range("A2")
.Value = "hello"
With .Font
.Bold = True '文字を太字に設定
.Size = 16 '文字サイズを16に設定
End With
.Interior.Color = vbRed 'セルの背景色を赤に設定
End With
End Sub
** セルの値を取得してみよう [#za308e51]
Sub GetTest()
MsgBox Range("A1").Value 'A1の値を取得し表示
MsgBox (Range("A1").Font.Size) 'A1の文字サイズの値を取...
End Sub
** メソッドを使ってみよう [#u4e31753]
Sub MethodTest()
'Range("B2").Clear
'Range("B5").Delete shift:=xlShiftUp 'B5を削除し上方向...
Worksheets.Add after:=Worksheets("Sheet2"), Count:=2 'S...
End Sub
** Excel VBAとマクロの関係 [#ed0340a3]
- VBAとマクロは表裏一体
-- VBAで記述した処理は自動的にExcelのマクロとして登録される
-- マクロの記録を実行するとExcel側で自動的にVBAのコードが...
** Integer型の変数を使ってみよう [#h4d7343d]
Sub VaiableTest()
Dim x As Integer 'Integer型の変数名xを宣言
x = 10 + 5
x = x + 1
'四則演算
'+ - / *
'商,余
'\ mod
'べき乗
'^
x = 2 ^ 3
'Range("A1").Value = x
Debug.Print x 'イミディエイトウィンドウに表示
End Sub
- イミディエイトウィンドウは値を確認したい時などデバグ時...
** 他データ型の変数を使ってみよう [#paa32f57]
Sub VariableTest()
Dim y As Double '実数
Dim s As String '文字列
Dim d As Date '日付
Dim z As Variant '宣言時は型を決定しない
Dim f As Boolean '真偽値
Dim r As Range 'Rangeオブジェクト
y = 19.5
s = "hello"
d = "2012/04/23"
f = True
Set r = Range("A1")
Debug.Print y / 3
Debug.Print s & "world"
r.Value = d + 7 'dに7日間追加
End Sub
** 配列を使ってみよう [#zcc04cc5]
- 記述法1
Sub VariableTest()
'sales_0 = 200
'sales_1 = 150
'sales_2 = 300
Dim sales(2) As Integer
sales(0) = 200
sales(1) = 150
sales(2) = 300
Debug.Print sales(1)
End Sub
- 記述法2
Sub VariableTest2()
Dim sales As Variant
sales = Array(200, 150, 300)
Debug.Print sales(2)
End Sub
** Ifで条件分岐をしてみよう [#f76db6d8]
Sub IfTest()
' = < > <= >= <> and not or
If Range("a1").Value > 80 Then
Range("a2").Value = "OK!"
ElseIf Range("a1").Value > 60 Then
Range("a2").Value = "soso..."
Else
Range("a2").Value = "NG!"
End If
End Sub
** Selectで条件分岐をしてみよう [#x194c7cf]
Sub SeletTest()
Dim signal As String
signal = Range("a1").Value
Dim result As Range
Set result = Range("a2")
Select Case signal
Case "red"
result.Value = "STOP"
Case "green"
result.Value = "GO!"
Case "yellow"
result.Value = "CAUTION!"
Case Else
result.Value = "n.a."
End Select
End Sub
** While/Forでループ処理をしてみよう [#i084b6f8]
- While文
Sub WhileTest()
'A1-A9に1-9の値を挿入
Dim i As Integer
i = 1
Do While i < 10
Cells(i, 1).Value = i
i = i + 1
Loop
End Sub
- For文
Sub ForTest()
Dim i As Integer
For i = 1 To 9
Cells(i, 1).Value = i
Next i
End Sub
- For文にてStepを利用すると間隔を空けて表示さることが可能
For i = 1 To 9 Step 2
** Eachで配列のループ処理をしてみよう [#d6b83b61]
Sub EachTest()
Dim names As Variant
names = Array("taguchi", "fkoji", "dotinstall")
For Each Name In names 'namesから1つずつ取り出してNames...
Debug.Print Name
Next Name
End Sub
** Callでプロシージャを呼びだそう [#va17a204]
Sub CallTest()
Dim names As Variant
names = Array("taguchi", "fkoji", "dotinstall")
For Each name In names
Call SayHi(name)
Next name
End Sub
- CallTetプロシージャを別プロシージャから呼び出す
Sub SayHi(ByVal name As String)
Debug.Print "hi!," & name
End Sub
- イミディエイト
hi!,taguchi
hi!,fkoji
hi!,dotinstall
** Functionプロシージャを使ってみよう [#r9955062]
- Subプロシージャ
-- 返り値を返さない
- Functionプロシージャ
-- 返り値を返す
- 呼び出し元
Sub CallTest()
Dim names As Variant
names = Array("taguchi", "fkoji", "dotinstall")
For Each name In names
Debug.Print SayHi(name)
Next name
End Sub
- 呼び出し側
Function SayHi(ByVal name As String)
SayHi = "hi!," & name
End Function
- イミディエイト
hi!,taguchi
hi!,fkoji
hi!,dotinstall
** 成績表を処理してみよう [#r57da2bb]
- 名前とスコアの一覧表をExcelに入力(A1-10,B1-10)
- 基準より低い点数をにハイライト設定しその数を集計を行う
Sub FindLowScores()
Dim i As Long 'LongはIntegerより桁数の大きい数値を扱える
Dim n As Long
i = 2
n = 0
Do While Cells(i, 1).Value <> "" '値が空ではない場合
If Cells(i, 2).Value < 60 Then
Cells(i, 2).Interior.Color = vbRed
n = n + 1
End If
i = i + 1
Loop
MsgBox (n & "件該当しました!")
End Sub
ページ名: