Excel プログラム開発の練習マニュアルー 2 ( マクロの学習 -2 ) 作成 2015.03.20 修正 2015.04.19 本マニュアルでは Excel でのプログラム開発を行なうに当たって Excel の高度なマクロに関する学習 について記述します
Ⅰ.Excel のマクロに関する学習 -2 1. 初めに Excel は単なる表計算のソフトと思っている方も多いと思います しかし Excel には 一般的に使用する Excel 関数の他に Excel Basic と呼ばれる VBA( Visual Basic for Application ) を利用する事も出来ます Excel で VBA を使って開発を行うと 極めて強力な業務用ソフトを開発する事が出来て 業務効率化に大変に有用なのです Excel で利用出来る関数の使い方の練習については プログラム開発初級 の エクセル関数の学習 を見て下さい Excel Basic を使った開発の練習について 本マニュアルでは 簡単な Excel のマクロ (Excel のマクロに関する学習ー 1) を学習された事を前提に 高度な Excel のマクロ に関して記述します 2. 事前準備 & 説明 1.MS Office の準備 通常は パソコンに MS Office が予めインストールされているので その中の Excel を使用します インストールされていない場合は MS Office の Standard 版を購入して下さい 2.Excel マクロの学習 Excel マクロは VBA とも呼ばれる BASIC 言語を使用します Excel マクロ (VBA) では VB 単独での開発に比べて Excel 独特の機能である 罫線の描画に関する機能 が数多く含まれています これらの機能を使いこなせれば ビジネス上のアプリケーションとして 充分に通用するソフトウェアの開発が出来ます 1/22
3.Excel のマクロに関する学習 -2 1. マクロの自動記録と Table 定義書の項目値の取得 新規ワークシートへの書込 ここでは マクロの自動記録 を使いながら 以下の 3 つの事を行ないます a.table 定義書の項目値の取得 ( 行毎の値のコピー ) b. 新規の Excel の WorkSheet を作成し 第 1 行の各列に Table 定義書の項目名を書込 c. 上記の a で取得した Table 定義書の項目値 を 新規の Excel の WorkSheet の 2 行目以下に書込 前述した様に Excel マクロ (VBA) では Excel 独特の機能である 罫線の描画に関する機能 が数多く含まれていますが これらの機能を コマンド単独で学習して それらの機能を組み合わせて Excel マクロ (VBA) の Sub プログラムにするのは 非常に大変です ( 罫線の描画に関する機能 は 2 に記述します ) そこで 例えば Excel の表の複数のカラムの値をピックアップする Sub プログラム を開発する場合は まず 手動でその動きを行い この動きを マクロの自動記録 機能で記録します その後 記録した Excel のマクロ を見ながら 行ないたい機能をプログラミングしていきます Excel のマクロに関する学習 -2 の資料の Table 定義書は 社員管理システム用の Table 定義書の例です この Table 定義書で Table 番号 Table 名 TableID と 各項目毎の定義 ( 項目名 ~ 最終内容変更日 ) を自動で取得し 新規に作成したワークシートにコピーするマクロを作成する練習を行ないます この練習は プログラム開発初級 の アクセスでのプログラム開発 の Table 定義書自動チェック Prog. の学習 の内容の一部になります 2/22
a. マクロの自動記録 -1( Table 定義書の項目値の取得 ) まず始めに ツールバー の マクロ の 新しいマクロの記録 をピックします OK ボタンを押すと マクロの自動記録が始まります Excel の Table 定義書で 4 行目から 8 行目迄を行コピーします ツールバー の マクロ の 記録の終了 をピックすると マクロの自動記録が終了します 3/22
自動記録したマクロの内容を見る為に ツールバー の マクロ の マクロ をピックします マクロ名のウィンドウが現れるので 今記録した Macro1 の 編集 を選択します 4/22
これで 今 自動記録したマクロの内容を見る事が出来ます 編集も可能です このマクロの内容を以下に示します Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2015/4/15 ユーザー名 : XXXX ' Rows("4:4").Select Rows("5:5").Select Rows("6:6").Select 5/22
Rows("7:7").Select Rows("8:8").Select End Sub 上記のマクロの簡単な説明をします Rows("4:4").Select 行 4 を選択します 選択した範囲をコピーします Rows("5:5").Select 行 5 を選択します コピーモードにします 選択した範囲をコピーします 以下 6,7,8 行 (Rows("6:6") Rows("7:7") Rows("8:8")) は上記と同じ処理です 6/22
b. マクロの自動記録 -2 ( 新規の Excel の WorkSheet を作成し 第 1 行の各列に Table 定義書の項目名を書込 ) まず始めに ツールバー の マクロ の 新しいマクロの記録 をピックします OK ボタンを押すと マクロの自動記録が始まります Excel の Table 定義書の項目名 (1 行目の値 ) をコピーし 新規のワークシートを作成し 1 行目にコピーした項目名 (1 行目の値 ) をペースト ( 書き込み ) します ツールバー の マクロ の 記録の終了 をピックすると マクロの自動記録が終了します 自動記録したマクロの内容を見る為に ツールバー の マクロ の マクロ をピックします マクロ名のウィンドウが現れるので 今記録した Macro2 の 編集 を選択します 7/22
これで 今 自動記録したマクロ (Macro2) の内容を見る事が出来ます 編集も可能です このマクロの内容を以下に示します Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2015/4/18 ユーザー名 : YYYYYY ' End Sub Rows("3:3").Select Sheets.Add ActiveSheet.Paste Range("C7").Select 以下 上記のマクロの簡単な説明をします Rows("3:3").Select 行 3 を選択します 選択した範囲をコピーします Sheets.Add 新規のワークシートを作成します ActiveSheet.Paste Active なシート ( 今開いているワークシート : 新規に作成したワークシート ) に 先に選択した範囲をペーストします 8/22
Range("C7").Select 特に意味はありません マクロの自動記録を終わらせる為に 仮にポインターを置いた場所 ( セル ) です マクロの自動記録を終了させます c. マクロの自動記録 -3 ( 上記の a で取得した Table 定義書の項目値 を 新規の Excel の WorkSheet の 2 行目以下に書込 ) まず始めに ツールバー の マクロ の 新しいマクロの記録 をピックします OK ボタンを押して Macro3 の自動記録を開始します 次に Excel の Table 定義書の項目名 (4 行目の値 ) をコピーし 新規のワークシートを作成し 2 行目にコピーした項目名 (4 行目の値 ) をペースト ( 書き込み ) します 9/22
ツールバー の マクロ の 記録の終了 をピックすると マクロの自動記録が終了します 10/22
自動記録したマクロの内容を見る為に ツールバー の マクロ の マクロ をピックします マクロ名のウィンドウが現れるので 今記録した Macro3 の 編集 を選択します 11/22
これで 今 自動記録したマクロ (Macro3) の内容を見る事が出来ます 編集も可能です このマクロの内容を以下に示します Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2015/4/19 ユーザー名 : XXXXXX ' Rows("4:4").Select Sheets("Sheet1").Select Rows("2:2").Select ActiveSheet.Paste Sheets("X05_01( 社員情報 )").Select Rows("5:5").Select 12/22
Sheets("Sheet1").Select Rows("3:3").Select ActiveSheet.Paste Sheets("X05_01( 社員情報 )").Select Rows("6:6").Select Sheets("Sheet1").Select Rows("4:4").Select ActiveSheet.Paste Sheets("X05_01( 社員情報 )").Select Rows("7:7").Select Sheets("Sheet1").Select Rows("5:5").Select ActiveSheet.Paste Sheets("X05_01( 社員情報 )").Select Rows("8:8").Select Sheets("Sheet1").Select Rows("6:6").Select ActiveSheet.Paste End Sub 13/22
以下 前記のマクロの簡単な説明をします Rows("4:4").Select 行 4 を選択します 選択した範囲をコピーします Sheets("Sheet1").Select Sheet1( 新規に作成したワークシート ) を選択します Rows("2:2").Select 行 2 を選択します ActiveSheet.Paste コピーした範囲を選択した範囲にペーストします Sheets("X05_01( 社員情報 )").Select X05_01( 社員情報 ) のシート (Table 定義書のシート ) を選択します Rows("5:5").Select 行 5 を選択します 選択した範囲をコピーします Sheets("Sheet1").Select Sheet1( 新規に作成したワークシート ) を選択します Rows("3:3").Select 行 3 を選択します ActiveSheet.Paste コピーした範囲を選択した範囲にペーストします 以下 X05_01( 社員情報 ) のシート (Table 定義書のシート ) の 8 行目迄を Sheet1( 新規に作成したワークシート ) の 6 行目までにペーストしていきます 14/22
その結果 Sheet1( 新規に作成したワークシート ) は 以下の様になります これで Sheet1( 新規に作成したワークシート ) への書き込みの練習は終了です 次の 2 の練習の為に X05_01( 社員情報 ) のシート (Table 定義書のシート ) の 8 行目以下の全ての行を Sheet1( 新規に作成したワークシート ) に書き込み ( コピー ) をしておきます 15/22
2. マクロの自動記録とデータ書込をした新規ワークシートへの罫線追加 ここでは マクロの自動記録 を使いながら 以下の 3 つの事を行ないます a. 新規ワークシートのデータの有る全ての範囲 ( セル ) への罫線 ( 細線 ) を追加 b. 新規ワークシートのデータの有る範囲の外側に罫線 ( 太線 ) を追加 この練習は プログラム開発初級 の アクセスでのプログラム開発 の Table 定義書自動チェック Prog. の学習 の内容の一部になります a. 新規ワークシートのデータの有る全ての範囲 ( セル ) への罫線 ( 細線 ) を追加 Sheet1( 新規に作成したワークシート ) には データをコピーした時に罫線も一緒にコピーされていますので 罫線 ( 細線 ) の追加 機能の学習の為 予め罫線を消しておきます ( 下記 Excel シート参照 ) 今迄の練習と同様に マクロの自動記録 Macro4 を開始し Sheet1 ( 新規に作成したワークシート ) の全てのセルに罫線 ( 細線 ) を付けます ( 次頁の Excel のシートを参照 ) 16/22
以下 今 自動記録したマクロ (Macro4) の内容を示します Sub Macro4() ' ' Macro4 Macro ' マクロ記録日 : 2015/4/19 ユーザー名 : YYYYYY ' Range("A1:H22").Select ActiveWindow.ScrollColumn = 10 Range("A1:Q22").Select ActiveWindow.ScrollColumn = 1 Selection.Borders(xlDiagonalDown).LineStyle = xlnone Selection.Borders(xlDiagonalUp).LineStyle = xlnone With Selection.Borders(xlEdgeLeft).Weight = xlthin 17/22
With Selection.Borders(xlEdgeTop).Weight = xlthin With Selection.Borders(xlEdgeBottom).Weight = xlthin With Selection.Borders(xlEdgeRight).Weight = xlthin With Selection.Borders(xlInsideVertical).Weight = xlthin With Selection.Borders(xlInsideHorizontal).Weight = xlthin 18/22
End Sub Range("B25").Select 以下 前記のマクロの簡単な説明をします Range("A1:H22").Select セル (A,1) からセル (H,22) 迄を選択します ( 画面の制約上 セル (A,1) からセル (Q,22) 迄を一度に選択が出来ません ) ActiveWindow.ScrollColumn = 10 10 カラムスクロールさせます Range("A1:Q22").Select セル (A,1) からセル (Q,22) 迄を選択します ActiveWindow.ScrollColumn = 1 ~ 選択したセル (A,1) からセル (Q,22) の範囲全てのセルに罫線 ( 細線 ) を付加します 19/22
なお 以下の構文は 自動記録を終了させる為に セルをピックしただけで 特に意味は有りません Range("B25").Select End Sub b. 新規ワークシートのデータの有る範囲の外側に罫線 ( 太線 ) を追加 今迄の練習と同様に マクロの自動記録 Macro4 を開始し Sheet1( 新規に作成したワークシート ) の外枠に罫線 ( 太線 ) を付けます 以下 今 自動記録したマクロ (Macro5) の内容を示します Sub Macro5() ' ' Macro5 Macro ' マクロ記録日 : 2015/4/19 ユーザー名 : XXXXXX ' Range("A1:O22").Select ActiveWindow.SmallScroll ToRight:=5 Range("A1:Q22").Select 20/22
Selection.Borders(xlDiagonalDown).LineStyle = xlnone Selection.Borders(xlDiagonalUp).LineStyle = xlnone With Selection.Borders(xlEdgeLeft).Weight = xlmedium With Selection.Borders(xlEdgeTop).Weight = xlmedium With Selection.Borders(xlEdgeBottom).Weight = xlmedium With Selection.Borders(xlEdgeRight).Weight = xlmedium With Selection.Borders(xlInsideVertical).Weight = xlthin 21/22
With Selection.Borders(xlInsideHorizontal).Weight = xlthin Range("D24").Select End Sub 以下 前記のマクロの簡単な説明をします Range("A1:O22").Select ActiveWindow.SmallScroll ToRight:=5 Range("A1:Q22").Select セル (A,1) からセル (H,22) 迄を選択し 5 カラムスクロールさせて セル (A,1) からセル (Q,22) 迄を選択します Selection.Borders(xlDiagonalDown).LineStyle = xlnone ~ 選択したセル (A,1) からセル (H,22) の外枠に罫線 ( 太線 ) を付けます なお 以下の構文は 前記同様に 自動記録を終了させる為に セルをピックしただけで 特に意味は有りません End Sub Range("D24").Select ( 注 1):Excel 及び VB は マイクロソフト社の製品です ( 注 2):Excel の VBA の個々のコマンドに関しては Excel のヘルプを見るか VB の解説書を見て下さい 22/22