IT講習会テキスト
Excel VBAマクロの使い方
県立長崎シーボルト大学 情報メディア学科 辺見一男
|
【マクロ記録を使う】
●Excelのセキュリティレベルを下げる
Excelのセキュリティレベルが高いとマクロが実行できません.次の手順でセキュリティレベルを下げます.
メニュー「ツール」→「セキュリティ」を選択する.
↓
セキュリティレベルを「低」に設定する.
↓
Excelを再起動する.
●マクロの記録方法
メニュー「ツール」→「マクロ」→「新しいマクロの記録」を選択する.
↓
「マクロの記録」ダイアログボックスが開くので「OK」ボタンを押す.
(練習)
セルA1に10,
セルA2に20,
セルA3に30,
セルA4に =SUM(A1:A3) と記入し,
セルA4をイタリック体にする.
●マクロ記録を終了する方法
メニュー「ツール」→「マクロ」→「記録終了」を選択する.
●実行方法(Excelで)
メニュー「ツール」→「マクロ」→「マクロ」を選択する.
↓
「マクロ」ダイアログボックスが開くので「マクロ名」を選択した後,「OK」ボタンを押す.
●実行方法(VBE:Visula Basic Editorで)
実行したいマクロ(プロシジャー)にカーソルを移動する.
↓
メニュー「実行」→「Sub/ユーザーフォームの実行」を選択する.
●マクロの編集方法
メニュー「ツール」→「マクロ」→「Visual Basic Editor」を選択する.
↓
コードウインドウにマクロが記述されているので,これを編集する.
(練習で記録されたVBAマクロ)
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2004/12/1 ユーザー名 : k
'
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "10"
Range("A2").Select
ActiveCell.FormulaR1C1 = "20"
Range("A3").Select
ActiveCell.FormulaR1C1 = "30"
Range("A4").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
Range("A4").Select
Selection.Font.Italic = True
End Sub
●マクロの記録場所
原則として標準モジュールに記録する.標準モジュールは,VBEのプロジェクトエクスプローラで「Module?」と表記されている.
●VBAマクロの基本構造
VBAマクロは Sub で始まって,End Sub で終わる.これをプロシジャーといいます.
マクロ名(プロシジャー名)はわかりやすい名前(日本語も可)を付ける.
(例)A1からA3に値を代入し,A4で合計を求めるマクロ.「値の代入と合計を求める()」がマクロ名です.
Sub 値の代入と合計を求める()
Range("A1") = 10
Range("A2") = 20
Range("A3") = 30
Range("A4") = “=SUM(A1:A3)”
End Sub
●デバッグモードの解除
マクロ実行時にエラーが発生すると,自動的にデバッグモードに入ることがあります.デバッグモードでは,エラーがあった行に黄色の帯が表示されます.この場合は,次の手順でデバッグモードを解除してください.
メニュー「実行」→「リセット」を選択する.
●コメント
コメントとは人が理解しやすくするために入れる説明のことで,プログラムの実行には影響を与えません.
シングルコーテンション(')の後がコメントとなります.
(例)「' セルA1に10を入れる」の部分がコメント
Range("A1") = 10 ' セルA1に10を入れる
●マクロの強制停止(マクロが暴走した時)
「Esc」キーを押す.
●VBE:Visual Basic Editor の開き方(閉じてしまった場合)
メニュー「ツール」→「マクロ」→「Visual Basic Editor」を選択する.
【良く使うVBAマクロ】
●セルを選択する
・セル番地で選択する Range("B1").Select
直感的でわかりやすいが,セルを変数で指定できない.
・(y,x)座標((行,列)座標)で指定する Cells(1, 2).Select
セルを変数で指定できる.
●セルに値(数値,文字,式)を入れる
基本的に,文字やExcelの関数を入れるときはダブルコーテーション(“)で文字を囲み,数値を入れるときはそのまま入れます.
・セル番地を指定して入れる Range("B1") = “10”
直感的でわかりやすいが,セルを変数で指定できない.
・(y,x)座標で指定して入れる Cells(1, 2) = 10
セルを変数で指定できる.
・セルを選択した後,そのセルに値を入れる.
Cells(1, 2).Select
ActiveCell = 10
・Excelの関数を入れる.
Range("A1") = "=SUM(A2:A4)"
<参考>
セルに値を入れる方法は多数あります.また,数値と文字の区別も厳密には行われません.
次の書き方は,いずれも「セルA1に10(数値)を入れる」という意味になります.
Range("A1") = "10"
Range("A1") = 10
Range("A1").Value = "10"
Range("A1").Value = 10
Range("A1").Formula = "10"
Range("A1").Formula = 10
Range("A1").FormulaR1C1 = "10"
Range("A1").FormulaR1C1 = 10
Cells(1, 1) = "10"
Cells(1, 1) = 10
Cells(1, 1).Value = "10"
Cells(1, 1).Value = 10
Cells(1, 1).Formula = "10"
Cells(1, 1).Formula = 10
Cells(1, 1).FormulaR1C1 = "10"
Cells(1, 1).FormulaR1C1 = 10
●セル範囲の選択
・セルA1からA3を選択する
Range("A1:A3").Select
Range(Cells(1, 1), Cells(3, 1)).Select
●セルの内容をコピー&ペーストする
・セルA1からA3の内容をB1からB3にコピーする.
Range("A1:A3").copy Range(“B1”)
●セルの内容をカット&ペーストする
・セルA1からA3の内容をB1からB3に移動する.
Range("A1:A3").Cut Range("B1")
●セルの内容を消去する
・セルA1からA3の内容を消去する.
Range("A1:A3").Clear
●シートを選択する
・シート名で選択 Sheets("Sheet1").Select
シート名で選択した場合,シート名を変えると選択できなくなる.
・シートの番号で選択 Worksheets(1).Select
左端のシートから順に1,2,3...となる.シート番号には変数が使える.
●シートを追加する
・Sheets(4)の後にシートを追加する
Sheets.Add After:=Sheets(4)
・Sheets(4)の前にシートを追加する
Sheets.Add Before:=Sheets(4)
●シートの名前を変える
・Sheets(4)の名前を「1組」に変える.
Worksheets(4).Name = "1組"
●別のシートへコピーする
・Sheets(1)のA1からA3の範囲を,Sheets(2)のA1からにコピーする.
Sheets(1).Range("A1:A3").Copy Sheets(2).Range("A1")
●シートを削除する
・Sheets(4)を削除する
Sheets(4).Delete
・警告を出さないで削除する.
Application.DisplayAlerts = False
Sheets(4).Delete
・再度,警告を出すようにするには.
Application.DisplayAlerts = True
●ファイル(Workbook)を開く
・同一フォルダ内にある「国語.xls」というファイルを開く.
Workbooks.Open CurDir() + "\" + "国語.xls"
●ファイル(Workbook)を新規に作る.
・新規に作る
Workbooks.Add
・ファイルに名前を付けたいときは,名前を付けて保存する.
「まとめ」という名前で保存する場合 ActiveWorkbook.SaveAs ("まとめ")
●ファイル(Workbook)を閉じる
・上書き保存をして閉じる
Workbooks("国語.xls").Close SaveChanges:=True
・保存せずに閉じる
Workbooks("国語.xls").Close SaveChanges:=False
●マクロ実行ボタンの登録方法(Sheet上にボタンを作ってマクロを実行できるようにする)
メニュー「表示」→「ツールバー」→「フォーム」を選択する
↓
ツールバー「フォーム」から「ボタン」を選択する
↓
シートの上にボタンを作成する(マウスの左ボタンを押しながらドラッグする)
↓
「マクロの登録」ダイアログボックスが出るので,マクロ名を選択した後「OK」ボタンを押す
●繰り返し(For文)
・セルA1からA5に,1から5の値を入れる
a = 0
For y = 1 To 5
a = a + 1
Cells(y, 1) = a
Next y
・セルA1からA5の内容を,セルB1からB5にコピーする
For y = 1 To 5
Cells(y, 1).Copy Cells(y, 2)
Next y
・セルA1からA5の内容を,セルB1からB5にコピーする
For y = 1 To 5
Range(Cells(y, 1), Cells(y, 1)).Copy Cells(y, 2)
Next y
●条件判断(if文)
・セルA1からA3の内容を,セルB1からB3に,セルA4からA5の内容を,セルC4からC5にコピーする
For y = 1 To 5
If (y <= 3) Then
Cells(y, 1).Copy Cells(y, 2)
Else
Cells(y, 1).Copy Cells(y, 3)
End If
Next y
●除算の余り(Mod)
・A列の値を,1行飛ばしで,B列とC列にコピーする
For y = 1 To 5
If ((y Mod 2) = 1) Then
Cells(y, 1).Copy Cells(y, 2)
Else
Cells(y, 1).Copy Cells(y, 3)
End If
Next y
●ファイルを開いたときにマクロを自動実行する
Auto_Open()という名前のマクロ(プロシジャー)を作る.ファイルを開いたときは,このプロシジャーが自動的に実行される
・ファイルを開いたときに,セルA1に「自動実行されました」と入れる
Sub Auto_Open()
Range("A1") = "自動実行されました"
End Sub
●Excelを起動したときに,特定のファイルを自動的に実行することもできます.次に示すフォルダにあるExcelのファイルが自動的に実行されます.
・自動実行ファイルを入れる場所
Win2000+Office2000の場合
c:\Program Files\Microsoft Office\Office\XLStart
WinXP+OfficeXPの場合
c:\Program Files\Microsoft Office\Office11\XLSTART
【練習問題】
(1)セルA1に30,セルA2に50,セルA1に90,セルA4に100,セルA5にA1からA4の合計,セルA6
にA1からA4の平均を求めるマクロを作りなさい.合計は=sum(),平均は=average()を用います.
(2)セルA1からA5までを選択するマクロを作りなさい.
(3)セルA1からA5までの内容を,B1からB5に移動するマクロを作りなさい.
(4)セルA1をB3に,セルA2をB2に,セルA3をB1にコピーするマクロを作りなさい.
(5)2枚目のシートの,セルA1からA5までを選択するマクロを作りなさい.
(6)1枚目のシートの,セルA1からA5までの内容を,2枚目のシートの,B1からB5にコピーするマクロを作りなさい.
【総合問題】
3つの成績ファイル(英語.xls,数学xls,国語xls,)から,「学籍番号101番 伊井直行
」の成績を抜き出して,1つのファイル(まとめ.xls)にまとめるマクロを作りなさい.
<参考図書>
(1)ExcelVBA完全制覇パーフェクト,田中亮著,翔泳社,3180円
(2)Excel97VBAハンドブック,相沢文雄他著,ナツメ社,2500円