このような複雑かつ動的に条件数が変化する抽出は、クエリですると条件式が複雑になってしまい、メンテナンス性が悪くなるのでVBAで条件式を生成してフィルターを掛けるのがおすすめです。
例えば、各コントロール名を下記のようだと仮定して、
チェックボックス chk面積、chk人口、chk従業員
テキストボックス txt面積、txt人口、txt従業員
コンボボックス cmb面積、cmb人口、cmb従業員
サブフォームコントロール sf店舗一覧
コマンドボタン cmd抽出
各コンボボックスの設定
値集合ソース 0.3;"±30%";0.2;"±20%";0.1;"±10%"
連結列 1
列数 2
列幅 0cm
サブフォームのレコードソースには抽出条件は設定しない。
cmd抽出のクリック時のイベントプロシージャに下記のように記述。
Private Sub cmd抽出_Click()
Dim stFilter As String
If chk面積 = True And IsNumeric(Me.txt面積) = True Then
stFilter = stFilter & " And (面積 Between " & Me.txt面積 * (1 - Me.cmb面積) & _
" And " & Me.txt面積 * (1 + Me.cmb面積) & ")"
End If
If chk人口 = True And IsNumeric(Me.txt人口) = True Then
stFilter = stFilter & " And (人口 Between " & Me.txt人口 * (1 - Me.cmb人口) & _
" And " & Me.txt人口 * (1 + Me.cmb人口) & ")"
End If
If chk従業員 = True And IsNumeric(Me.txt従業員) = True Then
stFilter = stFilter & " And (従業員 Between " & Me.txt従業員 * (1 - Me.cmb従業員) & _
" And " & Me.txt従業員 * (1 + Me.cmb従業員) & ")"
End If
Me.sf店舗一覧.Form.Filter = Mid(stFilter, 5)
Me.sf店舗一覧.Form.FilterOn = (stFilter <> "")
End Sub