■必須項目ではないが、順番に飛ばさず入力する必要のあるものの空欄チェック方法
※このページの一番下に部品化したコードあり
Sub chkSkipBlank() '------------------------------------------------------------- '機能:必須項目ではないが、途中を飛ばさずに順番に入力が必要な ' コンボボックスの空欄チェック '------------------------------------------------------------- Dim arrayNum() As Integer '動的配列を宣言 Dim i As Integer 'コンボボックス名の番号部分 Dim k As Integer '配列の要素番号 Dim LastItemNum As Integer '配列の最後に格納されている番号 Dim arrayMaxNum As Integer '配列インデックスの最大値 Dim allBlankFlag As Boolean '全て空の場合のフラグ 'フラグの初期化(全て空欄の場合True,一つでも入力があればFalse) allBlankFlag = True k = 0 '「テスト用」フォーム内のコンボボックス「cmb_Test1」から「cmb_Test4」まで空欄チェック With Forms("テスト用") For i = 1 To 4 'コンボボックスの値が空欄以外なら配列にコンボボックス名の数値部分を格納 If .Controls("cmb_Test" & i) <> "" Then allBlankFlag = False k = k + 1 ReDim Preserve arrayNum(k) arrayNum(k) = i End If Next End With If allBlankFlag = True Then MsgBox "全て空欄" Else '配列の最後の要素に格納された数値を取得 LastItemNum = arrayNum(UBound(arrayNum)) '配列のインデックスの最大値を取得 arrayMaxNum = UBound(arrayNum) Debug.Print "配列の最後の要素:" & LastItemNum Debug.Print "配列インデックスの最大値:" & arrayMaxNum '配列の要素の最後に格納された数値と配列インデックスの最大値の数値が一致していない場合は '途中のコンボボックスを飛ばして入力していると判定 If LastItemNum <> arrayMaxNum Then MsgBox "コンボボックスは途中を飛ばさずに順番に入力してください" Debug.Print "コンボボックスは途中を飛ばさずに順番に入力してください" Else MsgBox "入力OK" Debug.Print "入力OK" End If End If End Sub
■部品化
呼び出し元プロシージャ
Sub テスト() Dim Result As Boolean Result = fncChkSkipBlank("テスト用", "cmb_Test", 4) MsgBox Result End Sub
Functionプロシージャ
Function fncChkSkipBlank(strFormName As String, strControlName As String, intControlMaxNum As Integer) As String '--------------------------------------------------------------------------- '機能:必須項目ではないが、途中を飛ばさずに順番に入力が必要な ' コンボボックスやテキストボックス等の空欄チェック '引数1:対象フォーム名 '引数2:数値部分を除いたコントロール名 (例)「txb_Name1」~「txb_Name4」 ' を調べたい場合は「txb_Name」までを引数で渡す '引数3:確認したいコントロールの個数(例)「txb_Name1」~「txb_Name4」 ' を調べたい場合は「4」を引数で渡す '戻り値:全て空欄の場合は「全て空欄」 ' 飛ばして入力している場合は「NG」 ' 順番に入力している場合は「OK」 '---------------------------------------------------------------------------- Dim arrayNum() As Integer '動的配列を宣言 Dim i As Integer 'コントロール名の番号部分 Dim k As Integer '配列の要素番号 Dim LastItemNum As Integer '配列の最後に格納されている番号 Dim arrayMaxNum As Integer '配列のインデックスの最大値 Dim allBlankFlag As Boolean '全て空の場合のフラグ 'フラグの初期化(全て空欄の場合True,一つでも入力があればFalse) allBlankFlag = True k = 0 '指定されたフォーム内の対象コントロールの個数分の空欄チェック With Forms(strFormName) For i = 1 To intControlMaxNum 'コントロールの値が空欄以外なら配列にコントロール名の数値部分を格納 If .Controls(strControlName & i) <> "" Then allBlankFlag = False k = k + 1 ReDim Preserve arrayNum(k) arrayNum(k) = i End If Next End With If allBlankFlag = True Then fncChkSkipBlank = "全て空欄" Else '配列の最後の要素に格納された数値を取得 LastItemNum = arrayNum(UBound(arrayNum)) '配列のインデックスの最大値を取得 arrayMaxNum = UBound(arrayNum) Debug.Print "配列の最後の要素:" & LastItemNum Debug.Print "配列のインデックスの最大値:" & arrayMaxNum '配列の要素の最後に格納された数値と配列のインデックスの最大値の数値が一致していない場合は '途中のコントロールを飛ばして入力していると判定 If LastItemNum <> arrayMaxNum Then fncChkSkipBlank = "NG" Else fncChkSkipBlank = "OK" End If End If End Function