仕事でExcel VBAを活用して効率化をしたいと考えて、資格取得を目指しました。
活用した書籍やサイトなどを紹介していきます。
【参考にした書籍】
オデッセイコミュニケーションズ VBAエキスパート公式テキスト VBAベーシック
https://aoten.jp/store/detail.html?c1=%E8%B3%87%E6%A0%BC%E5%AF%BE%E7%AD%96%E6%95%99%E6%9D%90&c2=VBA%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88&no=a2800i_v190530
動画
【たった1動画】ExcelVBAマクロ初心者入門講座!エクセルVBAマクロとは?から分かる
https://www.youtube.com/watch?v=v3ritv9QMYc
無料でVBAベーシックの範囲を一通り学べます。
【問題集】
https://vba-workbook.com/
Webでできるものがあるので、それを繰り返しやりました。
すべて選択肢ではなく、記述する問題もあるので、実際にコードを書きながら学習する方がよいと思います。
【VBAベーシックで学ぶ項目】
1-1 マクロとはVBAとは
1-2 Visual Basic Editorの使い方
1-3 ブックとマクロの関係
1-4 重要なセキュリティ
2-1 マクロ記録をやってみよう
2-2 個人用マクロブックと記録の活用方法
3-1 モジュールとは
3-2 プロシージャとは
3-3 コメントとは
4-1 オブジェクト式
4-2 ステートメント
4-3 関数
4-4 演算子
5-1 変数とは
5-2 変数の名前と宣言
5-3 変数の適用範囲
5-4 定数とは
6-1 セル及びセル範囲の指定
6-2 セルの値と表示形式
6-3 Offset/Resizeプロパティ
6-4 その他重要メソッドやプロパティ
7-1 For 〜Nextステートメント
7-2 Ifステートメント
7-3 Withステートメント
8-1 日付時刻操の関数
8-2 文字列操作の関数
8-3 数値操作の関数
8-4 ダイアログボックス表示の関数
8-5 その他の関数
9-1 ブックの保存
9-2 ブックを開く閉じる
9-3 複数ブックの操作
9-4 シートの挿入削除
9-5 シートのコピー移動
9-6 その他のシート移動
10-1 Visual Basic Editorから実行
10-2 Excelから実行する
10-3 クイックアクセスツールバーから実行する
10-3 ボタンや図形から実行する
1-1 マクロとはVBAとは
マクロとはExcelの機能の一つで記述された命令に基づいて、Excelで実行させる指示書です。
ファイル形式は.xlsmで保存されます。
VBA(Visual Basic for Applications)とはマクロを動作させる為のプログラミング言語です。
1-2 Visual Basic Editorの使い方
VBE(Visual Basic Editor)はプロジェクトエクスプローラ・プロパティウインドウ・コードウインドウで構成されます。Alt+F11で起動できます。
VBAはコードウインドウに記述してきます。
1-3 ブックとマクロの関係
ブックには入力したデータやグラフに加えて、作成したマクロが保存されます。
マクロが含まれているファイルは.xlsmで保存されます。
1-4 重要なセキュリティ
セキュリティレベルの設定方法は以下の通りです。
ファイル>その他>オプション>トラストセンター>トラストセンターの設定>マクロの設定>「警告してVBAマクロを無効にする」にチェックを入れます。
2-1 マクロ記録をやってみよう
ユーザーがExcelでおこなった作業をVBEのコードに記述してくれる機能のことです。
2-2 個人用マクロブックと記録の活用方法
別のブックで作成しておいたマクロを利用したい時に便利なブックのことです。
※教本に記載がありますが、同じマクロの記述を使うということがあまりない為、利用頻度は低いと思われます。
3-1 モジュールとは
ブック内に保存されるマクロの用紙のようなものです。
モジュールの種類
モジュールは4種類あります。
・標準モジュール
・フォームモジュール
・ブックモジュール・シートモジュール
・クラスモジュール
3-2 プロシージャとは
マクロの最小実行単位でモジュールに記述します。
・Subプロシージャ:値を返すことができないプロシージャ
・Functionプロシージャ:値を返すことができるプロシージャ
・Propertyプロシージャ:クラスモジュールで使うプロシージャ
3-3 コメントとは
マクロに関することの注釈や覚書にしておきたいことに使用するものです。
「'」シングルクオーテーションを先頭に付けると文字色が変わり、コードと認識されない記述ができます。
4-1 オブジェクト式
Excelを操作する時の書き方です。単語と単語をピリオドで繋ぎます。
対象.様子=値で表します。
対象.命令 オプション:値
4-2 ステートメント
条件分岐や繰り返しなどマクロの動きを制御したり、変数宣言したりするものです。
オブジェクトに対して、様子や状態を調べるのではなく、マクロ全体の中で何かしらの動きをするものです。
・Subステートメント:プロシージャの始まりを示す。
・Dimステートメント:変数宣言に使う。
・Ifステートメント:条件分岐に使う。
・For~Nextステートメント:繰り返し処理に使う。
4-3 関数
定められた計算をしてその値を返すものです。
4-4 演算子
・+:2つの数値の和を求める。
・-:2つの数値の差を求める。
・/:2つの数値の商を求める。(小数点を含む)
・¥:2つの数値の商を求める。(整数のみ)
・*:2つの積を求める。
・^:べき乗を求める。
・Mod:余りを求める。
・=:左辺と右辺が等しい時にTrueを返す。
・<:右辺より左辺が大きい時にTrueを返す。
・<=:右辺が左辺以上の時にTrueを返す。
・>:左辺が右辺より大きい時にTrueを返す。
・>=:左辺が右辺以上の時にTrueを返す。
・<>:左辺と右辺が等しくない時にTrueを返す。
・Is:左辺のオブジェクトと右辺のオブジェクトを比較する。
・Like:パターンマッチングを使った文字列の比較をする。
・&:左辺と右辺の文字列を結合する。(推奨)
・+:左辺と右辺の文字列を結合する。
コレクションとは同じオブジェクトの集合体です。
5-1 変数とは
変数とは数値や文字列などのデータをマクロの中で一時的に記憶し、別のところで使用する仕組みのことです。
変数の型
・ブール型(Boolean):TrueまたはFalse▲
・バイト型(Byte):0~255までの整数
・整数型(Integer):-32,768~32,767の範囲の整数●
・長整数型(Long):-2,147,483,648~2,147,483,647の整数●
・通貨型(Currency):-922,337,203,685,477,5808~922,337,203,685,477,5807の固定小数点数
・単精度浮動小数点型(Single):負の値:約-3.4×10(38乗)~-4.0×10(-45乗),正の値:約4.9×10(-45乗)~1.8×10(38乗)
・倍精度浮動小数点型(Double):負の値:約-1.8×10(308乗)~-4.0×10(-324乗),正の値:約4.9×10(-324乗)~1.8×10(308乗)
・日付型(Date):日付(西暦100年1月1日~西暦9999年12月31日),時刻(0:00:00~23:59:59)●
・文字列(String):任意の長さの文字列●
・オブジェクト型(Object):オブジェクト
・バリアント型(Variant):全てのデータ●
5-2 変数の名前と宣言
変数の宣言とは「こういう変数を使用します」という宣言をすることです。
例) Dim I as Long
変数で使用できるもの
文字(英数字,ひらがな,カタカナ,), _(アンダースコア)
スペースやほかの記号は使用できません。
先頭の文字は英字,漢字,ひらがな,カタカナのいずれかになります。
変数名の長さは半角255字以内
同一適用範囲内で同じ変数名は使用できません。
変数の名前には意味のある文字列を使用する。
5-3 変数の適用範囲
宣言をしないとコードの内容が間違えていてもエラーにならず、正常終了してしまってミスに気づけないことがあります。
※宣言を強制することができます。
VBEのツール>オプション>変数の宣言を強制するにチェックを入れます。
・i(Iteration):繰り返し処理
・j(-):繰り返し処理
・cnt(ct)(Count,Counter):何かを数える時
・buf(Buffer):中間処理で一時的に格納する時
・temp(Temporary):一時的に使用する変数
・f(Flag):オン/オフの状態を判断する時
・rc(re)(Retuen Code):関数などの戻り値を格納する変数
・n(num)(Number):一時的に扱う数値
・s(str)(String):一時的に扱う文字列
5-4 定数とは
定数とは変わることのない数値や文字列を入れる時、入れる箱(袋)のことです。
定数は以下のように記述します。
Const LIMIT As LOng=100
6-1 セル及びセル範囲の指定
セルを表す時、2種類の方法があります。
1.Range("A1")
2.Cells(1.1) (行.列)
Rangeは範囲を表す時、Cellsは個別のセルを表す時に使用されますが、どちらも同じように使用できます。
Range("A1")→セルA1
Range("A1:C3")→セルA1~C3
Range("A1,B3")→セルA1とB3
Cells(3,2)→セルB3
Cells(2,4)→セルD2
Cells(3,"B")→セルB3
Cells(2,"D")→セルD2
セルを表してどのように使用するのか?
オブジェクト式の記述方法を使用します。
・対象.様子=値
・対象.命令 オプショ=値
Range(""A1).Value=100
Cells(1,1).Value=100
6-2 セルの値と表示形式
Value,Text,Formulaの違いについて
Range(""A1).Value=1000→セルの中に入っている値を取得します。1000
Range(""A1).Text=1000→セルに入っている値を書式を含めて取得します。1,000
Range(""A1).Formula=1000→sるに入力されている計算式を取得します。=SUM(A1:A3)
6-3 Offset/Resizeプロパティ
Offsetプロパティ
基準となるセルからみて、相対的に指定した位置のセルを表す。(基準となるセルは範囲に含みません。)
Range("B2").Offset(2,1)=100←(C4)を指す。
Resizeプロパティ
セル範囲の大きさを変更した範囲を表す。(基準となるセルを含む。)
Range("B3").Resize(4,3)=100
6-4 その他重要メソッドやプロパティ
Endプロパティ
セルに値が代入されている時、Ctrl+矢印キーで値が入力されているセルにアクティブが移動する。
指定できる定数
・上(xlUp)
・下(XlDown)
・左(xlToLeft)
・右(xlToRight)
CurrentRegionプロパティ
セルを含むひとかたまりのセルの範囲を表す。
ActiveCellプロパティ
現在のアクティブセルを表す。
Selectionプロパティ
選択されているセルを表す。
Activateメソッド
指定したセルにアクティブセルyを移動する。
Selectメソッド
指定したセルに移動する。
Copyメソッド
セルをコピーする命令
ClearContentsメソッド
セルに入力されている値や数式をクリアする。
Deleteメソッド
指定したセルを削除する。
ステートメント
7-1 For 〜Nextステートメント
For 〜Nextステートメントは回数による繰り返しの命令です。
For 変数名 = 初期値 To 終了値
処理
Next 変数名
7-2 Ifステートメント
Ifステートメントは条件に応じて処理を変える条件分岐の命令です。
・If 条件 Then 処理
・If 条件 Then
処理
End If
・If 条件 Then
処理1
Else 処理2
End If
7-3 Withステートメント
WithステートメントはVBAのまとめをするステートメントです。
With~End With
例)
山田さんは男性です。
山田さんは横浜出身です。
山田さんの身長は175cmあります。
↓
山田さんは男性で横浜出身、身長は175cmあります。
8-1 日付時刻操の関数
Now関数:現在の日時を返す。
Year関数:引数に指定した年数を返す。
Month関数:引数に指定した月を返す。
Day関数:引数に指定した日を返す。
Hour関数:引数に指定した時間を返す。
Minute関数:引数に指定した分を返す。
Second関数:引数に指定した秒を返す。
DAteSerial関数:年月日3つの数字から、日付データを表す。
8-2 文字列操作の関数
Len関数:引数に指定した文字列の長さを返します。●
Len(文字列)
Left関数:引数に指定した文字列の左端から指定した文字数分の文字列を返します。
Left(文字列,文字数)
Right関数:引数に指定した文字列の右端から指定した文字数分の文字列を返します。
Right(文字列,文字数)
Mid関数:mid(文字列,開始位置,文字数)
LCase関数:引数に指定したアルファベットを小文字にします。
LCase(文字列)
UCase関数:引数に指定したアルファベットを大文字にします。
UCase(文字列)
LTrim関数:引数に指定した文字列の左端にあるスペースを取り除きます。
Ltrim(文字列)
Rtrim関数:引数に指定した文字列の右端にあるスペースを取り除きます。
RTrim(文字列)
Trim関数:指定した文字列の両端にあるスペースを取り除きます。
Trim(文字列)
Replace関数:引数に指定した文字列の中で、引数「検索文字列」で指定した文字列を置換文字列に置き換えます。●
Replace(文字列,検索文字列,置換文字列)
InStr関数:引数に指定した文字列の中で、引数「検索文字列」が存在する位置を数値で返します。●
InStr(文字列,検索文字列)
StrConv関数:引数で指定した文字列の文字種に変換します。●
StrConv(文字列,文字種)
文字種で指定できる関数
・vbUppserCase:文字列を大文字に変換する。
・vbLowerCase:文字列を小文字に変換する。
・vbproperCase:各文字列の各単語の先頭を大文字に変換する。
・vbWide:各文字列内の半角文字を全角文字に変換する。
・vbNarrow:各文字列内の全角文字を半角文字に変換する。
・vbKatakana:文字列内のひらがなをカタカナにする。
・vbHiragana:文字列内のカタカナをひらがなに変換する。
・vbUnicode:文字列をUniCodeに変換する。
・vbFromUnicode:文字列をシステム規定のコードページに変換する。
Format関数:引数に指定した数値や日付などを引数「書式」を適用した結果を返します。
Format(元の値,書式)
・#:1桁の数値を表す。
・0:1桁の数値を表す。存在しない桁は0で埋められる。
・,:桁区切り記号を表す。
・yy:西暦の下二桁を表す。
・yyyy:4桁の西暦を表す。
・m:月の数値を表す。
・mm:月の数値を表す。1桁の場合は0がつく。
・d:日の数値を表す。
・dd:日の数値を表す。1桁の場合は0がつく。
・aaa:日本語の曜日の先頭1文字を表す。
・aaaa:日本語の曜日を3文字で表す。
・ddd:英語の曜日の先頭3文字を表す。
・dddd:英語の曜日を表す。
・ww:その日が1年のうちで何週目に当たるかを表す数値を表す。
・y:その日が1年のうちで何日目に当たるかを数値で返す。
・oooo:月の名前を日本語で表す。
・q:1年のうちで何番目の四半期に当たるかを表す数値を表す。
・g:年号を示すアルファベットを表す。
・gg:年号の先頭1文字を表す。
・ggg:年号を表す。
・e:和暦年を表す。
・ee:和暦年を表す。1桁の場合は0が付く。
・h:時の数値を表す。
・hh:時の数値を表す。1桁の場合は0が付く。
・m:分の数値を表す。
・mm:分の数値を表す。1桁の場合は0が付く。
・s:秒の数値を表す。
・ss:秒の数値を表す。1桁の場合は0が付く。
8-3 数値操作の関数
・Int関数:数値の小数点部を切り捨てて整数部を返します。
int(数値)
・Round関数:数値の小数点部を四捨五入した結果を返します。
Round(数値,桁位置)
・Abs関数:数値の絶対値を返します。
Abs(数値)
8-4 ダイアログボックス表示の関数
・ISnumeric関数(値):引数に指定した値が数値だった時にTrueを返し、数値ではなかった時にFalseを返します。
ISnumeric(値)
・IsDate関数(値):引数に指定した値が日付だった時にTrueではなかった時にFalseを返します。
IsDate関数(値)
8-5 その他の関数
文字列の入出力に関する関数
・MsgBox関数:引数に指定した文字列を画面に表示します。ユーザーが操作できるボタンやアイコンを指摘でき、ユーザーがどのボタンをクリックしたかを返します。
MsgBox(文字列,ボタンとアイコン,タイトル)
ボタンに関する定数
・vbOKOnly:OKボタンのみを表示する。
・vbOKCancel:OKボタンとキャンセルボタンを表示する。
・vbAbortRetryIgnore:中止,再試行及び無視の3つのボタンを表示する。
・vbYesNoCancel:はい,いいえ及びキャンセルの3つのボタンを表示する。
・vbYesNo:はいボタンといいえボタンを表示する。
・vbRetryCancel:再試行ボタンとキャンセルボタンを表示する。
・vbDefaultButton1:第1ボタンを標準ボタンにする。
・vbDefaultButton2:第2ボタンを標準ボタンにする。
・vbDefaultButton3:第3ボタンを標準ボタンにする。
アイコンに関する定数
・vbCritical:警告メッセージアイコンを表示する。
・vbQuestion:問い合わせメッセージアイコンを表示する。
・vbExclamation:注意メッセージアイコンを表示する。
・vbInformation:情報メッセージアイコンを表示する。
戻り値に関する定数
・vbOK:OKボタンがクリックされた。
・vbCancel:キャンセルボタンがクリックされた。
・vbAbort:中止ボタンがクリックされた。
・vbRetry:再試行ボタンがクリックされた。
・vbIgnore:無視ボタンがクリックされた。
・vbYes:はいボタンがクリックされた。
・vbNo:いいえボタンがクリックされた。
メッセージボックスの中で改行する場合、vbCrLfを指定します。
MsgBox "東京都" & vbCrlf "千代田区"
Input関数
ユーザーが文字列を入力できるダイアログボックスを表示し、ユーザーが入力した文字を返します。
InputBox(メッセージ, タイトル, 最初に表示する文字列)
9-1 ブックの保存
ブックはWorkbookオブジェクトで表されます。
Workbooks("book1.xlsx")
Workbooks(1)
Workbooks("Book1")
ブックの保存にはSaveメソッドを実行します。
Sub Macro1 ()
ActiveWorkbook.save
End Sub
※アクティブワークブックが、まだ一度も保存されたことがない場合は自動的に「名前を付けて保存」ダイアログボックスが表示されます。
ブックに名前を付けて保存するには、Save Asメソッドを実行します。
Sub Macro1()
Workbooks.add
ActiveWorkbook.SaveAs File:="C:¥C:Data¥Sample.xlsx"
ブックのデータに何らかの編集がおこなわれ、その編集内容が保存されているかどうかを調べるにはWorkbookオブジェクトのSavedプロパティを使います。
Savedプロパティは編集内容が保存されている時はTrueを返し、まだ保存していない時はFalseを返します。
Sub Macro1()
ActiveWorkbook.Save 'アクティブブックを上書き保存します。
MsgBox ActiveWorkbook.Saved 'True
Range("A1")=100 'アクティブセルに数値を代入します。
MSgBox ActiveWorkbook.Saved 'False
9-2 ブックを開く閉じる
ブックを閉じるにはCloseメソッドを実行します。
Sub Macro1()
Activebook.Close
End Sub
閉じるブックに対しておこなった編集がまだ保存されていない時、Closeメソッドを実行する時、確認メッセージが表示されます。
変更を保存したい時
変更を保存して閉じる場合、Closeメソッドを実行する前にそのブックを上書き保存します。
Sub Nacro1()
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
またはCloseメソッドの引数を指定することも可能です。Closeには引数Save Changesがあり、この引数にTrueを指定すると、自動的に変更を上書きしてからブックを閉じます。
Sub Macro1()
ActiveWorkbook.Close SaveChanges:=True '保存したくない時はFalseを指定
End Sub
9-3 複数ブックの操作
9-4 シートの挿入削除
シートを操作する時はSheetsという単語を使います。
Sheets("Sheet1")
Sheets(1)
ワークシートを指定する時は
WorkSheets("Sheet1")
Sheets("Sheets1")
という2つの書き方があります。
Excelシートは4種類あります。(ワークシート,グラフ,Excel4.0マクロ,MS Excel5.0ダイアログ)
アクティブシート
アクティブシートを表す時にはActiveSheetと記述します。
アクティブセルを表す場合、ActiveCellを使用します。
Sub Macro1()
MsgBox ActiveSheet.Name
End Sub
シートを開く
シートを開く(アクティブシートを切り替える)時にはSelectメソッドまたはActiveメソッドを使います。
Sheets("Sheets1").Select シートを選択する。
Sheets("Sheets1").Active シートを「アクティブシートにする」
9-5 シートのコピー移動
シートをコピーする時、Copyメソッドを実行します。
引数はAfterとBeforeがあります。
コピー元のシート.Copy After, Before
9-6 その他のシート移動
シートを移動する時、Moveメソッドを実行します。
引数はAfterとBeforeがあります。
移動元のシート.Move After, Before
シートを挿入する
ブック内に新しいシートを挿入する場合、SHeetsコレクションに対してAddメソッドを実行します。
Sheets Add(Before,After,Count,Type)
シートを削除する
シートを削除する場合、Deleteメソッドを使います。
Sub Macro1()
Sheefs("Sheets1").Delete
End Sub
確認メッセージを表示する/非表示にする
確認メッセージの表示や非表示にはDisplayAlertsプロパティを使用します。
引数にはTrueとFalseを使用します。
シートを表示する/非表示にする
シートの表示や非表示にはVisibleプロパティを使用します。
引数にはTrueとFalseを使用します。
10-1 Visual Basic Editorから実行
ツールバーのSub/ユーザーフォームの実行ボタンをクリックする。
メニューの実行-Sub/ユーああーフォームの実行をクリックする。
F5キーを押す。
10-2 Excelから実行する
Excelシート画面からマクロを実行する場合、Alt+F8キーを押します。
表示タブ>マクロボタン
10-3 クイックアクセスツールバーから実行する
クイックアクセスツールバー(QAT)から実行する。
10-3 ボタンや図形から実行する
開発タブの挿入ボタンをクリックします。
フォームコントロールのボタンをクリックします。
ポインターが十字に変わったら、ワークシートにボタンを配置します。
マクロの登録ダイアログボックスが表示されたら、ボタンに登録したいマクロを選択してOKボタンをクリックします。
試験の範囲はここまでとなります。
VBAは変更される点はなく、一度覚えればそのままずっと使用できます。
これらを使用して、業務の効率化に活かしてもらえればと思います。