accessの抽出条件で数字の比較をしたい

このQ&Aのポイント
  • サーバのviewテーブルをaccessでODBC接続し、accessからexcelにデータを持ってくる構成があります。
  • accessのHYOHEN_NOというフィールドに対し、クエリ条件をlike "15%"として2015年のデータを抽出しています。
  • HYOHEN_NOフィールドで先頭の2文字が14より大きいものを抽出したいのですが、どの様にしたらよいでしょうか?
回答を見る
  • ベストアンサー

accessの抽出条件で数字の比較をしたい

office2010 サーバのviewテーブルをaccessでODBC接続し、accessからexcelにデータを持ってくる 構成があります。 accessのHYOHEN_NOというフィールドに対し、クエリ条件をlike "15%"として2015年のデータを抽出しています。 最初15%は15*としていたのですが、excelのマクロADOで持ってくる場合は15%とのことで 上記クエリ条件にしています。 来年になると、このフィールドには16-****というデータが入ってきます。 このフィールドは、数字から始まるデータだけでなく、英語から始まるデータも入っています。 HYOHEN_NOフィールドで先頭の2文字が14より大きいものを抽出したいのですが、 どの様にしたらよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

わざわざ関数を作成する必要はありませんが、 自前の関数を作っても似たような処理に なるので、IIF関数の入れ子で処理をしてみます。 中に出てくる「Isnumeric」は数字あるか数値であるか 確認する関数です。 (http://www.accessclub.jp/actips/tips_15.htm) ということで、Access側にクエリを作成するならば、「HYOHEN_NO」の抽出条件に、 IIf(IsNumeric(Left([HYOHEN_NO],2)),IIf(Left([HYOHEN_NO],2)>=14,[HYOHEN_NO])) を入れます。左2文字が数字でかつ14以上の文字列を抽出します。 等号をつけていますので、14を含めてということにしています。 14を含めないのならば、等号をはずすか、等号をそのままに するならば、14を15にしてください。 excel側でSQL文で取得するならば、 SQL文の最後の行が長いので画面上で ずれるかもしれませんが、 strSQL = "SELECT * " & _ "FROM テーブル名 " & _ "WHERE テーブル名.HYOHEN_NO=IIf(IsNumeric(Left([HYOHEN_NO],2)),IIf(Left([HYOHEN_NO],2)>=14,[HYOHEN_NO]));" のようにして、これをレコードセットにします。 たとえば以下のように、 Set rs = New ADODB.Recordset rs.Open strSQL, ActiveConnection:=cn cnはコネクションです。

3620313
質問者

お礼

回答ありがとうございます。 おもい通りの抽出できました。 助かりました。

その他の回答 (1)

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.1

HYOHEN_NOフィールドの先頭の2文字を取得し、それが 14より大きいもので抽出することになります。 HYOHEN_NOフィールドはテキスト型だと思いますので、 取得した先頭2文字を数値変換する必要があります。 Left(HYOHEN_NO,2)で先頭2文字を取得し、更にValを使って 文字列を数値に変換します。 Val(Left(HYOHEN_NO,2)) これよりもっとよい方法があるかもしれませんが、ご参考まで。

3620313
質問者

お礼

回答ありがとうございます。

3620313
質問者

補足

教えていただいた条件を設定して実行すると、 クエリ式'テーブル名.[Val(Left([HYOHEN_NO],2))]'の構文エラー:カンマがありません。 というポップアップエラーが出ます。 構文エラー カンマがありませんの原因をWEBで調べましたが、よく分かりませんでした。 お手数をおかけしましたが、No.2の回答で解決できましたので、これにてクローズさせていただきます。

関連するQ&A

  • [Access]クエリの抽出条件について

    アクセス初心者です。よろしくお願いします。 クエリの抽出条件に別テーブルのフィールドをあいまい検索で入れたいのですが方法がわかりません。 データシートビューには検索したいテーブル(tbl_1)と 検索する文字列が入ったテーブル(tbl_2)の2つを表示させています。 デザイングリッドは検索したいフィールドを表示し、 抽出条件にLike "*[tbl_2]![フィールド名]*"と入れましたが該当するものがあっても表示されないのです。 どうしたらよいでしょうか。ご伝授ください。

  • Access 抽出条件を自動で入力したい

    お世話になります。 マクロもVBAも現在鋭意勉強中の初心者ですが、よろしくお願いします。 取引先から送られてくるテーブルの、とあるフィールドにいつも不要なデータが入っています。 作業は、その不要なデータの削除から取り掛かるのですが、これが何気にめんどくさくて 自動化できないものかと、今回、質問させていただきます。 結果として、       フィールド1 フィールド2 フィールド3 フィールド4 抽出条件        like "a*" または           like "b*"               like "c*"               like "d*"               like "e*" ↑のような状態に、マクロないしVBAを使用し、抽出条件に、上記の文字列を自動で入力することは可能なのでしょうか? また、可能ならばどのようにすればいいのでしょうか? テーブルのフィールド数は毎回違いますが、 フィールド2に不要なデータが入っているのは決まっています。 フィールド2のデータ型はテキスト型です。 Access2007を使用しています。 どうぞ、よろしくお願いします。

  • アクセス 複数条件の抽出~出力について

    ■アクセスのフォームにて、複数の条件を入力し、合致するリストをエクセルで出力する   データベースを構築しようとしています。  ⇒この複数の条件を入力する件に関し質問です。 ■目的は、顧客からのアンケート回答結果をDBから取出し、エクセルにて解析を行う事です。  情報量が膨大であるため、セグメントした形で出力し効率を上げたいと考えています。 ○テーブルのフィールド構造:   支店(テキスト型)、顧客No(数値型)、顧客名(テキスト型)、質問1(数値型)、質問2、・・・   ○フォーム「データ抽出」の構造: [支店名1][支店名2] [顧客No1][顧客No2] [顧客名1][顧客名2]       【出力ボタン】 ※上記テキストボックスいずれかに入力された条件に合致するデータが          【出力ボタン】を押すとエクセルに出力されるという構造です。          ※ボタンのイベントに「抽出マクロ」を設定。 ○抽出クエリ: 支店 [Forms]![データ抽出]![支店名1]  Is Null [Forms]![データ抽出]![支店名2]  Is Null 顧客No [Forms]![データ抽出]![顧客No1]  Is Null [Forms]![データ抽出]![顧客No2]  Is Null 企業名 like "*" &[Forms]![データ抽出]![顧客名1]& "*" Is Null like "*" &[Forms]![データ抽出]![顧客名2]& "*" Is Null               ○マクロ(抽出マクロ):  クエリを開く (抽出クエリ)  コマンドの実行(エクセルに出力)  閉じる (抽出クエリ) と設定しました。そこで実行確認すると・・・・  (例)     (1)支店名1だけに入力して、他は空欄で出力ボタンを押下。     ⇒条件セグメントされず、全てのデータがエクセル出力されてしまう。     (2)全ての項目に入力して出力ボタンを押下     ⇒条件セグメントされたデータがエクセル出力される。  という現象が起こりました。  例示(2)は良いとして、(1)の様な空欄がある状態でも、条件にマッチした出力をしたいのですが上手くいいかず困っています。    尚、クエリの抽出条件を支店フィールドだけにした所・・ 支店  [Forms]![データ抽出]![支店名1]   Is Null  [Forms]![データ抽出]![支店名2]   Is Nul 支店名1に入力して支店名2は空欄であっても条件にマッチした出力結果が得られました。 長文恐縮でございますが、どなたか解決法をご教授いただきたく存じます。よろしくお願いいたします。

  • VBAでアクセスのクリエの抽出条件を変更

    エクセルで、契約管理表を作っています。 仕様としては、エクセルとアクセルを使用し、 エクセルからアクセスのデータベースを操作 するようにしています。 (複数拠点で仕様する為。) アクセスでは「T_契約メイン」というテーブルと 「T_契約今月」というクエリがあって、今月分の データのみ抽出できるようになっています。 これを、エクセルのVBAのフォームでADOとSQL等を 利用してデータ取得、編集、新規契約の登録などを 行うように考えています。 ここまでの内容は無事、作成する事が出来ています。 ここからが質問なのですが、クエリ「T_契約今月」の抽出 条件をエクセルVBAから変更するにはどのようにコードを 書けばいいのでしょうか? 毎月毎月、アクセルを開いてクエリのデザインビューで 抽出条件を変更すればいいのでしょうが、あんまりスマート では無いですよね。 出来れば、エクセル側からVBAで設定変更等のフォームや ボタンを作って、処理したいのですが…。 とりあえずアクセスに繋げるところまでは分かるので、 クエリの抽出条件変更の部分のコードの記載方法を 教えて頂けないでしょうか? どうぞよろしくお願いいたします。

  • ACCESS クエリー 抽出条件が多い場合

    アクセス初心者です。(2003です) 商品コードのテーブルから、 32個のキーワードを含むものを抽出したいです。 商品コードの中のキーワードの位置は 先頭や最後など決まりはなく、バラバラです。 クエリの抽出条件の欄が9個しかないので、 9個ずつバラバラにクエリを作ってみました。 *02S* *05F* ... ... というふうに条件を並べています。 この3つのクエリ結果を エクセルに出してはっつけて1枚のマスターに しようかと思っていますが… かなり手作り感があふれていて…(^^;)汗汗 もうちょっと単純な方法はないでしょうか? また、なんだか心配なので エクセルでテーブルをフィルタにかけ キーワードを一個ずつ抽出してみましたが アクセスで出た結果と違います…。(エクセルのが少ないです) 重複するキーワードがあるからかと思い ピボットで見ても、重複は4件しかありません。 クエリを分けているからでしょうか? どっちが正しいのでしょうか? 自分の作ったデータにまったく信頼が持てません。。。(--;) これを出さないと退社できないのですが チーム内に誰もいないので困っております。 助っ人お願い致しますm(__)m

  • ACCESSでのクエリ抽出条件について

    ACCESS超初心者です。 自分なりに調べたのですが、知識不足によりお手上げ状態です。 クエリの抽出条件について、どなたかご教授いただけますでしょうか? OS:XP ACCESS:2000 ・フォーム上に自由に入力できるテキストを3つ用意します。 ・入力された3つのテキストが1つのフィールドに含まれるものをクエリで抽出したい。 ・3つのテキストが空欄の場合は全てのデータを抽出したい。 ■フォーム上のテキスト  テキスト1:テキスト10  テキスト2:テスト11  テキスト3:テスト12 ■テーブル  フィールド1:問合せ内容(1) ■クエリ内の抽出条件 Like "*" & [Forms]![F_検索テスト]![テキスト10] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト11] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト12] & "*" テキスト名がおかしいのですが、ご了承下さい。

  • アクセスクエリ ハテナを抽出するには

    テーブルは 文字(フィールド) ? あ となっていて、 クエリで SELECT [テーブル1].文字 FROM テーブル1 WHERE ((([テーブル1].文字) Like "?")); とすると、 ? あ が抽出されます。 ?がワイルドカードとなり、1文字の文字列を抽出する、という条件になってしまったためだと思われますが、ワイルドカードではなく、ハテナとして抽出したい場合はどうすればいいでしょうか? エクセルのように、Like "~?"としたら、何も抽出されませんでした。

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • アクセスの抽出条件設定について

     初めて質問させていただきます。  仕事でアクセスを使うようになりました。テーブルとクエリ、レポートとの関係性は、なんとなくですが理解できているみたいです!?  今回みなさまにお伺いしたいのは、クエリから条件を設定して抽出し、それをレポートにする方法です。  具体的には、ランダムに入っている年月日データから、翌月のデータだけ抽出したいのですが、やり方が分からず、困っています。  フィールドデータ(db~)みたいのを入力しても、エラーの連続です。  ご存知の方がいらっしゃいましたら、ぜひ、教えてください。お願いいたします。

  • ACCESS のフォームの内容をクエリーの抽出条件にするには?

    Windows2000,Access2000です。 Accessのクエリーでデータを選択して表示する作業をしています。 現在はクエリーを自分で修正して実行しています。 でもそれではみんなで使うには使いづらいので、 フォームを作成しそのフォーム上の入力項目に入力された データをクエリーの抽出条件に指定する様にしようという事になりました。 フォーム上の入力フィールドの内容をクエリーの抽出条件に設定する方法はすぐわかりました。 でも「like」を指定する方法がわかりません。 つまりフォーム上の入力データを“xxx”とした時、クエリーの抽出条件を 「like "*xxx*"」としてクエリーを実行したいのです。 つたない文章でわかりにくいかと思いますが、ご存じの方おりましたら、 よろしくご教示ください。

専門家に質問してみよう