• ベストアンサー

access2003のコンボボックスより取り出した値の型

こんにちは、Blackwinglsです。 以下のようなテーブルがあります。 所属マスター 所属コード 所属名 010 本社 100 東京 110 大阪 200 福岡 300 札幌 400 秋田 所属コード 所属名 ともに文字列にて定義、主キーはなし。 これをフォームのコンボボックスより開始所属~終了所属で抽出条件を指定して取り出して、別途作成した所属一覧表というレポートに渡したいのですが、うまくいきません。 コンボボックスは、所属コード、所属名を表示(所属コードは0cm)しています。 印刷時のコードは DoCmd.OpenReport "所属一覧表", acViewPreview, , "所属コード Between " & Me.開始所属 & " and " & Me.終了所属 とすると、 抽出条件でデータ型が一致しません とでます。 あれと思い、 MsgBox Me.開始所属 MsgBox IsNumeric(Me.開始所属) とすると MsgBox Me.開始所属 は、010 が表示され MsgBox IsNumeric(Me.開始所属) は、true (数値)が表示されます。 MsgBox Str(Me.開始所属) MsgBox IsNumeric(Str(Me.開始所属)) としてみましたが、 MsgBox Str(Me.開始所属) は、10 が表示され MsgBox IsNumeric(Str(Me.開始所属)) は、true (数値)が表示されます。 Me.開始所属 で取り出した値が、なぜ数値になっているのか理解できません。 また、Str(Me.開始所属) としても数値のままなのは何故なのでしょうか? ps accessのSQL画面の抽出条件に、Between "010" And "200" では正常に動きます。

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

  • ベストアンサー
回答No.1

DoCmd には、↓の用に入れましょう。 DoCmd.OpenReport "所属一覧表", acViewPreview, , "所属コード Between '" & Me.開始所属 & "' and '" & Me.終了所属 & "'" 今のままだと、Where文が [ Where Between 010 and 200]  ↑になってしまい、直接数値で条件を指定していることになります。 SQL文なら、文字列は基本的に「'」シングルクォーテーションでいいと思います。 あと、Str()についてですが Strに合わせて[F1]を押すとヘルプが出てくると思いますが そこに、書いてある事を見ればなんとなくわかると思います。 引数に、数値を代入する仕様になっている為 数値に変換されたものを、バリアント型で返しているからです。 文字列型にしたいのであれば、 Format()を使った方が良いと思います。 一度、試してみてください。

Blackwingls
質問者

お礼

ご回答ありがとうございます。 > DoCmd.OpenReport "所属一覧表", acViewPreview, , "所属コード Between '" & Me.開始所属 & "' and '" & Me.終了所属 & "'" を見た瞬間、思わず声が出てしまいました。 なんでこんな事に気がつかなかったんですかねえ。 大変役立ちました。 感謝いたします。

その他の回答 (2)

noname#22222
noname#22222
回答No.3

DoCmd.OpenReport "所属一覧表", acPreview, , "Val(所属コード) >=10 AND Val(所属コード) <=100" DoCmd.OpenReport "所属一覧表", acPreview, , "所属コード >='010' AND 所属コード<='100'" DoCmd.OpenReport "所属一覧表", acPreview, , "所属コード BETWEEN '010' AND '100'" DoCmd.OpenReport "所属一覧表", acPreview, , "所属コード IN ('010','100')" 4番目は非現実てきですが、残りの3つは目的を達すると思います。 冒頭の Val("010")=0 と思ったのですが、所属コード=10 を表示したので驚きです。 参考までに!

Blackwingls
質問者

お礼

ご回答頂きましてありがとうございます。 BETWEEN 以外の処理は頭になかったので参考になりました。 今後もよろしくお願いします。

  • taocat
  • ベストアンサー率61% (191/310)
回答No.2

こんにちは。 「文字列はシングルクォーテイテョンで囲む」との回答は出てますので、ISNUMERICについて少々。 ヘルプには「引数が数値と評価できればTRUEを返す」と書いてありますね。 言い換えると「数値と評価できれば」たとえ「文字列」であっても「TRUE」返すということです。 例えば、以下のように文字列で宣言してあっても、全角数字でも「TRUE」が返る。 Sub test()  Dim S As String  S = "234"   '(全角数字)これは数値と評価できるのでTRUE  MsgBox IsNumeric(S) End Sub これで質問のISNUMERICでなぜTRUEが返えるのかお分かりになりましたね。 そして今回のような判断にはISNUMERIC関数は適さないということも。 以上です。  

Blackwingls
質問者

お礼

ご回答頂きましてありがとうございます。 ISNUMERICの件は参考になりました。 今後もよろしくお願いします。

関連するQ&A