<VBA(マクロ)の活用>
●Excel/WardでのVBAの活用法
▼▼
●VBA(マクロ)の説明
●VBA=略「Visual Basic for Applications」を利用すれば、Excel/Wardの操作手順をプログラミング言語に置き換えて保存することで、マクロの実行を自動化できます。
●保存されプログラムは、モジュール(プログラムの保存箱)の中のコードで記述されます。例えば▼
'●計算例<1>「'」を付けると注釈になります。
Sub 計算例01 '●プロシージャの開始「Sub マクロ名()」
Range("A1").Select '●範囲A1セルを選択します。
ActiveCell.Value=10
'▲アクティブなセル(選択点滅セル)に値=10を入力表示する。
ActiveCell.Offset(1).Select
'▲アクティブなセルの1行下のセルを選択します。
ActiveCell.Value=("=10*30/2") '▲アクティブなセルに数式「=10*30/2」を入力表示する。
End Sub '●プロシージャの終了
▲上記のマクロは、選択セルに10を表示し、一行下のセルに10×30÷2の計算結果を表示できます。
●Visual Basic ツールバーを表示しておけば、マクロ操作の作業が効率的に行えます。ツールバーの右クリックメニュ-から選択表示できます。
●マクロの編集や入力には、【VBE(Visual Basic Editor)】を起動します。プロジェクト/コード/プロパティを編集するウィンドウを表示ができます。【表示】メニューからこれらの窓表示のON/OFF設定ができます。
●VBツールバー→【マクロの実行】▼形ボタンで実行できる。
●ボタンを作成し、※1~3の操作でマクロを登録します。
※1)【フォームツールバー】で作成したボタンの右clk→【マクロの登録】→ボタンクリックでマクロが実行できます。
※2)テキストボックスの右clk→【マクロの登録】→ボタンクリックでマクロが実行できます。この方法は、オートシェイプや画像データでも利用できます。
※3)VBツールバーの【コントロールツール】でコマンドボタンの作成→ボタンのダブルクリック→コード窓開く→ボタン【デザインモード】ON→自動表示された「Private Sub CommandButton1_Click()~End Sub」の間にコード記述するとVB実行ボタンとして利用できます。
●【マクロ記録】機能を利用すれば、実行後の操作をコード(プログラム)として保存することができます。よく繰り返して利用する操作は、マクロ保存しておくと便利です。
●マクロの記述例
▼マクロのコード記述をVBAのコード窓に複写できます。
但し、同じマクロ名を重複して使用するとエラーになります。
必ず、重複したマクロ名の有無を確認してください。
'1)マクロ(1) 縦列→連番入力 1~5
Sub 連番入力1to5()
’▼変数宣言【】内は変数名
Dim I As Integer '●整数変数【I】
For I = 1 To 5 ’●変数【I】の値が1~5まで1ずつ増加
ActiveCell.Value=I ’●アクティブセルに【I】の値を入力表示
ActiveCell.Offset(1).Select’●↓1行下のセル選択
Next I
End Sub
'2)マクロ(2) 縦列→連番入力 10~5
Sub 連番入力10to5()
’▼変数宣言【】内は変数名
Dim I As Integer '●整数変数【I】
'▼変数【I】の値が10~5まで1ずつ減少
For I = 10 To 5 Step-1
ActiveCell.Value=I’●アクティブセルに【I】の値を入力表示
ActiveCell.Offset(1).Select’●↓1行下のセル選択
Next I
End Sub
▲
●エクセルマクロ
▼
●マクロのユーザー定義関数
●【Function】プロシージャでマクロのユーザー定義関数が作成できます。
Functionプロシジャー(略:FncP)の基本コードの例として▼
'●三角形の面積計算関数【A_三角形の面積】
'▼Fncプロシージャを開始し、関数名(引数)を指定する。
Function A_三角形の面積(底辺,高さ)
'▼関数名 = 計算式 →計算結果値を関数名に代入する。
A_三角形の面積 = (底辺*高さ)/2
End Function '●FncPの終了
●上記コードをVBEの【コード窓】へ複写すれば、マクロが作成できます。
但し、同じマクロ名を重複して使用するとエラーになります。
必ず、重複したマクロ名の有無を確認してください。
●マクロ作成後、(fx)【関数貼り付け】ボタン→【ユーザー定義】に関数
「A_三角形の面積」が表示され、関数として利用できます。
'A)★★★Excelマクロ関数Sqr()の利用
''★★★
'●1)X水平距離とY垂直距離座標値からSD斜距離を求める。
'●直角三角形の斜辺の斜距離計算(hD,vD/X座標,Y座標)
Function A_SD斜距離(X水平距離, Y垂直距離) '●関数名(引数)
A_SD斜距離 = Sqr(X水平距離 ^ 2 + Y垂直距離 ^ 2) '●計算式
End Function '▲▲FncP終了※Sqr()は√値計算の関数
'1a)★★★^0.5→√の利用
'●1a)X水平距離とY垂直距離座標値からSD斜距離を求める。
'●直角三角形の斜辺の斜距離計算(hD,vD/X座標,Y座標)
Function B_SD斜距離(X水平距離, Y垂直距離) '●関数名(引数)
B_SD斜距離 = (X水平距離 ^ 2 + Y垂直距離 ^ 2) ^ 0.5
'●計算式
End Function '▲▲FncP終了※^0.5は√値計算の関数
'2)★★★
’2)●測量座標X/Y(m単位)を数学座標X,Y(mm単位)に変換する。
Public Function 測to数XY変換(X座標数, Y座標数) '●関数名(引数)
’▼測量座標の(X)/(Y)座標→数学座標(X,Y)に変換(単位mm:小数点1桁)
測to数XY変換 = Round(Y座標数 * 1000, 1) & "," & Round(X座標数 * 1000, 1)
End Function '▲▲測量(X,Y)座標→AutoCAD入力座に利用できる。
'A)★★★
'3a)数学座標(mm単位)を測量座標(m単位)に座標に変換する。
Public Function 数to測XY変換(X座標測, Y座標測)'●関数名(引数)
’▼数学座標の(X)/(Y)座標→測量座標(X,Y)に変換(単位m:小数点4桁)
数to測XY変換 = Round(Y座標測 / 1000, 4) & "," & Round(X座標測 / 1000, 4)
End Function '▲▲測量(X,Y)座標→AutoCAD入力座に利用できる。
'4)★★★
'4)●座標を1セルX,Y(カンマ形式)に変換する。
Public Function ア座標XY(X, Y) '●関数名(引数)
'▼座標(X)/(Y)を1セル(X,Y)カンマ形式に変換する。
ア座標XY = X & "," & Y
End Function '▲▲
'5)★★
'5)ACADのコマンドラインへCOPY>PASTして2点の結線を作図する。
Public Function 線作図2P(座標A, 座標B) '●関数名(引数)
'▼座標A(X,Y)から座標B(X,Y)への線分作図AutoCADコマンド
線作図2P = "L " & 座標A & " " & 座標B & " "
End Function '▲▲AutoCADのコマンド窓へ複写
'6)★★
'6)ACADのコマンドラインへCOPY>PASTして文字を作図する。
Public Function 文字作図CAD(点, 文字, 角度)
文字作図CAD = "-text j bc " & 点 & " " & 角度 & " " & 文字
End Function '▲▲AutoCADのコマンド窓へ複写
'7)★★
'7)ACADのコマンドラインへCOPY>PASTして点を作図する。
Public Function 点作図AC(座標)
点作図AC = "PT " & 座標
End Function '▲▲AutoCADのコマンド窓へ複写
'8)★★
'8)ACADのコマンドラインへCOPY>PASTして円を作図する。
Public Function 円作図AC(座標, 半径)
円作図AC = "C " & 座標 & " " & 半径
End Function '▲▲AutoCADのコマンド窓へ複写
''★★★★★
'9)★★
'9)球体の体積=(4×π×半径^3)/3
Public Function 球体の体積(半径)
球体の体積 = ( 4 * 3.141592654 * 半径^3)/3
End Function '▲▲
'10)★★
'10)単心円の円弧(曲線)長と半径から中心角を求める。
Function A_deg弧中心角LR(曲線長, 半径)
A_deg弧中心角LR = (曲線長 / 半径) * 180 / 3.141592654
End Function '▲▲角度はdeg角度(十進数角度)です。
'11)★★
'11)単心円の半径と円弧長から弦長を求める。
Function 弦長RCL(半径, 円弧長)
R角 = 円弧長 / 半径
弦長RCL = 2 * 半径 * Sin(R角 / 2)
End Function '▲▲
'11a)★★
'11a)単心円の半径と中心角ラジアンから弦長を求める。
Function 弦長RA(半径, ラジアン中心角)
弦長RA = 2 * 半径 * Sin(ラジアン中心角 / 2)
End Function '▲▲
'12)★★
'12)単心円の半径と中心角度ラジアンから中央縦距を求める。
Public Function 中央縦距RA(半径, ラジアン中心角)
中央縦距RA = 半径 - 半径 * Cos(ラジアン中心角 / 2)
End Function '▲▲
'13)★★直角三角形計算
’13)斜距離と角度ラジアンから垂直距離を求める。
Function 垂直距離SDA(斜距離, ラジアン角)
垂直距離SDA = 斜距離 * Sin(ラジアン角)
End Function '▲▲
'14)★★クロソイド
’14)クロソイドのAパラメータと曲線長から半径を求める。
Function クロソイド半径(パラメータA, 曲線長)
クロソイド半径 = パラメータA ^ 2 / 曲線長
End Function '▲▲
'15)★★クロソイド
'15)クロソイドのAパラメータと半径から曲線長を求める。
Function クロソイド曲線長(パラメータA, 半径)
クロソイド曲線長 = パラメータA ^ 2 / 半径
End Function '▲▲
'16)★★クロソイド
'16)クロソイドの曲線長と半径からAパラメータを求める。
Function クロソイドA(曲線長, 半径)
クロソイドA = Sqr(曲線長 * 半径)
End Function '▲▲
'17)★★
'17)クロソイドの曲線長と半径から接線角を求める。
Function クロソイド接線角(曲線長, 半径)
クロソイド接線角 = (曲線長 / (2 * 半径)) * 57.29577951
End Function '▲▲
'18)
’18)deg角度をACAD入力用のd’”形式角度に変換する。
Function Adms(deg3角度)
Adms = Application.RoundDown(deg角度3 + 0.0000001, 0) _
& "d" & Minute(Abs(deg角度3 / 24)) & "'"& Second(Abs(deg角度3 / 24)) & """"
End Function '▲▲
'18a)
’18a)deg角度をACAD入力用のd’”形式角度に変換する。
Public Function Adms2(角deg2)
Adms2 = Application.RoundDown(角deg2, 0) & "d" _
& Application.Text(Abs(角deg2 / 24), "mm'ss.0") & """"
End Function '▲▲
'18c)
’18c)deg角度を度.分秒形式角度に変換する。
Function dms4(deg角度)
dms4 = Application.RoundDown(deg角度 + 0.0000001, 0) _
& "." & Minute(Abs(deg角度 / 24)) & Second(Abs(deg角度 / 24))
End Function '▲▲