• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:accessの抽出条件で数字の比較をしたい)

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

このQ&Aのポイント
  • サーバのviewテーブルをaccessでODBC接続し、accessからexcelにデータを持ってくる構成があります。
  • accessのHYOHEN_NOというフィールドに対し、クエリ条件をlike "15%"として2015年のデータを抽出しています。
  • 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の回答で解決できましたので、これにてクローズさせていただきます。