Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2016)
フォーム上での複数検索
投稿日時: 21/07/02 11:15:53
投稿者: vaioyuki

いつもお世話になっております。
 
今、Accessにて仕訳帳を作成しています。
リストには
ID ⇒ オートナンバー
日付 ⇒ 仕分けの日付
処理日 ⇒ 入力日(=date()で自動)
得意先CD ⇒ 短いテキスト
借方CD ⇒ 短いテキスト
貸方CD ⇒ 短いテキスト
金額 ⇒ 通貨
になっています。
 
フォームヘッダーに検索用のテキストボックスを配置しています。
こちらで勘定科目が借方にも貸方にもあるものを出したいのです。
コンボボックスとして「c_勘定科目」としているのですがもしかして貸方用にも必要かと思い、不可視で「txt_勘定科目」を作り「=[c_勘定科目]」としています。
 

Private Sub B_検索2_Click()
    Dim strFilter As String, strExp As String, aryOpe As Variant

    If txt_日付1 <> "" Then
        If Not IsDate(Me.txt_日付1) Then
            MsgBox "日付ではありません。"
            Me.txt_日付1.SetFocus
        End If
    End If
    
    If txt_日付2 <> "" Then
        If Not IsDate(Me.txt_日付2) Then
            MsgBox "日付ではありません。"
            Me.txt_日付2.SetFocus
        End If
    End If

    If Not IsNull(Me.txt_日付1) Then
        strFilter = strFilter & " AND 日付 >= #" & Nz(Me.txt_日付1) & "#"
    End If

    If Not IsNull(Me.txt_日付2) Then
        strFilter = strFilter & " AND 日付 <= #" & Nz(Me.txt_日付2) & "#"
    End If

    If Not IsNull(Me.c_勘定科目) Then
        strFilter = strFilter & " AND " & BuildCriteria("借方勘定科目コード", dbText, Me.c_勘定科目)
    End If

    If Not IsNull(Me.txt_勘定科目) Then
        strFilter = strFilter & " AND " & BuildCriteria("貸方勘定科目コード", dbText, Me.c_勘定科目)
    End If
    
    If Not IsNull(Me.c_得意先) Then
        strFilter = strFilter & " AND " & BuildCriteria("得意先コード", dbText, Me.c_得意先)
    End If

    Me.Filter = Mid(strFilter, 6)
    If strFilter = "" Then
        Me.FilterOn = False
    Else
        Me.FilterOn = True
    End If

End Sub

 
出来なくて当然だ!!と思われると思いますが、これだと借方にも貸方にも同じ勘定科目のものしか検索できません。(検索結果ゼロ)
ANDをORにしても「Mid(strFilter, 6)」こちらでひかかります。(3文字と2文字で当たり前なんですけど。。。(^^;)
 
例えば
期間は2012/1/1〜2012/12/31までの勘定科目が売掛金で得意先が●●のもの
のような検索がしたいです。
 
よろしくお願いします。

回答
投稿日時: 21/07/02 11:45:22
投稿者: sk

引用:
借方CD ⇒ 短いテキスト
貸方CD ⇒ 短いテキスト

引用:
コンボボックスとして「c_勘定科目」としている

引用:
こちらで勘定科目が借方にも貸方にもあるものを出したいのです。

引用:
If Not IsNull(Me.c_勘定科目) Then
    strFilter = strFilter & " AND " & BuildCriteria("借方勘定科目コード", dbText, Me.c_勘定科目)
End If
 
If Not IsNull(Me.txt_勘定科目) Then
    strFilter = strFilter & " AND " & BuildCriteria("貸方勘定科目コード", dbText, Me.c_勘定科目)
End If

(修正例 1 )
---------------------------------------------------------------------
 
If Not IsNull(Me.c_勘定科目) Then
    strFilter = strFilter & " AND ((" & BuildCriteria("借方勘定科目コード", dbText, Me.c_勘定科目) & ") OR (" & BuildCriteria("貸方勘定科目コード", dbText, Me.c_勘定科目) & "))"
End If
 
---------------------------------------------------------------------
 
(修正例 2 )
---------------------------------------------------------------------
 
If Not IsNull(Me.c_勘定科目) Then
    strFilter = strFilter & " AND '" & Me.c_勘定科目 & "' In ([借方勘定科目コード],[貸方勘定科目コード])"
End If
 
---------------------------------------------------------------------
 
以上のように書き換えればよろしいのではないかと。

投稿日時: 21/07/02 16:48:23
投稿者: vaioyuki

skさん
 
いつもありがとうございます。
なるほど、修正例1は今の応用?というかとてもわかりました。
修正例2はとてもシンプルで、なるほど IN を使うんだなと勉強になりました。
 
無事に検索結果が表示しました。
ありがとうございました。