• 締切済み

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知恵袋もあり、試したのですがうまく実行できず、わからなかったです。 ご教授、宜しくお願いします

みんなの回答

回答No.4

【バグ報告】 =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近い爺のやること。バグ取りは宜しく。

回答No.3

補足:3は、MId()でもOK! =Mid("◎△△×EEEEEEEE○",InStr(1,"||||1000|0100|0010|0001|1100|0110|0011|1110|1101|1011|0111|1111|0000",[判定])\5,1)

回答No.2

補足:考え方 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関数の区切子は文字列であっても構いません

回答No.1

質問者の目的は、テキストボックスのコントロールソースに式を書くだけで達成できます。添付図では、式を一気に完成させるのではなく二段構えで完成させています。 まず、それぞれの判定結果を'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()を使って、コンボボックスの値による制御を行えば完成です。

関連するQ&A