• ベストアンサー

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

  • Accessのコンボボックスの値が消える

    お伺いいたします Accessのフォーム(フォーム請求実績)上に置いたコンボボックスで ユーザーリスト(テーブル)から目的のデータを 選択出来るように設定していますが、 目的のデータをクリックすると、コンボボックスに一瞬、表示された後、消えて空欄になります。 目的のデータ(販売先名)で販売実績表(クエリ)の中の販売先別のデータを抽出(Filter)させていますが目的のデータの抽出はできるのですが、 コンボボックスの表示が消えるので困っています。 因みに、請求実績データ(選択クエリ)の販売店フィールドの抽出条件欄には [forms]![フォーム請求実績]![コンボボックス1]で 抽出するようにしています。 ぐだぐだと長い説明で解りにくいと思いますが要は コンボボックスのデータを選択してもコンボボックスに表示されないのです。 こんな経験された方よろしくアドバイスお願いいたします。

  • ACCESS VBA で複数項目検索にテキストボックスとコンボボックス

    ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい txtPC番号というテキストボックス、 com所属部門というコンボボックス、 txt使用者というテキストボックスの どれかひとつの条件が入力されたときに 該当するフォームのレコードを抽出できるようにしたいのですが、 コンボボックスで選択した場合のみうまく抽出できません。 コードのどの部分に誤りがあるのでしょうか? ご指摘願えませんでしょうか? よろしくお願いいたします。 Private Sub cmd01_Click() Me.FilterOn = False If Me!txtPC番号 <> "" Then Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'" ElseIf Me!com所属部門 <> "" Then DoCmd.Requery "com所属部門" ElseIf Me!txt使用者 <> "" Then Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'" End If Me.FilterOn = True End Sub

  • access クエリコンボボックスについて

    フォームのメニュー画面でレポート印刷ボタンを作りました。 印刷ボタンを押すと[抽出する都道府県は?] とパラメーター入力が表示されるようにしてあるのですが、 それを入力式ではなく、コンボボックスにして選択式にしたいのですが、 どのようにすれば良いのでしょうか? コンボボックスにマクロをつけて クエリの抽出条件のところに[forms]![フォーム名]![コンボ名] を入力しても、実行したときになにも抽出されません。 なにがどのように違っているのでしょうか? 説明が分かりにくくて申し訳ないのですが、 わかる方いらっしゃいましたらぜひ教えていただきたいです。 よろしくお願いいたします。

  • ACCESSでコンボボックスにSQLで抽出した値を表示したい

    いつもお世話になっております。 ACCESS初心者です。 テキストボックスに入力したフリガナから、あいまい検索させ抽出した ものをコンボボックスに表示させたいのですが、うまくいきません。。 (コンボボックスに何も表示されないです) 過去の質問やネット検索でも調べたのですがイマイチ分かりませんでした。 どなたか詳しい方、ご教示いただけると嬉しいです。 OS:windowXP ACCESS:Ver2003 Private Sub テキストボックス名_Afterupdate() Me.コンボボックス名.RowSource = "SELECT フィールド名 FROM テーブル名 WHERE フリガナ LIKE '" & Me!テキストボックス名 & "*';" End Sub どうぞよろしくお願いいたします。

  • ACCESSのコンボボックスについて

    ACCESSのコンボボックスに「012/015/028/125」等が設定されているて、 コンボボックスのプロパティの「入力チェック」は「はい」の設定になっております。 そういった場合、「12」と入力した場合、「012」とすることは可能でしょうか? テキストボックスの場合には、そのテキストボックスの更新後処理で Me.コード = Format(Me.コード, "000") のように記述し変更していたのですが・・・。 コンボボックスでは、「指定した値はリストにありません」と表示され、更新後処理がが実行されません。

  • コンボBOXで抽出した値をテキストBOXに表示したい

    入力用フォームで注文フォームを作成しているのですが、コンボBOXで商品Noを抽出し、テキストBOXに商品名を表示したいのですが、 Private Sub コンボ1_AfterUpdate() Me!テキスト1 = Me!コンボ1.column(1) End Sub と入力したのですが、他の行にも同じ商品名が表示されます。 商品NoをコンボBOXで指定し、数量を手入力という入力フォームを作成したいのです。 作成方法を教えてください。 よろしくおねがいします

  • Access コンボボックスの内容表示について

    お世話になります。 どうぞ宜しくお願い致します。 Access2000を使用しています。 入力フォームを作り、コンボボックス1で選択した内容に応じて、コンボボックス2で表示する内容を制限させたいと思っています。 ゴーム名 データベース 営業社員の所属するグループ EIGYO_GROUP で選んだグループに応じて 所属する社員 EIGYO_SYAIN で表示する内容を制限させたいのです。 いくつか調べて http://support.microsoft.com/kb/879979/ja http://okwave.jp/qa274932.html を参考にやってみたのですが、 ・マクロの設定方法がよくわからない ・コンボボックスで表示させるデータを選択した後に、[Form]~と入れて抽出させるところがわからない ため、うまくいきません・・・。 また、グループ名は1グループに所属する人数が10名ほどいるので、コンボボックス内の表示がかぶっては困ると、集計して、重複表示させないようにしたんですが、うまくいきませんでした。 すいませんがどなたか方法を教えてください。 宜しくお願い致します。

  • Access コンボボックスを使って抽出

    Access2000・Windows2000を使用しています。 レコードの抽出をしたいと思います。テーブルは1つ、フィールドには日付・商品名・業者名・単価・・・とあります。フォームで「商品名から抽出(コンボボックスから商品を1つ選ぶ)」または「業者名から抽出(コンボボックスから業者を1つ選ぶ)」(コンボボックスから商品を1つ選ぶ)出来るようにし、なおかつ今月のレコードのみ表示させたいのですが、まずそのテーブルを1つ作成した時点でつまづいてしまっています。 どなたかご教授お願いします。

  • アクセス コンボボックスについて

    コンボボックス 印刷ボタンについて アクセス勉強中です。 フォームで作成した画面 だけを印刷する、コンボボックスを作成しています。 コンボボックスウィザードにてフォーム印刷ボタンを作成したのですが、 1000人くらいの、すべてのデーターが印刷されてしまい困っております。 どこを変更すれば1枚だけ印刷ができるのでしょうか? イベントプロジャという部分は下記です。 またプロジャー以外に何かしなければならないのでしょうか?? どうぞ宜しくお願いいたします。 Option Compare Database Private Sub リスト70_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[IDI] = " & Str(Me![リスト70]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[NO] = " & Str(Me![コンボ73]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_BeforeUpdate(Cancel As Integer) End Sub Private Sub 生年月日_AfterUpdate() Me.年_____齢 = Int(DateDiff("d", [生年月日] - 1, Date) / 365.25) End Sub Private Sub 郵便番号_AfterUpdate() Me!現住所.SetFocus Me!現住所.SelStart = Len(Me!現住所) End Sub Private Sub コマンド121_Click() On Error GoTo Err_コマンド121_Click Dim stDocName As String Dim MyForm As Form stDocName = "顧客リスト" Set MyForm = Screen.ActiveForm DoCmd.SelectObject acForm, stDocName, True DoCmd.PrintOut DoCmd.SelectObject acForm, MyForm.Name, False Exit_コマンド121_Click: Exit Sub Err_コマンド121_Click: MsgBox Err.Description Resume Exit_コマンド121_Click End Sub

  • Accessのコンボボックスでの検索について2

    コンボボックスが2つあり、cbo回線区分でAAを選択するとcbo名称にはAA条件クエリの名称フィールドの名称が表示され、名称を何か選択すると、AA条件クエリの中から一致するレコードが抽出され、またcbo回線区分でBBを選択するとcbo名称にはBB条件クエリの名称フィールドが表示されBB条件クエリの中の一致するレコードを抽出しにいくということは出来ますでしょうか? わかりにくい説明ですいませんが、コンボボックスにより検索したいクエリを切り替えることは出来るかということなんですが。。。 コンボボックス名 cbo回線区分、cbo名称 クエリ名 AAクエリ、BBクエリ 色々試してはいるんですがうまく行かないので、ご教授願います(If Else・・・を使ったんですが間違いでしょうか?)

専門家に質問してみよう