Excel/VBA Tips

Engineering

VBA

Excel画面の名称

データ型

データ型使用メモリ値の適用
バイト型(Byte)1 Byte0~255
ブール型(Boolean)2 ByteTrue/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)

コメント

タイトルとURLをコピーしました