• 締切済み

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

tossy005の回答

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

ユーザーがシステムの中をわかっている、かつ1つの比較でいいのなら If Nz(Me!契約年数, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "契約年数" & A End If ※Aには>3や=3などテキストボックスの値が入ります で済むでしょうが、そうもいかないでしょうから"契約年数" & Aの部分を工夫する必要があります。 ■1つのテキストボックスで行う場合 (1)テキストボックスの値を取得し、半角全角スペースを削除します。  単純にやるならReplace関数で半角全角スペースを""に置換 (2)算術演算子(=,>=,<=,>,<)を(1)の結果から探します。  例題の書き方をルールとするならば1回探せばOK。Instr関数などを使って探しましょう。 (3)算術演算子の前と後ろのデータを取得します。  Split関数で(1)の結果を第一引数、(2)でヒットした算術演算子を第二引数として適当なString型の配列(ここでは仮にstr()とします)で戻り値を取得します。 (4)(3)の結果が""がどうかをチェックします。  str(0)には算術演算子の前の値、str(1)には算術演算子の後ろの値が入っています。例題でいうところの「>12」なのか「4<8」なのかをこれでチェックします。 (5)(4)の結果、どちらかが""ならば"契約年数" & Aは"契約年数" & 算術演算子 & ""でない値になります。  両方とも""でないならば"契約年数" & Aは"契約年数" & 算術演算子 & 前の値 & "AND 契約年数" & 算術演算子 & 後ろの値になります。  ただし、テキストボックスの書き方によって算術演算子を工夫しないといけません。  (4<8と8>4は同じことですが、前の場合は>と<、後ろの場合は<と>、また>3と3<も同じことですが、前の場合は>、後ろの場合も>という具合に算術演算子を変えないといけないということです)  

0304arabia
質問者

補足

丁寧なご回答ありがとうございます。誰からもお返事をいただけないかと思いビクビクしていたのでとても嬉しかったです。 さて,回答の中で不明な点があります。 表示用フォームに表示される契約年数フィールドには,算術演算子は使っていません。単純に2とか18とか数値型のデータが入力されています。検索用のフォームで抽出するときにのみ,算術演算子を利用したいのですが,上記の回答で可能でしょうか。 If Nz(Me!契約年数, "") <> "" Then StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "契約年数" & A End If としたところ,フィルタのかかった状態のデータが表示用フォームに抽出されますが,<3と入力しても3年以上の契約年数のデータも抽出されてしまいます。 >■1つのテキストボックスで行う場合 >(1)テキストボックスの値を取得し、半角全角スペースを削除します。 > 単純にやるならReplace関数で半角全角スペースを""に置換 >(2)算術演算子(=,>=,<=,>,<)を(1)の結果から探します。 > 例題の書き方をルールとするならば1回探せばOK。Instr関数などを >使って探しましょう。 について,「値を取得するテキストボックス」とは,当然,データの入力されている表示用フォーム(つまり,そのレコードソースであるクエリ1)の中のデータの半角全角スペースを置換したり,算術演算子を探すということですか?そうだとしたら,表示用フォームに入力されているデータは数値なので半角全角スペースや算術演算子はありません。 私の理解が未熟なのだと思いますが,どうしたらよいか分かりません。お手数ですが,さらなるご回答をお願いします。

関連する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