VBA
Excel画面の名称
データ型
データ型 | 使用メモリ | 値の適用 |
バイト型(Byte) | 1 Byte | 0~255 |
ブール型(Boolean) | 2 Byte | True/False |
整数型(Integer) | 2 Byte | -32,768~32,767 |
長整数型(Long) | 4 Byte | -2,147,483,648~2,147,483,647 |
単精度浮動小数点(Single) | 4 Byte | 小数点を含む数値を扱う |
倍精度浮動小数点(Double) | 8 Byte | 単精度よりも大きな数値 |
通貨型(Cerrency) | 8 Byte | 通貨を扱う |
日付型(Date) | 8 Byte | 日付と時刻を扱う |
文字列型(String) | 10 Byte + 文字列の長さ | 文字列を扱う |
オブジェクト型(Object) | 4 Byte | オブジェクトを扱う |
バリアント型(Variant) | 16 Byte 22 Byte+文字列の長さ(文字列) | あらゆるデータ型に対応 変数で型を指定しない場合に認識されるデータ型 |
セルの指定方法
1.セルの指定方法には、2種類あります。まずは、Excel画面内で位置を確認できる方法で「Range()」を使いいます。
Range(“A1”)=1
Range(“C4”)=100
2.「1」の方法だとfor~next構文などで連続でセルを処理場合やり難くなります。セルの「行」と「列」を両方とも数値で指定するには、「Cells()」を使います。
Cells(1,1)=1
Cells(4,3)=100
どちらの表記方法で書いても実行結果は下図のようになります。
Rangeで指定した場合、Range(“列””行”)の指定方法になりますが、Cellsで指定した場合Cells(“行””列”)の指定方法になることを注意して下さい。
イミディエイトウィンドウに表示させる
イミディエイトウィンドウに数字や文字を表示させる場合は、次のようにコードを書きます。
Debug.Print x
上記の様に記述すると、変数xの内容をイミディエイトウィンドウに表示しれくれます。
乱数を発生させる?
・Excelスプレッドシートの乱数を発生させる関数は「RandBetween(n,m)」関数です。n:最小値、m:最大値です。このように記述すると、最小値n , 最大値mの乱数を発生してくれます。元々はExcelスプレッドシートの関数です。Excelの関数をVBAで使用する場合には、Excel関数の頭に、「Aplicataion.WorksheetFunction」と付ける必要があります。
x = Application.Worksheet.Function.RandBetween(n,m)
・VBAで生成する。
Rnd
・指定範囲の乱数を取得したい場合
int((最大値-最小値+1)*Rnd + 最小値)
Message Box
・基本的な使用方法
数字や変数の内容を表示したい時は、ダブルクォーテーション等を付けずに、そのまま書き下します。
MsgBox 100 , Msgbox Sample
文字列を表示したい時は、ダブルクォーテーションでくくります。
MsgBox “Hello, World!”
・選択ボタンで処理を分岐する
Dim Rslt As VbMsgboxResult
Rslt = MsgBox(“これはメッセージボックスですか?”,Buttons:=vbYesNo)
If Rslt = vbYes
MsgBox ”正解です。”
Else
MsgBox “不正解です。”
EndIf
・文字列と混在する場合
MsgBox “文字列” & 123
Sub と Functionの違い
Subプロシージャ :戻り値を返さない。
Function プロシージャ : 戻り値を返す。
Function プロシージャ名() As 戻り値のデータ型
プロシージャ名 = 戻り値
End Function
Active X
ボタン等をダブルクリックするとシート内のメソッドが実行されるようです。
ボタンを押した際の動作のコードは、「デザインモード」にして、ボタンを押すとコードが表示されます。
Active X のボタン類を無効にする
「.Enable」プロパティの「True」「False」で設定可能です。
ボタンの名称が「StartButton」だとすると、
StartButton.Enable = True / False
フォームコントロール
ボタン等をダブルクリックすると標準モジュール内のメソッドが実行されるようである。
どちらも詳細を変更するには、「デザインモード」ボタンを押します。
クラスモジュールの作成方法
VBEの上段メニューの[挿入]→[クラスモジュール]を選択します。
※クラスモジュールを使用する上で注意すべきこと
クラスモジュールは独立したモジュールであり、クラスモジュール間の参照はできません。クラスモジュール間の参照をしたい場合は、その上の標準モジュールで各クラスモジュールを同列に扱わなけばなりません。
インスタンスの生成方法
・クラスモジュールの名前が「Class1」の場合、
Dim clsTest As Class1
Set clsTest = New Class1
又は
Dim clsTest As New Class1
Sheetの選択表示
Worksheets(“シートの名称”).Select
ループ処理
・While ループ
・Do While ループ
Do While Cells(Current_Row, 1) <> “”
Del_Top_Row = Current_Row + 1
Del_End_Row = Current_Row + MABIKI_Row
Rows(Del_Top_Row + ":" + Del_End_Row).Select
Selection.Delete shift:=xlUp
Current_Row = Current_Row + 1
Loop
・Do Until ループ
論理式が「Do While」文とは、逆の場合、「Do Until」文の方が有効です。
Do While Cells(Current_Row, 1) = “”
Loop
ループから離脱する場合は、
Do While ~ Loopの場合 Exit do
For Next の場合 Exit for
を実行します。
配列宣言
Dim 配列(要素数) As 型名
要素は0から始まります。
配列要素は「要素数+1」になります。
クラスの意味
Dim SectionBlock As New NumberPlaceBlock
クラス名:例 「申込書」
インスタンス名:例 「各申込者の氏名」
クラスモジュールの配列宣言
※クラスモジュールの配列宣言をする場合は、1行で行います。
普通のインスタンス生成の時のように、「Dim」で配列名を宣言し、「Set , New」のように2行に渡る宣言はできない。
Dim clsTest(要素数) As New Class1
クラスの定義はクラスモジュールで行います。
クラスの宣言は標準モジュール内で行います。
クラスの変数について:
グローバル変数:「Sub」や「Function」モジュールの外で定義します。標準モジュールから参照、書き換えができます。
ローカル変数:「Sub」や「Function」内部で宣言します。標準モジュールからは参照、書き換えはできません。
呼び出し側: Method(ClsTest )
呼び出される側: (ByRef ClsTest() as Class1) ※クラスが配列の場合
呼び出される側: (ByRef ClsTest as Class1) ※クラスが配列以外の場合
配列クラス
配列クラスモジュール内にさらに配列を作成する
配列をメソッドの引数にする
呼び出し側: Call Method(Array ())
呼び出される側:Method(Array() as Integer)
コメント