- 締切済み
ACCESSの条件分岐のVBAで教えてください
ACCESSVBAについて教えてください。初心者です。 フォームにコンボボックスAがあり、選択した条件によってクエリの 【結果】フィールドに反映させたいです。 ≪条件≫------------------------------------------------------------------ 【テーブルA】 【職員ID】【名前】 【部署】【勤続年数】【趣味】 【特技】【結果】 001 やまだ 営業部 13年 ゴルフ ゴルフ 003 たなか 経理部 7年 004 さとう 営業部 5年 マラソン ゴルフ 005 よしだ 人事部 13年 ゴルフ ゴルフ 006 いだ 情報部 13年 ゴルフ ゴルフ 007 まきの 情報部 13年 ゴルフ ゴルフ ------------------------------------------------------------------ ・フォームのコンボボックス「A」= ’○ ’が選択されている場合 ・条件 【部署】=”営業部”かつ 【勤続年数】=”11年以上”かつ【趣味】=”ゴルフ”だった場合は ’◎’ 【部署】=”情報部”かつ 【趣味】=”ゴルフ”だった場合は ’△’ 【勤続年数】=”5年以上”かつ【特技】=”マラソン”だった場合は’△’ 【勤続年数】=”5年以上”かつ【趣味】=” ”だった場合は’×’ ※上記の条件以外のコンボボックスAで選択されている’○’になるようにしたい。 条件が被った場合は、’E’にします。 フォーム内にある『実行』ボタンを押下すると ↓ ------------------------------------------------------------------ 【テーブルA】 【職員ID】【名前】 【部署】【勤続年数】【趣味】 【特技】【結果】 001 やまだ 営業部 13年 ゴルフ ゴルフ ◎ 003 たなか 経理部 7年 × 004 さとう 営業部 5年 マラソン ゴルフ △ 005 よしだ 人事部 13年 ゴルフ ゴルフ ○ 006 いだ 情報部 13年 ゴルフ ゴルフ △ 007 まきの 情報部 13年 ゴルフ ゴルフ △ ------------------------------------------------------------------ 似たようなYAHOO知恵袋もあり、試したのですがうまく実行できず、わからなかったです。 ご教授、宜しくお願いします
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【バグ報告】 =Mid("◎△△×EEEEEEEE○",InStr(1,"||||1000|0100|0010|0001|1100|0110|0011|1110|1101|1011|0111|1111|0000",[判定])\5,1) Eが何個か不足。 1100 0110 0011 1010<-欠落 0101<-欠落 1001<-欠落 70近い爺のやること。バグ取りは宜しく。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:3は、MId()でもOK! =Mid("◎△△×EEEEEEEE○",InStr(1,"||||1000|0100|0010|0001|1100|0110|0011|1110|1101|1011|0111|1111|0000",[判定])\5,1)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:考え方 1、判定を "1000"、"0100"等へ変換するには? ・論理式<[部署]='営業部' And [勤続年数]>10 And [趣味] & ""='ゴルフ')>の値が0、-1であることを知る。 ・Abs()で0と1とに変換する。 ・Trim()は必須ではない。 =Abs([部署]='営業部' And [勤続年数]>10 And [趣味] & ""='ゴルフ') & _ Abs([部署]='情報部' And [趣味] & ""='ゴルフ') & _ Abs([勤続年数]>4 And [趣味] & ""='マラソン') & _ Abs([勤続年数]>4 And Len([趣味] & "")=0) でもOK! 2、判定結果を1,2,3に変換するには? ? Instr(1,"||||1000|0100|0010|0001", "1000") 5 ? Instr(1,"||||1000|0100|0010|0001", "0100") 10 Instr()の戻り値を5で除した商が求める値。 3、求めた値を記号に変換するには? ? CutStr("A|B|C", "|", 1) A ? CutStr("A|B|C", "|", 2) B と、CutStr関数を使う。 ? CutStr("A or B or C", " or ", 1) A なお、CutStr関数の区切子は文字列であっても構いません
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
質問者の目的は、テキストボックスのコントロールソースに式を書くだけで達成できます。添付図では、式を一気に完成させるのではなく二段構えで完成させています。 まず、それぞれの判定結果を'0'と'1'とに変換してアペンドして4桁の文字列を生成しています。次に、その4桁の文字列を1,2,3・・・nの数字に変換。後は、CutStr関数を利用して数字を記号に変換します。 ?CutStr(=CutStr("◎|△|△|×|E|E|E|E|E|E|E|E|○", ,"|",1) ◎ ?CutStr(=CutStr("◎|△|△|×|E|E|E|E|E|E|E|E|○", ,"|",2) <<標準モジュールに登録>> Public Function CutStr(ByVal Text As String, _ ByVal Separator As String, _ ByVal N As Integer) As String Dim strDatas() As String strDatas = Split("" & Separator & Text, Separator, , 0) CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function 【判定】 =Trim(Abs([部署]='営業部' And [勤続年数]>10 And [趣味] & ""='ゴルフ')) & _ Trim(Abs([部署]='情報部' And [趣味] & ""='ゴルフ')) & _ Trim(Abs([勤続年数]>4 And [趣味] & ""='マラソン')) & _ Trim(Abs([勤続年数]>4 And Len([趣味] & "")=0)) 【判定結果】 1000 0100 0010 0001 1100 0110 0011 1110 1101 1011 0111 1111 0000 【最終式】 =CutStr("◎|△|△|×|E|E|E|E|E|E|E|E|○", "|", Instr(1,"||||1000|0100|0010|0001|1100|0110|0011|1110|1101|1011|0111|1111", [判定]) \ 5) 後は、iif()を使って、コンボボックスの値による制御を行えば完成です。