Select Case 文
なんかよく忘れるのでメモ
Select Case 値
Case 比較値1: 処理1
Case 比較値2: 処理2
...
Case Else: 処理x
End Select
以下、サンプル(あんまりいいコードじゃないが・・・)
Select Case val Case 0: ' 処理なし Case 1: MsgBox "睦月" Case 2: MsgBox "如月" Case 3: MsgBox "弥生" Case 4: MsgBox "卯月" Case 5: MsgBox "皐月" Case 6: MsgBox "水無月" Case 7: MsgBox "文月" Case 8: MsgBox "葉月" Case 9: MsgBox "長月" Case 10: MsgBox "神無月" Case 11: MsgBox "霜月" Case 12: MsgBox "師走" Case Else: ' 処理なし End Select
C言語の様に複数の比較値に対応した処理を一箇所に書けないので
そういう目的では If...Else...End If で処理しても変わらない。
オートフィルタ使用時の注意
オートフィルタを繰り返し使用する処理を書く場合には以下の点に気をつけること。
- 該当シートにオートフィルタが設定されているかどうかを確認
- 設定されている場合は一度解除する( object.AutoFilterMode = False )
- フィルタを設定
- (できれば)フィルタを解除して次の処理へ渡す
以下サンプルコード
Dim ws As Worksheet Set ws = ThisWorkbook.Sheet(1) If ws.FilterMode Then ws.AutoFilterMode = False End If With ws.Rows(1) .AutoFilter <span style="font-style:italic;">...</span> End With <span style="font-style:italic;">...</span> ws.AutoFilterMode = False
実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。
オートコレクト時の有効要素数を数える
以下はA列を使って有効要素数を算出する方法
Range("A1:A" & Cells(65530, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count
上記の方法では対象の各セル要素が全て詰まっている列を使って処理をすることが望ましい。
Collectionオブジェクト
Collection オブジェクトは複数の要素の集合を扱う為のオブジェクト
中に入っているデータはデータ型が異なっていても構わない。
メソッドは以下の通り
- Add
- Count
- Item
- Remove
Add メソッド
Add メソッドは要素の追加を行う。
Collection.Add( Item [, key [, ( before / after ]] )
- Item
- コレクションに追加するデータ。データ型は任意。
- key
- コレクションオブジェクトのデータの文字列キー。これを指定しておけば他のメソッドを使用する際に予め決められたキーを使ってデータを操作できる。
- before(after)
- データを追加する位置を指定する為に使う。beforeは挿入するデータの前に置かれるデータを、afterは挿入するデータの後に置かれるデータを使用する。beforeとafterは同時に指定できない。使用する場合は引数名を指定する必要がある。
Count メソッド
コレクションオブジェクトが管理しているデータ数を返す。
Item メソッド
コレクションオブジェクトからデータを取り出す(コピーする)。
Collection.Item( index )
- index
- データを呼び出す為のインデックス。数値、もしくはキー値を指定する*1。
Remove メソッド
コレクションオブジェクトからデータを削除する。
Collection.Remove( index )
- index
- データを呼び出す為のインデックス。数値、もしくはキー値を指定する。
*1:キー値を指定する場合は、予めAddメソッドでキー値を指定する必要がある。
「イミディエイト」ウィンドウ
VBA での「イミディエイト」ウィンドウの使い方
式の実行
? コマンド
で、コマンドの実行結果が得られる(下記の赤字部分)
? Left("ABCD", 2)
2
変数を定義して代入
別に変数宣言はしなくて良い。
適当な変数名を使って値を代入すればよい。
a = "1234"
? Len(a)
4
関数の呼び出し
これもそのまま書くだけ。
ただし、引数を持たない関数については「Call」キーワードを前置する必要がある。
出力は Debug.Print で記述されたものがイミディエイトウィンドウに出力される。
Func1(1, 2)
Call Func2
Debugオブジェクト
Debug オブジェクトはそのままずばりデバッグの為にあるオブジェクトである。
メソッドとしては
- Assert
を持つ。
Debug.Print
Printメソッドはイミディエイトウィンドウへの出力の為に使われる。
Debug.Print( 文字列 )
Debug.Assert
Assertメソッドは引数の真偽値を判定し、値が偽である時に処理を中断するという処理をします。
Debug.Assert( 真偽値 )