- ベストアンサー
accessの抽出条件で数字の比較をしたい
- サーバのviewテーブルをaccessでODBC接続し、accessからexcelにデータを持ってくる構成があります。
- accessのHYOHEN_NOというフィールドに対し、クエリ条件をlike "15%"として2015年のデータを抽出しています。
- HYOHEN_NOフィールドで先頭の2文字が14より大きいものを抽出したいのですが、どの様にしたらよいでしょうか?
- みんなの回答 (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はコネクションです。
その他の回答 (1)
- naoto0216
- ベストアンサー率46% (183/391)
HYOHEN_NOフィールドの先頭の2文字を取得し、それが 14より大きいもので抽出することになります。 HYOHEN_NOフィールドはテキスト型だと思いますので、 取得した先頭2文字を数値変換する必要があります。 Left(HYOHEN_NO,2)で先頭2文字を取得し、更にValを使って 文字列を数値に変換します。 Val(Left(HYOHEN_NO,2)) これよりもっとよい方法があるかもしれませんが、ご参考まで。
お礼
回答ありがとうございます。
補足
教えていただいた条件を設定して実行すると、 クエリ式'テーブル名.[Val(Left([HYOHEN_NO],2))]'の構文エラー:カンマがありません。 というポップアップエラーが出ます。 構文エラー カンマがありませんの原因をWEBで調べましたが、よく分かりませんでした。 お手数をおかけしましたが、No.2の回答で解決できましたので、これにてクローズさせていただきます。
お礼
回答ありがとうございます。 おもい通りの抽出できました。 助かりました。