非表示にできる< 目次 >
学習パート
本記事のパートでは『Chapter 3 -基本/応用』を説明します。
これまでの学習パート
本学習パートまでに以下のパートを完了させましょう。
Chapter 3 -変数
変数とは
変数が"箱"の意味
オブジェクトって何?
変数(保存BOX)の型(かた)が変わる理由
最初に覚えておく変数の種類は4つ
たったこれだけで 十分です。
変数の種類一覧
型の名称 | 型の指定文字 | 入れることができるデータ範囲 |
バリアント型 | Variant | すべてのデータ(型指定を省略するとこの型が自動で指定される) |
文字列型 | String | 任意の長さの文字列 |
長整数型 | Long | -2,147,483,648~2,147,483,647の整数 |
ブール型 | Boolean | TrueまたはFalse |
日付型 | Date | 日付:西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59 |
整数型 | Integer | -32,768~32,767の整数 |
単精度浮動小数点数型 | Single | 負の値:約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗) |
倍精度浮動小数点数型 | Double | 負の値:約-1.8×10(308乗)~-4.0×10(-324乗)正の値:約4.9×10(-324乗)~1.8×10(308乗) |
オブジェクト型 | Object | オブジェクト(EXCEL本体やIEブラウザなど) |
変数の使用ルール
変数の型は事前に宣言する
実際のVBEの画面を確認してしてみましょう。
Dim a as String に着目して説明します。
変数への格納方法
全体図に当てはめるとこのような形。
◎変数から取り出す方法
余談:なぜVariantを多用しないの?
◎引用:MicroSoft社が提供するMicrosoft DocsよりVisual Basic では、変数は、代入ステートメントで使用するだけで、暗黙的に宣言できます。 暗黙的に宣言されたすべての変数は Variant 型になります。 Variant 型の変数には、他のほとんどの変数よりも多いメモリ リソースが必要です。 変数を明示的に宣言して特定のデータ型を割り当てると、アプリケーションの効率が上がります。 すべての変数を明示的に宣言すると、名前の競合エラーやスペル ミスの発生を減らすことができます。
Chapter 3 -最終行の取得と活用
最終行の取得方法
最終行は、以下のコードで取得できます。
最終行を「変数:lastgyou」に格納しようと思います。
<最終行を取得できるコード>
1 2 3 4 |
Dim lastgyou as long 'A列での最終行が分かる。 lastgyou = Cells(Rows.Count, 1).End(xlUp).Row |
仮に最終行が 5行目だった場合、
変数:lastgyou の中身は「5」が格納されています。
Cells(Rows.Count, 1).End(xlUp).Row でなんでA列の最終行が分かるの?
まとめると、A列の最終行から 上へカーソルを飛ばした
もちろん、Cells(Rows.Count,2)にすれば、B列の最終行も分かります。
活用例
1 2 3 4 5 6 7 8 9 10 11 |
Sub Macro1() Dim lastgyou As Long 'A列での最終行が分かり 変数lastgyouに格納される。 lastgyou = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最後尾にC1セルの値を追加する Cells(lastgyou + 1, 1).Value = Cells(1, 3).Value End Sub |
Chapter 3 -EXCELワークシートの操作
ワークシート操作を簡単なコードから学ぶ
1 |
Worksheets("Sheet1").Range("A1").Value = "おはよう" |
当然 シート名がSheet2 だった場合は、以下の通りです。
1 |
Worksheets("Sheet2").Range("A1").Value = "おはよう" |
ワークシート自体の制御方法(追加・削除など)
操作内容 | コード | 属性 | 例 | 例の意味 |
選択 | Select | メソッド(SV型) | - | - |
選択 | Activate | メソッド(SV型) | - | - |
名前変更 | Name | プロパティ | Worksheets("Sheet1").Name = "新シート名" | Sheet1を"新シート名"にする |
削除 | Delete | メソッド(SV型) | Worksheets("Sheet1").Delete | Sheet1を削除 |
追加
|
Add
|
メソッド(SV型) | Worksheets.Add | 先頭にシートを追加 |
メソッド(SVO型) | Worksheets.Add Before:=Sheets("シート名") | "シート名"の前に追加 | ||
メソッド(SVO型) | Worksheets.Add After:=Sheets("シート名") | "シート名"の後ろに追加 | ||
移動
|
Move
|
メソッド(SVO型) | Worksheets.Move Before:=Sheets("シート名") | "シート名"の前に移動 |
メソッド(SVO型) | Worksheets.Move After:=Sheets("シート名") | "シート名"の後ろに移動 | ||
コピー
|
Copy
|
メソッド(SVO型) | Worksheets.Copy Before:=Sheets("シート名") | "シート名"の前にコピー |
メソッド(SVO型) | Worksheets.Copy After:=Sheets("シート名") | "シート名"の後ろにコピー |
シートを削除(Delete)する場合の警告を出さない方法
1 2 3 4 5 6 7 8 9 10 |
<対象コード> Sub macro1() '最初、削除の警告を出さないようにする Application.DisplayAlerts = False ~実行VBAコード~ '最後、削除時のエラーアラートが出るように戻しておく Application.DisplayAlerts = True End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Macro1() '削除時のエラーアラートを出さないようにする Application.DisplayAlerts = False 'Sheet1を削除 Worksheets("Sheet1").Delete '削除時のエラーアラートが出るように戻しておく Application.DisplayAlerts = True End Sub |
Chapter 3 -フルパス
フルパスとは?
フルパスとは、ファイルやフォルダの置き場所のことです。
フルパスが分かると何ができるか
フルパスが分かると、以下のことができます。
フルパスは右クリックでも分かる
フルパスはVBAコードでも知ることが出来る
1 2 3 4 5 6 7 8 9 10 11 |
Sub Macro1() '変数を宣言 Dim fullpass1 As String '実行中のマクロが記録されているフォルダまでのパス fullpass1 = ThisWorkbook.Path 'A2に記載 Range("A2").Value = fullpass1 End Sub |
Chapter 3 -EXCELワークブックの操作
ワークブック操作を簡単なコードから学ぶ
1 |
Workbooks("えくせる1号.xlsm").Worksheets(“てすと1").Range("A1").Value = "おはよう" |
◎「エクセル2号」のシート「テスト2」のA1セルに「
1 |
Workbooks(“エクセル2号.xlsx”).Worksheets(“テスト2”).Range(“A1”).Value = “ありがとう" |
EXCEL が開かれていない場合はどうやって制御するの?
1 |
Workbooks.Open "フルパス\ファイル名.拡張子" |
Chapter 3 -オブジェクト変数
Chapter 3 -変数で 既にオブジェクト変数については説明していますが、
このタイミングで改めて説明します。
オブジェクト変数とは?
オブジェクト変数への格納方法
EXCELファイルはオブジェクト変数に格納できる
1 |
Workbooks("通常EXCEL.xlsx").Worksheets("Sheet1").Range("A1").Value = "おはよう" |
◆省略方法ーその1
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub 省略方法①() '変数を宣言 Dim wb1 As Object '変数を事前にセット(事前に扱うEXCELファイルが決まっている場合有効) Set wb1 = Workbooks("通常EXCEL.xlsx") '「ワークブック」の箇所を省略できる wb1.Worksheets("Sheet1").Range("A1").Value = "おはよう" End Sub |
◆省略方法ーその2
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub 省略方法②() '変数を宣言 Dim wb1 As Object '変数を事前にセット(事前に扱うEXCELファイル+シートが決まっている場合有効) Set wb1 = Workbooks("通常EXCEL.xlsx").Worksheets("Sheet1") '「ワークブック」と「ワークシート」の箇所を省略できる wb1.Range("A1").Value = "おはよう" End Sub |
Chapter 3 -EXCELを開く閉じる
EXCELを開く
1 |
Workbooks.Open "フルパス\ファイル名.拡張子" |
EXCELを上書き保存
1 |
Workbooks("ブック名").Save |
EXCELを閉じる
1 |
Workbooks("ブック名").Close |
注意点:保存しないで閉じるとシステムダイアログが邪魔する
<他の解決方法>
◎1つのコードで上書き保存+閉じるをしたい場合
1 2 |
'変更を上書き保存し閉じる ※ダイアログは出ません Workbooks("対象ブック名").Close SaveChanges:=True |
◎変更を保存せずに閉じたい場合
1 2 |
'変更を保存せずに閉じる ※ダイアログは出ません Workbooks("対象ブック名").Close SaveChanges:=False |
Chapter 3 -マクロ実行ボタンを作成
Chapter 3-ここまでの知識を実践
ここまで学習した方は、以下のことが出来ます。
EXCEL間データ連携を実践してみる
作成する手順は、以下の通りでおこないます。
◎変数を利用しないコードの書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub 実践してみる() '①操作対象EXCELを開く Workbooks.Open "W:\Desktop\Book1.xlsx" Workbooks.Open "W:\Desktop\Book2.xlsx" '②実行したい内容を記述・作成する '└Book1.xlsxのA1セル情報をBook2.xlsxのB1セルに転記します。 Workbooks("Book2.xlsx").Worksheets("sheet1").Range("B1").Value = Workbooks("Book1.xlsx").Worksheets("sheet1").Range("A1").Value '③保存・閉じる '└情報を更新したBook2.xlsx は保存 + 閉じる。 '情報は未更新のBook1.xlsx はそのまま閉じる。 Workbooks("Book2.xlsx").Save Workbooks("Book2.xlsx").Close Workbooks("Book1.xlsx").Close End Sub |
◎変数を使用するコードの書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Sub スマートに実践してみる() '変数を宣言 Dim wb1 As Object 'Book1格納用 Dim wb2 As Object 'Book2格納用 '①操作対象EXCELを開く Workbooks.Open "W:\Desktop\Book1.xlsx" Set wb1 = ActiveWorkbook 'Open後はBook1がアクティブになっている Workbooks.Open "W:\Desktop\Book2.xlsx" Set wb2 = ActiveWorkbook 'Open後はBook2がアクティブになっている '②実行したい内容を記述・作成する '└Book1.xlsxのA1セル情報をBook2.xlsxのB1セルに転記します。 wb2.Worksheets("sheet1").Range("B1").Value = wb1.Worksheets("sheet1").Range("A1").Value '③保存・閉じる '└情報を更新したBook2.xlsx は保存 + 閉じる。 '情報は未更新のBook1.xlsx はそのまま閉じる。 wb2.Close SaveChanges:=True '上書き保存で閉じる wb1.Close End Sub |