概要
GetNumFromArray1Dは、指定した値が一次元配列の何番目にあるかを調べる関数です。見つかった場合は要素番号を返し、見つからない場合は0を返します。
入力規則リスト切替スピンボタンでは、現在セルに入っている値が入力規則リストの何番目かを調べるために使っています。
使う場面
- 一次元配列の中から値の位置を探したい
- 入力規則リスト内の現在値の位置を知りたい
- 見つからなかった場合に
0で分岐したい - 配列上の簡単な検索処理を共通化したい
使用例
Dim list(1 To 3) As Variant
list(1) = "未対応"
list(2) = "対応中"
list(3) = "完了"
MsgBox GetNumFromArray1D("対応中", list)
コピー可能な実装コード
GetNumFromArray1D.bas
vba
コードを読み込み中...初心者向けコード解説
最初にIsEmpty(Array1D)で配列が空かどうかを確認します。空の場合はそのまま終了するため、戻り値は初期値の0になります。
次にUBound(Array1D, 1)で配列の最大要素番号を取得し、For I = 1 To Nで先頭から順番に比較します。
Value = Array1D(I)が一致したら、その番号をOutputへ入れてExit Forで検索を終えます。最後にGetNumFromArray1D = Outputで結果を返します。
関連記事
- 入力規則リストを矢印ボタンで切り替えるEventShowMoveSpinButton_Value
- 入力規則リストを前後へ切り替えるChangeDownValue_MoveSpinButton / ChangeUpValue_MoveSpinButton
- 0始まり配列を1始まりへ変換するConvArray1D_Start1
注意点
- この実装は1始まりの一次元配列を前提にしています。
- 0始まり配列を渡す場合は、先に
ConvArray1D_Start1で変換します。 - 見つからない場合は
0を返します。呼び出し側で0の意味を決めておく必要があります。 - 大量データの高速検索ではなく、小さな候補リスト向けの簡易検索です。
軽いまとめ
GetNumFromArray1Dは、一次元配列内の現在位置を知るための小さな部品です。入力規則リストや候補リストのように、順番に意味がある配列を扱うときに使いやすくなります。
