初心者がまなぶexcel vba
TRANSCRIPT
初心者がまなぶExcel VBA安藤良人
凹レンズーまとまりのないブログー管理人
本プレゼンテーション
•専門的なVBA講座「ではない」
• VBAを自己学習している私
•頭を整理する過程をスライドにして公開する
• いろいろ教えてください m(_ _ )m
VBAとは
• Visual Basic for Applications(ビジュアルベーシック・フォー・アプリケーションズ)
• Microsoft Officeシリーズに搭載されているプログラミング言語
• Visual Basic for Applications – Wikipedia
マクロとは
• Macro: 「大きい」「巨大な」を意味する英語
• コンピュータ関係では、アプリケーションソフトウェアなどの操作などといった、プログラミング言語と比較して粒度が大きい操作をまとめて自動化したりする機能を指して良く使われる
• マクロ (コンピュータ用語) – Wikipedia
プロシージャ
• VBAの命令文のかたまり
•種類は右の3つ
プロシージャ
Sub プロシージャ
Function プロシージャ
Property プロシージャ
Subプロシージャ
• Sub: Subroutine の略 •書式
Sub プロシージャ名()
処理の内容
End Sub
オブジェクト
• Object:対象
• オブジェクトは階層構造になっている
•親オブジェクト(=コンテナ)を省略可/不可のケースに分かれる
オブジェクト
セル
ワークシート
グラフ
オートシェイプなど
プロパティ
• Property: 属性
•取得 or 設定
プロパティ
値
文字色
フォント
セル幅 など
メソッド
• Method (方法)
• オブジェクトの動作
•引数(ひきすう):メソッドを実行する際の条件の指定
•戻り値:
•書式メソッド名 引数名:=設定値
メソッド
コピー
貼りつけ
削除
etc
Withステートメント
•同じオブジェクトに対して複数の処理を行なうコードの中で、そのオブジェクト名を記述する箇所を1つにまとめることができる
• With オブジェクト名.プロパティ名.メソッド名など
End With
• コードの見やすさを飛躍的に向上させる
演算子
•演算するための仕組み
• 5つ
•演算:
演算子
代入演算子
算術演算子
文字連結演算子
比較演算子
論理演算子
条件分岐
•条件に応じて実行する処理を変える仕組み
• If ステートメントの書式If 条件式 Then
処理End If
• Select Caseステートメント書式Select Case判断条件の対象
Case条件1処理1…
• End Select
条件分岐
Ifステートメント
Select Caseステートメント
IFステートメントとSelect Caseステートメントの使い分け• Ifステートメントを用いた方が良いケース
•判断条件の対象が複数に及ぶ場合
• Select Caseステートメントを用いた方がよいケース
•判断条件の対象が1つの場合
• とびとびの値や範囲を条件に指定したい場合
変数
•変数は好きな名前を付けられる
• いくつかの制限
• オブジェクト、プロパティ、メソッド、ステートメント、キーワードと同じ名前は付けられない
•数字、記号が先頭、ピリオドを含むものは不可
• 1つのプロシージャ内で同じ名前の変数は使えない
変数の宣言
• Dim 変数名
•標準モジュールの先頭に、Option Explicit⇒ 宣言なしに変数を使えなくする
• Dim変数名1 As データ型1,変数2 As データ型2
• ミスの生じにくい、より安全なプログラムにする
変数
プロシージャ―レベル変数
モジュールレベル変数
変数の型と取り得る値
名称 データ型 取り得る値
プール型 Boolean True または False
バイト型 Byte 0 ~ 255の整数
整数型 Integer -32,768から32,767の整数
長整数型 Long -2,147,483,648から2,147,483,647の整数
単精度浮動小数点数型
Single 負の値:-3.402823E38から-1.401298E-45
正の値:1.401298E-45から3.402823E38
倍精度浮動小数点数型
Double 負の値:-1.79769313486231E308から-4.94065645841247E-324
正の値:4.94065645841247E-324から1.79769313486232E308
文字列型 String 文字列
日付型 Date 西暦100年1月1日から西暦9999年12月31日 (日付と時刻)
オブジェクト型 Object オブジェクト参照するデータ型
バリアント型 Variant あらゆる種類の値
For…Nextステートメント
•処理したい回数があらかじめわかっている際に便利なループ
• For 変数名 = 初期値 to 最終値処理
Next変数名
•変数は「カウンタ変数」と呼ばれる
•ループが回る回数は「最終値-初期値+1」
ループのコードを書く時の注意
• いきなりループを用いると混乱
• まず単一行を対象にした機能を作って正しく動作するかを確かめる
• その後ループ化する
定数
• ある決められた値を持つ文字列
• Const定数名 As データ型 = 値
•定数を使うメリット
•数値を直接入力した場合と比べ変更がしやすい
•意図が異なる同じ数字を間違えてしまうトラブルを減らす
•数値はなるべく整数化しておくと、後々楽になる
VBA関数
• ワークシート関数とは異なる
• VBA関数名(引数)
代表的なVBA関数
カテゴリ 関数例 機能
文字列操作 Len 文字列の文字数を返す
Ucase アルファベットの小文字を大文字に変換する
日付け/時刻操作 Date 現在の日付を返す
Time 現在の時刻を返す
数値/配列操作 Rnd 0~1のランダムな値を返す
Int 数値の整数部分を返す
その他 MsgBox メッセージボックスに文字列を表示
InmutBox 文字列を入力するダイアログボックスを表示し、入力された値を返す
コレクション
•同じ種類の複数のオブジェクトをまとめて扱う仕組み
•書式: コレクション名(数値または名前)
• ワークシートをワークシート群の末尾にコピーする
• Worksheets(“hoge”).Copy After:=Worksheets(Worksheets.Count)
•個人的に質問票で使いたい
初心者がプログラミングを行う時の手順
• STEP1
•単一の範囲でシンプルな形で機能を作って動作を確認する
• STEP2
• コードや機能の追加・変更と動作確認をくり返す。
•条件分岐やループ
• STEP3
•作成したコードを整理・改良し、見やすく分かりやすく、かつ使用の追加・変更に対応しやすいコードにする
•定数化、コメントの整理
コメント
• ステートメントとは無関係なコード内の文字列
• プロシージャの動作には一切影響を及ぼさない
•書く内容:どのような機能のプロシージャなのか、どのような条件分岐を行っているか、用途、補足情報
• コード変更の場合、元コードをコピペして、コメント化(コメントブロック)して、残しておく
• コメントをコードと同じ行に記述するか、前の行に記述するかは、コードやコメントの長さを考慮しつつ見やすい方法を選ぶ
• コードを変更する際にはコメントも更新する
•最悪の事態はコメントとコードが一致しないこと
エラー
• コンパイルエラーcompile errorソースコードをコンパイラが機械語コードに変換する際に生じるエラー
ステップ実行で原因のコードを突き止める
• マクロ内をクリック⇒ F8⇒さらにF8を押す⇒ 1行ずつ実行
• エラーを突き止めるだけでなくコピペしたコードがどんな意味なのかを調べることにも役立つ