• 締切済み

検索用フォームで数値型データを抽出する方法

tossy005の回答

  • tossy005
  • ベストアンサー率38% (7/18)
回答No.2

>表示用フォームに表示される契約年数フィールドには,算術演算子は使っていません。単純に2とか18とか数値型のデータが入力されています。検索用のフォームで抽出するときにのみ,算術演算子を利用したいのですが,上記の回答で可能でしょうか。 >について,「値を取得するテキストボックス」とは,当然,データの入力されている表示用フォーム(つまり,そのレコードソースであるクエリ1)の中のデータの半角全角スペースを置換したり,算術演算子を探すということですか? 「値を取得するテキストボックス」とは契約年数の抽出条件を書き込むテキストボックスになります。 「 > 3」などを書き込むテキストボックスになります。 プログラムの処理の流れをみると、 最終的にはOpenFormでフォームを開いていることが分かります。 DoCmd.OpenForm "frm_顧問先CARD", , , StrWhr ↑の部分です。 OpenFormには引数がいくつかありますが、ここで重要なのはStrWhrです。 OpenFormの第4引数であるStrWhrには、どのような条件でフォームの内容を表示するのか、という条件式が入ります。 条件式とは フィールド名(半角スペース)比較演算子(半角スペース)値 というものです。 例えば、今回の場合でいえば 契約年数 > 3  という具合です。 ※今回は契約年数が数値型ですので3でよいですが、文字列型などを比較する場合は'3'になります また、条件が複数ある場合は 1つ目の条件式(半角スペース)AND(半角スペース)2つ目の条件式 などになります。 ※検索する条件によっては、ANDはORになったりもしますが、今回の場合はANDでよいでしょう。 このプログラムでは、メッセージボックスが表示されるまでの間に、StrWhrという文字列型の変数にこの条件式を作成しています。 よって、契約年数の条件を記入するテキストボックスに「 > 3」や「 = 3」などが入るか、または「>3」などが入ったとしてもプログラムで「 > 3」などに変えてAに入れればよいわけです。 例えば、"契約年数" & A を "契約年数 " & A にすれば「半角スペース>半角スペース3」の1つ目の半角スペースを省略できますね。 条件式やクエリには半角スペースが必要不可欠ですので、 お気をつけてご作成下さい。

0304arabia
質問者

補足

すみません。きっと,分かる人から見たらものすごく分かりやすく説明してあるのでしょうが…。 見限らないで再度教えていただきたいのですが, 前回,教えていただいた回答と今回教えていただいた回答について,拙い頭をフル回転させて,何度も読み返しました。 >(1)テキストボックスの値を取得し、半角全角スペースを削除します。  単純にやるならReplace関数で半角全角スペースを""に置換 について, If Nz(Me!契約年数, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "契約年数" & A End If の次に Me.契約年数 = Replace(契約年数, " ", "") と記述するので良いのでしょうか。以下の(2)から(4)に至っては,その記述方法すら良く分かりません。もし,よろしければ,記述コードを教えていただけると助かります。そんなの自分で調べて,ということであれば,私の頭では理解できないので,この検索方法はあきらめます。 大変,申し訳ありませんが,再度ご教示をお願いいたします。 >(2)算術演算子(=,>=,<=,>,<)を(1)の結果から探します。  例題の書き方をルールとするならば1回探せばOK。Instr関数などを使って探しましょう。 (3)算術演算子の前と後ろのデータを取得します。  Split関数で(1)の結果を第一引数、(2)でヒットした算術演算子を第二引数として適当なString型の配列(ここでは仮にstr()とします)で戻り値を取得します。 (4)(3)の結果が""がどうかをチェックします。  str(0)には算術演算子の前の値、str(1)には算術演算子の後ろの値が入っています。例題でいうところの「>12」なのか「4<8」なのかをこれでチェックします。

関連するQ&A

  • アクセス検索用フォームでの完全一致検索

    いつも大変お世話になっております。ACCESS初心者ですが,宜しくお願いします。 テーブルAを元にクエリAを作成し,クエリAをレコードソースとしてフォームAを作成しています。フォームAのレコードを検索するのに検索用フォームBを作成しました。検索用フォームBは,フォームAと全く同じデザインで,レコードソースのみ空にしてあります。項目は,氏名,住所,金額,契約締結日,業種分類等20個ほどあり,それぞれ検索するために20個分の非連結のテキストボックスを配置しています。また,検索条件を表示させるためのコマンドボタンを一つ配置しています。コマンドボタンには,以下のVBAを記述しています。 Private Sub 検索実行_Click() On Error GoTo エラー処理 Dim StrWhr As String 'Where条件式 Dim StrMsg As String '表示メッセージ Dim StrSrc As String 'レコードソース Dim stDocName As String '表示用フォームの名前 If Nz(Me!氏名, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "氏名 Like '*" & Me!氏名 & "*'" End If If Nz(Me!住所, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "所在地 Like '*" & Me!所在地 & "*'" End If    If Nz(Me!金額, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "金額 = " & Me!金額   End If If Nz(Me!契約締結日, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "契約締結日 Like '*" & Me!契約締結日 & "*'" End If If Nz(Me!業種分類, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "業種分類 = " & Me!業種分類 End If If StrWhr = "" Then StrSrc = "Select * From [qry_○○] Order By ○○;" Else StrSrc = "Select * From [qry_○○] Where " & StrWhr & " Order By ○○;" End If If MsgBox(StrMsg, vbOKCancel, "確認") = vbOK Then DoCmd.OpenForm "frm_○○", , , StrWhr Forms("frm_○○").RecordSource = StrSrc End If 終了処理: Exit Sub エラー処理: MsgBox Err & Error$, , Me.Name & " 検索実行" Resume 終了処理 End Sub このうち,氏名,住所,金額に関しては,問題なく検索できますが,契約締結日及び業種分類について検索することができません。 (1)契約締結日に関しては,契約締結日その日のみではなく,指定した契約締結日以前のレコード全てや,期間を指定してレコードを抽出したいのですが,可能でしょうか。 例えば,契約締結日のテキストボックスに >2008.8.1と入力した場合に,2008.8.1以前に契約を締結した全部のレコードを抽出したり, 2008と入力した場合に,2008(年)に契約締結した全レコードを抽出できることが希望です。 (2)業種分類については,コンボボックスからデータを選択して検索するようになっていますが,検索実行をクリックすると,パラメーターの入力画面が表示され,適当な値を入力しても正しい抽出結果が表示されません。 おそらく,以前に教えていただいた StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "○○ = " & Me!○○ の構文が数値型の完全一致検索の構文のためだと思われます。テキスト型の完全一致検索の構文を教えて下さい。 拙い質問で恐縮ですが,補足等いたしますので,宜しくお願いいたします。

  • Accessの検索フォーム作成で。

    Access2000です。 一覧テーブルは ・名前 ・項目1 ・評価1 ・項目2 ・評価2 となっていて、 山田太朗  | タバコのポイ捨てはしない  | 5 | 10分前行動 | 4 | 前田前   | 交通ルールを守る      | 5 | 挨拶をする  | 4 | 大坪拳   | 10分前行動        | 4 | 挨拶をする  | 5 | のようになっています。 これをもとに「検索フォーム」をデザインフォームで、 名前   [     ] 項目1  [     ] 項目2  [     ] 項目3  [     ] と作成し、「検索」というボタンを押すと、「検索結果フォーム」に検索結果が出るようにしました。 検索ボタンは Private Sub コマンド9_Click() Dim SQL As String Dim WhereCond As String Dim condName As String Dim condKoumoku1 As String Dim condKoumoku2 As String Dim condKoumoku3 As String WhereCond = "" '名前 If Me!名前.Value <> "" Then condName = "(一覧.名前 like '*" & Me!名前.Value & "*')" WhereCond = WhereCond & " and " & condName End If '項目1 If Me!項目1.Value <> "" Then condKoumoku1 = "(一覧.項目1 like '*" & Me!項目1.Value & "*')" WhereCond = WhereCond & " and " & condKoumoku1 End If : WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "検索結果フォーム", acNormal, , WhereCond End Sub となっています。 そこで、検索フォームで 項目に検索値を入れた場合、一覧の項目すべての中から検索できるようにするにはどうしたらいいのでしょうか? また、今の状態ですとand検索ですが、or検索するにはどのようにしたらいいでしょうか?

  • 検索フォームで検索するものが決まっているときのかきかた。

    Ac2000です。 T_マスタというテーブルに 名前や所属の課、年度などが入っています。 このTマスタから検索する検索フォームがあります。 検索ボタンがいくつかあり、 年度を検索するようにテキストボックスがあります。 年度テキストボックスにいれた年度で検索しつつ、 押した検索ボタンによって検索する方法はどのようにしたらよいでしょうか? Ex.検索ボタンには所属の課などがかいてあり、「総務」「営業」などどかいてあります。 ソースはこんな感じです。 ------------------------------ Dim SQL As String Dim WhereCond As String Dim condNendo As String '年度 If Me!年度.Value <> "" Then condNendo = "(T_マスタテーブル.年度 = " & CLng(Me!年度.Value) & ")" WhereCond = WhereCond & " AND " & condNendo End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenReport "R_マスタ_一覧", acPreview, , WhereCond End Sub

  • クエリの抽出結果がフォームに表示できない

    ACCESS2010を使用しています。 フォーム画面で、選択クエリのデータをコンボボックスで選択し結果を表示させ、その後エクセル形式でエクスポートしたいと思っています。 選択結果をエクセル形式でエクスポートはうまくいくのですが、フォーム画面には表示がされません。 Q_名簿では 授業名のフィールドに抽出条件として [Forms]![F_名簿表示画面]![combo1] としています。 また、コンボボックスで選択した後にフォームに表示させるコマンドボタンは下記のように記述しています。 この記述でフォームに表示がされなくて困っています。 Private Sub cmd名簿_Click() 'コンボボックス値指定→検索 Dim stList As String Dim stFil As String '[授業名]を指定 If combo1 <> "" Then stFil = "[授業名]='" & combo1 & "'" End If Me.Filter = stFil Me.FilterOn = True End Sub どうすればフォームに表示がされるでしょうか。 ご指導の程お願いいたします。

  • フォーム上のフィルタで抽出されたデータをテーブルに格納したい

    フォーム上のフィルタで抽出されたデータをテーブルに格納したい 度々お世話になります。 フォーム上で3つのキーワードを使って抽出したデータを テーブルに格納したいと思っています。 以下のコードを書いたところ、矢印の部分でエラーが起こります。 お知恵を拝借できませんでしょうか? よろしくお願いいたします。 Private Sub cmd04_Click() Dim db As DAO.Database Set db = CurrentDb() Dim mySQL As String mySQL = "INSERT INTO 04_パソコン機器管理台帳 select * FROM T05_使用者一覧抽出結果 WHERE " & Me.Filter & ";" If MsgBox("該当レコードを追加します。", vbYesNo) = vbYes Then ' SQLを実行します。 db.Execute mySQL   ←エラーが発生します。 MsgBox "該当レコードを追加しました。" End If End Sub

  • Accessフォームでの複数条件検索

    検索用テキストが4つとコンボボックスが1つあり、検索ボタンというコマンドボタンを押すと 該当するレコードを表示させるフォームを作りました。 以下がそのVBAです。 Private sub 検索ボタン_click() Dim strfilter As String, strexp As String, aryope As Variant If Not IsNull (me.一) Then strfilter = "And 出版社 Like '*" & Me.一 & "*'" End If If Not IsNull (me.コンボ62) Then strfilter = "And 種類 Like '*" & Me.コンボ62 & "*'" End If If Not IsNull (me.三) Then strfilter = "And 番号 Like '*" & Me.三 & "*'" End If If Not IsNull (me.四) Then strfilter = "And 発刊日 = # " & Format (me.四. "yyyy-mm-dd") & "#" End If If Not IsNull (me.一) Then strfilter = strfilter & " AND " & BuildCritera ( "タイトル", dbText, "*" Replace ( me.五, "", "*AND*") & "*") End If 改正したいことは   1. 検索用テキストボックスに入力された値全てを満たすレコードを表示したい(現在は例えば     出版社、タイトル、番号の3つを入力するとそれぞれの項目にヒットする物がすべて検出さ     れる)   2. テキストボックス[三]の番号は完全一致で抽出したい(26を抽出したいのに126や2673     等も抽出されてしまう)   3. テキストボックス[四]の発刊日は西暦表示から和暦で入力して検索したい     (テキストボックス[四]をコンボボックスに変え、西暦・和暦両方表示にし、[四A]を追加して     月日という名前にしてこれら年月日をくっつけて完全一致で検索する方法を考えましたが     記述がわかりません)   5.タイトルがWeb検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • アクセスのフォームで数値型の複数検索のについて

    アクセスのフォームで検索ボタンを設置して複数検索をしています。 下記の状態でうまくいってたのですが、依頼でまた一つ検索項目が追加になりました。 追加になった項目は数値型で”を抜いたりしたのですがうまく検索できません。 どうすればうまくいくか教えて下さい。 今のコードは以下の通りです。 Private Sub 検索ボタン_Click() Dim L1 As String If Nz(Me.品名検索, "") <> "" Then L1 = L1 & " AND 品名 Like '*" & Me.品名検索 & "*'" End If If Nz(Me.採取日検索, "") <> "" Then L1 = L1 & " AND 採取日 = #" & Me.採取日検索 & "#" If Nz(Me.数値検索, "") <> "" Then L1 = L1 & " AND 数値 = " & Me.数値検索 End If End If If L1 <> "" Then L1 = Mid(L1, 6) Me.Filter = L1 Me.FilterOn = True Else Me.Filter = L1 Me.FilterOn = False End If End Sub 数値の部分が数値型の新たな検索です。 宜しくお願い致します。

  • アクセスのフォームで

    アクセスのフォームで、品番一覧というテーブルを基にした、F品番一覧というフォームがあります。 ヘッダー部に検索するコンボボックスがあり、品番一覧テーブルの品番を参照しています。 検索ボタンを押すと、コンボボックスの内容に当てはまるものが、フォームの詳細部に一覧として表示させる様にしたのですが、品番に"50#1"や"50#2"という#を使い、1と2を分けている物があるのですが、コンボボックスで、この#が付いた物で検索すると検索結果がなにも表示されません。#が付いていない物はちゃんと一覧が表示されます。 #が付いている場合でもちゃんと表示するにはどの様にしたら良いですか?テーブル側の#を取り除く事はできません。 検索ボタンのコードは Private Sub 検索_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsNull(Me.txt氏名) Then strFilter = strFilter & " AND 品番 Like *" & Me.品番一覧 & "*" End If Me.Filter = Mid(strFilter, 5) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If となっています。 うまく説明できなくてすいませんが、誰か教えて頂けませんか? よろしくお願いします。 End Sub

  • サブフォーム用のテーブルのデータで検索をしてマスタフォームに表示したい。

    Access2000での質問です。 T_マスタ(氏名ID・氏名)・T_サブ(氏名ID・データ年・データ種類)というテーブルから F_マスタ・F_サブというフォームを作成し、 F_マスタの中にサブフォームとしてF_サブを入れています。(氏名IDでリンク) F_検索というフォームを作成し、 データ年・データ種類で検索するようにしました。 この結果を、F_マスタで表示したいのですが、 F_マスタはT_マスタから作成されているため、検索結果が 希望するものではなくなってしまいます。 F_サブでみればきちんと検索されているのですが、 それでは氏名がみれないので。。。 このようなことはできるのでしょうか? F_検索の検索ボタンのコードです。 ------- Private Sub コマンド1_Click() Dim SQL As String Dim WhereCond As String Dim condNendo As String Dim condSyurui As String 'データ年 If Me!データ年.Value <> "" Then condNendo = "(T_サブ.データ年 like '*" & Me!データ年.Value & "*')" WhereCond = WhereCond & " AND " & condNendo End If '種類 If Me!データ種類.Value <> "" Then condSyurui = "(T_サブ.データ種類 like '*" & Me!データ種類.Value & "*')" WhereCond = WhereCond & " AND " & condSyurui End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "F_サブ", acNormal, , WhereCond End Sub ------- *上記の「F_サブ」を[F_マスタ」で開くようにしたいのです。 宜しくお願いします。

  • エクセルVBAのユーザーフォームにセルデータを

    Excel2007を使っています。 VBA初心者ですがユーザーフォームのテキストフォームにエクセル内のセルデータを表示させたいと考えています。 以下のコードをユーザーフォームのコードに書いてユーザーフォームを走らせましたがユーザーフォームは表示するのですがデータがまったく表示されません。 どなたかご教授いただけませんでしょうか。 Sub Farst() Dim Data1 As String Dim Data2 As String Dim Data3 As String Dim Data4 As String Dim Data5 As String Dim Data6 As String Dim Data7 As String Dim Data8 As String Dim Data9 As String Dim Data10 As String Dim ActiveRow As String ActiveRow = 4 With Worksheets("MDH,MDO") Data1 = .Cells(ActiveRow, 1) Data2 = .Cells(ActiveRow, 2) Data3 = .Cells(ActiveRow, 3) Data4 = .Cells(ActiveRow, 4) Me.TextBox1連番.Text = Data1 Me.TextBox2品番.Text = Data2 Me.TextBox3品番2.Text = Data3 Me.TextBox4品番3.Text = Data4 End With End Sub