車のタービン死亡の様です、どうもoReです(涙目)
今回は、前回作成したBuhinknskプロシージャの説明などをしていきますぅぅ(涙目)
LBound関数 UBound関数
・Bound バァゥンドゥ
Boundは、『跳ねる』のほかに、
『境界』『限界』という意味みたいです。
・LはLower(ロォゥア)の略で、『下のほうの』という意味みたいです。
LBoundは、下のほうの限界
・UはUpper(アパァ)の略で、『上のほうの』という意味みたいです。
UBoundは、上のほうの限界
LBound関数の構文
LBound(arrayname [ ,dimension ] )
UBound関数の構文
UBound(arrayname [ ,dimension ] )
・array アレェィ
arrayは、『整列』『配列』という意味みたいです。
arraynameは、まんま配列名(配列変数名)ということになります。
構文の[]の部分は省略可能、ちなみにdimensionは『次元』でしたよね。
次元を指定するときに使用します。
つまり、
LBound関数の引数に、配列変数を渡してあげると
配列変数の下のほうの限界、
最初のインデックス番号を返してくれます。
UBound関数の引数に、配列変数を渡してあげると
配列変数の上のほうの限界、
最後のインデックス番号を返してくれます。
部品検索フォームのイニシャライズで確認してみましょう。
'部品検索フォーム初期化
Private Sub UserForm_Initialize()
Dim LastRow As Long
ListBox1.ColumnCount = 5
ListBox1.ColumnWidths = "50;50;100;100;100"
With Sheet1 'データベースをDataBaseへ格納
LastRow = .Cells(Rows.Count, 2).End(xlUp).Row
DataBase = .Range(.Cells(6, 2), .Cells(LastRow, 17)).Value
End With
MsgBox "最初のインデックスは" & LBound(DataBase) & vbCrLf & _
"最後のインデックスは" & UBound(DataBase)
End Sub
実行してみると、
となります。
それでは、前回作成したBuhinknskプロシージャの説明をしていきます。
Buhinknskプロシージャ説明
For i = LBound(DataBase) To UBound(DataBase) 'DataBaseの最初~最後のインデックスまでぶん回すぜ!! ヒーハー!!
If DataBase(i, 5) Like "*" & TextBox1.Value & "*" Then 'DataBase5列目がLikeに引っ掛かった場合
cn = cn + 1 'カウントするよ
End If
Next i
↑この部分は、DataBaseの最初のインデックス番号から、
最後のインデックス番号までFor文でぶん回して、
DataBase5列目のデータでLike演算子に引っ掛かった数を数えています。
ReDim
・Re レェィ
Reは、『再び』という意味みたいです。
ReDim(Dimension)つまり、再び次元を変えるよってことで、
配列変数の要素数を変更する時に使います。
If cn = 0 Then 'カウントが0の場合
ReDim KnskData(0) 'KnskDataの要素数を0に変更
KnskData(0) = "NoData"
Exit Sub
↑この部分は、Like演算子に引っ掛かった数が0だった場合、
KnskDataの要素数を0に変更し、KnskDataの要素0にNoDataを入れて処理を抜けています。
Like演算子に引っ掛かった数が0だった場合、リストボックスにNoDataを表示させています。
『つーか要素数0なら、普通の変数でいいんでない?』
と思ったあなた、イイね!! だが、ダメなんだ(笑)
(# ゚Д゚)『Listは配列形式じゃないとゆるさん!!インデックスねーだろ!!』ってことです。
通常は、1つのデータを登録する場合ListBox1.AddItemを使用します。
AddItem?の方はこちら→【VBA在庫管理#09】
インデックスが付いていれば、配列変数となるようなので
0のインデックスを付けています。
↓こんな感じ
oRe『お代官様(VBA)、こちらインデックス0をつけた配列変数で御座います。ヒッヒッヒッ』
VBA『越後谷(oRe)、そちもワルよの~。グフフフフ』
Else 'カウントが0じゃない場合
ReDim KnskData(1 To cn, 1 To 5) 'KnskDataの要素数を二次元配列に変更 行は1~cn分 列は1~5
cn = 0 'カウントリセット
For i = LBound(DataBase) To UBound(DataBase) 'もう1回ぶん回すぜ!! Heehaw!!
If DataBase(i, 5) Like "*" & TextBox1.Value & "*" Then
cn = cn + 1 'カウントするよ
KnskData(cn, 1) = DataBase(i, 1) '部品管理№
KnskData(cn, 2) = DataBase(i, 2) 'バーコード
KnskData(cn, 3) = DataBase(i, 3) 'メーカー
KnskData(cn, 4) = DataBase(i, 4) '品名
KnskData(cn, 5) = DataBase(i, 5) '型式
End If
Next i
End If
↑この部分は、Like演算子に引っ掛かった数が0じゃなかった場合、
KnskDataの要素数の行(インデックス)を1からカウントした分に変更し、列を1~5列に変更。
そんで、もう1回ぶん回してDataBase5列目のデータで、
Like演算子に引っ掛かった行(インデックス)の1~5列を
KnskDataにぶっこんでリストボックスに表示させています。
まとめ
最初のインデックス番号
LBound(arrayname [ ,dimension ] )
最後のインデックス番号
UBound(arrayname [ ,dimension ] )
次回 OptionButtonを使ってみるよ
コメント