Excel VBA の基本 1 VBA Visual Basic for Applications Office シリーズに搭載されているプログラミング言語 マクロを作成するために使われる 1
プログラミングとは 人間の意図した処理を行うようにコンピュータに指示を与えること セル A1 の内容をセル B1 にコピーしなさいセル A1 の背景色を赤色にしなさいあれをしなさいこれをしなさい 上から順番に実行 ひとまとまりの手続きを VBA では ( サブ ) プロシージャ と呼ぶ 2
準備 開発 タブの追加 ファイル オプション リボンの設定 からリボンメニューに 開発 タブを追加する ステータスバーに マクロの記録 を追加 ステータスバーで右クリック マクロの記録 を選択 3
マクロを記録してみる 1 マクロの記録 をクリック 2 表示されたダイアログボックスでショートカットキーにCtrl + Q を設定 OK ボタンをクリック 3 セル A1 をクリックして 123 を入力 4 セル A2 をクリックして 456 を入力 5 セル A1 をセル A3 にコピー Q 6 記録の終了 をクリック 4
マクロの中身を確認する 1 開発 タブから マクロ をクリック 2 ダイアログボックスから 先ほど記録したマクロを選び 編集 をクリック 5
マクロ編集画面 (VBE:Visual Basic Editor) http://kabu-macro.com/vba_kiso/module-procedure.html より 6
簡単に読み解いてみる ( 操作手順によって作られるコードが違う場合も ) Sub Macro1() ' ' Macro1 Macro ' Range("A1").Select ActiveCell.FormulaR1C1 = "123" Range("A2").Select ActiveCell.FormulaR1C1 = "456" Range("A1").Select Selection.Copy Range("A3").Select ActiveSheet.Paste End Sub Sub から End Sub までが ひとつのプロシージャ ( まとまった手続き ) Macro1 はその手続きにつけられた名前 コーテーション記号 は ここからコメント ( 実行しない ) の意味 7
オブジェクトとプロパティとメソッド オブジェクト : 物体 対象 モノ VBA では 操作の対象となるセルなどを指す プロパティ : 特性 属性 性質 財産 資産 VBA では オブジェクトの値や色などを指す メソッド : 方法 方式 VBA では オブジェクトに対する操作を指す 8
VBA でよく使われるオブジェクト オブジェクト名 指し表すもの Range( A1 ) A1 セル ( セル番地による指定 ) Cells(1,1) A1 セル ( セルの場所による指定 ) ActiveCell Worksheet( Sheet1 ) Activesheet Selection ChartObjects 現在選択されているセル Sheet1 ワークシート現在選択されているワークシート現在選択中のセル範囲グラフ 9
セルのプロパティの例 プロパティ名 指し表すもの Value 値 ( セルの中身 ) Font フォントこれら自身もプロパティを持つ Font.Color Interior 背景 Font.Size Interior.Color など Borders 罫線 Formula 数式 ( 絶対参照の数式 ) FormulaR1C1 数式 ( 相対参照の数式 ) マクロの記録で作成した場合に使われる Value と大体同じものという認識で OK R は Row( 行 ) C は Column( 列 ) 10
セルのメソッドの例 オブジェクト名 指し表すもの Copy Cut Paste ClearContents Select コピーカットペースト削除範囲選択をする メソッドには 引数 ( ひきすう : パラメータ ) を必要とするものもある 結果として情報 ( 戻り値 ) が得られるものもある 11
マクロの読み解き方 1 メソッドを実行する オブジェクト. 実行したいメソッド Range( A1 ).Select セル A1 を選択せよ ピリオド Selection.Copy 現在選択されている範囲のデータを クリップボードにコピーせよ ActiveSheet.Paste クリップボードのデータを 現在選択中のワークシート ( カーソル位置 ) に貼り付けせよ 12
マクロの読み解き方 2 プロパティの値を設定 ( 代入 ) する オブジェクト. プロパティ = 値 ピリオド イコール ( 等しい ではなく 代入の意味 ) ActiveCell.FormulaR1C1 = "123 現在選択されているセルの値を 123 に設定せよ 13
同じ手順を行う手続きを簡単に書き直してみる Sub Macro1() Range("A1").Value = "123" Range("A2").Value = "456" Range("A3").Value = Range("A1").Value End Sub 入力はすべて半角文字で行う 1 つ入力した後はコピペすると楽 14
編集中にエラーが表示されたら 文法が間違っている場合などにエラーが表示される この例は = の右側には値が必要 という意味 OK をクリックし 赤字の行を修正する 15
実行中にエラーが表示されたら オブジェクトやプロパティで存在しないものを書いた場合 (= 名前を間違えた場合 ) などにエラーが表示される この場合は Value のスペルミス 終了 をクリックしてミスを探して修正する 16
VBA 関数メッセージボックスを表示してみる Sub Macro1() Range("A1").Value = "123" Range("A2").Value = "456" Range("A3").Value = Range("A3").Value MsgBox(" 終了 ") End Sub プログラム部分を全角で入力しないように注意 VBA 関数については次週 17
( マクロではできなくて )VBA でできること 条件分岐 : ある条件に応じた処理を行う もし ~ ならば これを実行する 反復処理 : 同じような処理を繰り返して実行する ( 次週 ) 18
条件に応じた処理の例 もし チェックに 1 が入力されて いたら 対応する B 列のセルの値を 対応する C 列のセルに転記する 19
条件分岐の書き方 1 If 条件式 Then 処理 もしくは If 条件式 Then ( 複数の ) 処理 End If 条件式が成立したときにのみ処理を実行する 処理は複数行書くこともできる 20
条件式の書き方 A と B が等しい A = B この場合のイコールは 等しい の意味 A と B の数値を比較して Aの方がBより大きい Aの方がBより小さい AがB 以上 AがB 以下 A>B A<B A>=B A<=B 21
新しいプロシージャの作成 Macro1 の End Sub の下に追加する Sub Test() If Range("A2").Value = 1 Then Range("C2").Value= Range("B2").Value End If End Sub もしセル A2 の値が 1 ならば セル C2 の値をセル B2 の値として設定 ( 代入 ) する Then と次の行を繋げて 1 行で書く場合 End If は書かなくてよい 22
マクロとして登録する 1 開発 タブから マクロ をクリック (Test を選択して 実行 クリックでも実行できる ) 2 Test を選択して オプション をクリック 3 ショートカットキーとして Ctrl + W を登録 ( 登録を解除するまでこのファイルでは Excel 本来のショートカットは使えなくなるので注意 ) W マクロに割り当てられるショートカットキーについて ~ エクセル編 ~ http://dz11.hatenadiary.jp/entry/2017/11/17/153214 23
Test の実行 A2 に何も入力しなければ何も起きない A2 に 1 を入力していれば C2 に小林が入力される 24
同じ処理を A3 から A6 にも行うには If Range("A2").Value = 1 Then Range("C2").Value= Range("B2 ).Value If Range("A3").Value = 1 Then Range("C3").Value= Range("B3 ).Value If Range("A4").Value = 1 Then Range("C4").Value= Range("B4 ).Value If Range("A5").Value = 1 Then Range("C5").Value= Range("B5 ).Value If Range("A6").Value = 1 Then Range("C6").Value= Range("B6 ).Value 変数と反復処理を活用することで スマートに ( より汎用的に ) 書くことができる 25
変数とは プログラミングにおいての変数とは プログラムのソースコードにおいて 扱われるデータを一定期間記憶し必要なときに利用できるようにするために データに固有の名前を与えたもの 値を入れる箱のようなもの 12 A = 12 A セルの値とセル番地 ( セルの名前 ) の関係 26
変数を体験してみる 1 Sub Test() A=10 Range( A1 ).Value = A A=A+10 Range( A2 ).Value = A End Sub A=A+10 は A に 10 を足したもの を A に代入せよという意味 A に 10 を足せ 27
変数を体験してみる 2 Sub Test() ABC = はじめに MsgBox(ABC) ABC = 次に MsgBox(ABC) End Sub 28