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 で処理しても変わらない。

オートフィルタ使用時の注意

オートフィルタを繰り返し使用する処理を書く場合には以下の点に気をつけること。

  1. 該当シートにオートフィルタが設定されているかどうかを確認
    • 設定されている場合は一度解除する( object.AutoFilterMode = False )
  2. フィルタを設定
  3. (できれば)フィルタを解除して次の処理へ渡す

以下サンプルコード

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
参照
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200706/07060021.txt

実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。

  1. シートを選択( Select )
  2. 領域( Range )を選択( Select )

の手順を踏まないと上記エラーになる模様*1

なんつーか、仕様の不備だと思ふ。

参照
http://okwave.jp/qa1722099.html

*1:ただし、アクティブシートに対する操作であれば、この範疇ではない

オートコレクト時の有効要素数を数える

以下はA列を使って有効要素数を算出する方法

Range("A1:A" & Cells(65530, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count

上記の方法では対象の各セル要素が全て詰まっている列を使って処理をすることが望ましい。

Collectionオブジェクト

Collection オブジェクトは複数の要素の集合を扱う為のオブジェクト
中に入っているデータはデータ型が異なっていても構わない。

メソッドは以下の通り

  • Add
  • Count
  • Item
  • Remove
参照
http://www.ilovex.co.jp/Division/SRD/archives/2006/03/vbacollection.html

Add メソッド

Add メソッドは要素の追加を行う。

Collection.Add( Item [, key [, ( before / after ]] )

Item
コレクションに追加するデータ。データ型は任意。
key
コレクションオブジェクトのデータの文字列キー。これを指定しておけば他のメソッドを使用する際に予め決められたキーを使ってデータを操作できる。
before(after)
データを追加する位置を指定する為に使う。beforeは挿入するデータの前に置かれるデータを、afterは挿入するデータの後に置かれるデータを使用する。beforeafterは同時に指定できない。使用する場合は引数名を指定する必要がある。

Count メソッド

コレクションオブジェクトが管理しているデータ数を返す。

Item メソッド

コレクションオブジェクトからデータを取り出す(コピーする)。

Collection.Item( index )

index
データを呼び出す為のインデックス。数値、もしくはキー値を指定する*1

Remove メソッド

コレクションオブジェクトからデータを削除する。

Collection.Remove( index )

index
データを呼び出す為のインデックス。数値、もしくはキー値を指定する。

*1:キー値を指定する場合は、予めAddメソッドでキー値を指定する必要がある。

「イミディエイト」ウィンドウ

VBA での「イミディエイト」ウィンドウの使い方

参照
http://www.ken3.org/vba/iwind.html

式の実行

? コマンド

で、コマンドの実行結果が得られる(下記の赤字部分)

? Left("ABCD", 2)
2

変数を定義して代入

別に変数宣言はしなくて良い。
適当な変数名を使って値を代入すればよい。

a = "1234"
? Len(a)
4

関数の呼び出し

これもそのまま書くだけ。
ただし、引数を持たない関数については「Call」キーワードを前置する必要がある。

出力は Debug.Print で記述されたものがイミディエイトウィンドウに出力される。

Func1(1, 2)
Call Func2

Debugオブジェクト

Debug オブジェクトはそのままずばりデバッグの為にあるオブジェクトである。

メソッドとしては

  • Print
  • Assert

を持つ。

Debug.Print

Printメソッドはイミディエイトウィンドウへの出力の為に使われる。

Debug.Print( 文字列 )

Debug.Assert

Assertメソッドは引数の真偽値を判定し、値が偽である時に処理を中断するという処理をします。

Debug.Assert( 真偽値 )