Microsoft Access 掲示板

年月で期間抽出コード / 13

16 コメント
views
4 フォロー
13
hiroton 2023/11/13 (月) 17:51:29 0d37e@f966d

ただ、元の質問をみると、「年」と「月」でコンボボックスを分けるのはあんまり望んでなさそうですよね

テーブル構造で「年」「月」分けた場合でも、コンボボックスのSQLでユーザー選択用に「年月」表記にして、コンボボックスは一つにしてもいいと思います

SELECT 年 & "/" & Format(月,"00") AS 年月 , 年, 月

これで、コンボボックスの列数プロパティを「3」にすると、フォーム上の表記は「yyyy/mm」形式で、コードでは2列目、3列目を参照して「年」「月」のデータを直接使えるようになります

範囲の開始用を「cmb期間開始」、終了用を「cmb期間終了」とすることにして

    Dim strFilter As String
    Dim 開始年 As Long
    Dim 開始月 As Long
    Dim 終了年 As Long
    Dim 終了月 As Long
    
    'データチェック
    If IsNull(Me!cmb期間開始) Or IsNull(Me!cmb期間終了) Then Exit Sub
    
    開始年 = Me!cmb期間開始.Column(1)
    開始月 = Me!cmb期間開始.Column(2)
    終了年 = Me!cmb期間終了.Column(1)
    終了月 = Me!cmb期間終了.Column(2)
    
    '範囲開始
    strFilter = strFilter & " AND NOT 年<" & 開始年
    strFilter = strFilter & " AND NOT (年=" & 開始年 & " AND 月<" & 開始月 & ")"
    '範囲終了
    strFilter = strFilter & " AND NOT (年=" & 終了年 & " AND 月>" & 終了月 & ")"
    strFilter = strFilter & " AND NOT 年>" & 終了年
    
    Me.Filter = Mid(strFilter, 6)

コンボボックスの列指定まで入れるとコードが見にくくなるので、それらもそれぞれ変数に置くようにすると、SQL構築部分もすっきりしていいんじゃないかと思います

まぁ、どこまで細かく記述するか?は慣れと好みでいいところではあります

通報 ...