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