• ベストアンサー
  • 困ってます

ACCESSで非連結のテキストボックスに値を出力するには?

 ACCESSの初心者な者で大変困っています。 フォームで非連結のテキストボックスに、あるフィールドの値を条件にしてテキストに出力をするにはどうしたらよいでしょうか。モジュールで関数を作成しようと努力しましたがオーバーフロー的な状態になってしまいました。IF文はわかりますが出力するすべがわかりません。お願いします。 ちなみに条件が20以上あります。 例 ID   点検時間   10    200 10    500 20    500 IDが10のとき点検時間+150 IDが20のとき点検時間+200 等

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数1775
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.2
noname#60992
noname#60992

VBAで作ることも、クエリで対応することも、フォームのつくりで入力することも、可能であると思います。 VBAにて作成したときに発生しうる問題は、新しく条件が追加された際にコードの変更を行う必要が出てくるということです。 それを行いたくないのであれば、条件をテーブルに入れてそれを読み出す物を作らなくてはいけません。 どうせ条件をテーブルに入れるなら、クエリで対応するほうが簡単だと思います。 まずもともとのテーブル(仮に名称を[T_Data]とさせていただきます)に 加算後点検時間、加算後購入日 のフィールドを追加しておいたほうが良いと思います。 それから、別に条件を入れたテーブル(仮に名称を[T_Kasan]とさせていただきます。)を作成します。  項目及び内容としては、  ID 加算時間 加算日数 10 150       0 20 200       1 30  0       2 のようなものでよいと思います。 一括で既存のデータを更新させるには、 更新クエリを一つ作り、[T_Data]to[T_Kasan]を表示させIDでリレーションシップで結び結合プロパティを「'T_Data'の全レコードと'T_Kasan'の同じ結合フィールドのレコードだけを含める。」とします。 更新する内容としては T_Data の [加算後点検時間]に[T_Data]![点検時間] + [T_kasan]![加算時間] [加算後購入日]に[T_Data]![購入日] + [T_kasan]![加算日数] としてクエリを実行させれば[加算後点検時間]、[加算後購入日]に加算されたデータが入力されます。 データ入力時に、同時に加算後のデータを更新するのであれば、上記クエリの選択版を作ります。(特に抽出条件は要りません。) このクエリをフォームのレコードソースとして、点検時間の更新後処理で、加算後点検時間を[T_Data]![点検時間] + [T_kasan]![加算時間]のような形で入力すればよいと思います。(購入日の加算も同じように行います。)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

更新クエリを使うという発想がもともと無かったのでとても参考になりました。丁寧な対応とてもありがとうございました。

関連するQ&A

  • Access 連結テキストボックスのフィルタ操作を非連結テキストボック

    Access 連結テキストボックスのフィルタ操作を非連結テキストボックスから操作 したいのですが、うまく出来ません。 使用しているのはAccess2007です。 フォームはウィザード使用によるメインフォームとサブフォームです。 構造は下記の通りになります。 ======================================== -メインフォーム-  ID □□□□←(連結テキストボックス、テーブル[IDコード](IDコード(オートナンバー)、名前(テキスト))     ↑ (フィルタ操作を(指定の値に等しい)で非連結テキストボックスの数値を反映させたい。)                   非連結テキストボックス□□□□                      (数値記入してエンターを押すとフィルタ操作実行) ---------------------------------------------------------------------- -サブフォーム-  [ 名前 ]←メインフォームの連結テキストボックスと連動する。 [___][____][____]  [___][____][____] =========================================      使用目的:メインフォームでID検索し、サブフォームで新規登録。 ネットや本をあさっていろいろ試してみたのですが、 非連結テキストボックスの数値がそのまま連結テキストボックス(IDフィールド)に反映されません。 違った数値がでたりしてどうにもなりませんでした。 どうすれば実現可能なのかとても知りたいです。 どうかよろしくお願いします。

  • Accessのレコード数をテキストボックスに出力するには?

    Accessのフォームにて全レコード数と現在のレコード位置をテキストボックスに出力したい場合、どうすればいいのでしょうか?

  • ラベルと連結したテキストボックスの背景色を変える方法

    環境:XP&ACCESS2003 フォーム上にラベルと連結したテキストボックスがあります。 フォーム上のある連結テキストボックスの値を参照してラベルと連結したテキストボックスの背景色を変える方法が思い浮かびません。ご存知の方、教えてください。よろしくお願いします。

その他の回答 (2)

  • 回答No.3
noname#60992
noname#60992

VBAで作ることも、クエリで対応することも、フォームのつくりで入力することも、可能であると思います。 VBAにて作成したときに発生しうる問題は、新しく条件が追加された際にコードの変更を行う必要が出てくるということです。 それを行いたくないのであれば、条件をテーブルに入れてそれを読み出す物を作らなくてはいけません。 どうせ条件をテーブルに入れるなら、クエリで対応するほうが簡単だと思います。 まずもともとのテーブル(仮に名称を[T_Data]とさせていただきます)に 加算後点検時間、加算後購入日 のフィールドを追加しておいたほうが良いと思います。 それから、別に条件を入れたテーブル(仮に名称を[T_Kasan]とさせていただきます。)を作成します。  項目及び内容としては、  ID 加算時間 加算日数 10 150       0 20 200      1 30  0      2 のようなものでよいと思います。 一括で既存のデータを更新させるには、 更新クエリを一つ作り、[T_Data]to[T_Kasan]を表示させIDでリレーションシップで結び結合プロパティを「'T_Data'の全レコードと'T_Kasan'の同じ結合フィールドのレコードだけを含める。」とします。 更新する内容としては T_Data の [加算後点検時間]に[T_Data]![点検時間] + [T_kasan]![加算時間] [加算後購入日]に[T_Data]![購入日] + [T_kasan]![加算日数] としてクエリを実行させれば[加算後点検時間]、[加算後購入日]に加算されたデータが入力されます。 データ入力時に、同時に加算後のデータを更新するのであれば、上記クエリの選択版を作ります。(特に抽出条件は要りません。) このクエリをフォームのレコードソースとして、点検時間の更新後処理で、加算後点検時間を[T_Data]![点検時間] + [T_kasan]![加算時間]のような形で入力すればよいと思います。(購入日の加算も同じように行います。)

共感・感謝の気持ちを伝えよう!

  • 回答No.1
noname#60992
noname#60992

どのようなフォームなのかもう少し情報をいただけますか? いっぺんにいくつのデータを表示させているのか、レコードソースはあるのかないのか? それによって、作り方が変わってきます。  もしもいっぺんに1レコード分のデータを表示させているなら、 ID と 加算時間 をテーブルにしてデータを入れておいて、あとはクエリをつくり合計時間を計算する。 そのクエリをレコードソースとしたフォームを作れば、非連結にする必要はないと思います。

共感・感謝の気持ちを伝えよう!

質問者からの補足

書き方がわかりにくく申し訳ありません。フォームは表形式のものです。またレポートでも出力したいと思っています。クエリーを作成すると考えたのですが分岐する条件が多すぎて難しいと判断しましたが大丈夫なのでしょうか? 具体的に書きますと ID  点検時間  購入日  時期点検日という4つのフィールドがあります。IDによって点検時間に時間を加算するものが15条件ぐらいと購入日に加算するものが5条件ほどあります。

関連するQ&A

  • Access2010 テキストの連結

    よろしくお願いします。 Access2010を使用しております。 非連結のフォームに入力した情報を、 保存ボタンで、テーブルに追加しております。 そこで、サブフォームにある複数のテキストボックスをボックス毎に改行して、 一つのフィールドに入れたいと思っております。 一つ一つのテキストボックスは別テーブルを作っておりますが、メインにしているテーブルには、一つのフィールドに入れたいのです。 txt箱1、txt箱2、…txt箱20の空白ではないテキストボックスを改行して、一つのフィールドに追加したいです。 テキストボックスが、ランダムに記入されていたり、空白が間にあると、 うまく一つのフィールドに入れることができません。 改行が何個も入った箇所ができてしまいます。 間に空白があっても、改行を綺麗に入れて、 一つのフィールドに入力させるには、どうしたらよろしいでしょうか。 お世話になりますが、よろしくお願いします。

  • Access テキストボックスのフォームデザイン変更について

    はじめまして。最近になってAccessの基本の「キ」を勉強し始めました。 サイトを見ながら、課題になっているデータベースを作成しているのですがその中で、引っかかってしまった 下らない操作があります;; フォームデザインにて、「テキストボックスを追加して下さい」という指示があったのですが ツールボックスから「テキストボックス」を選択して、フォームに乗せると、下記のようになります。 尚、< > ←これは、フィールドの名称?みたいなもので、[ ] ←これが入力フォームみたいなものです。 フォームヘッダー ------------------ <商品CD> <商品名> <単価> <数量> <テキスト10> [非連結] <備考> 詳細 ------------------ [商品CD]    [商品名]   [単価]   [数量]                    [備考] <テキスト10>というのと、[非連結]というのが新しく追加されたテキストボックスなのですが、 フィールドで言う名称と、実際の入力フォームが横並びになってしまっています。 これを、他と同じように、名称はヘッダーに、入力フォームは詳細に置きたいのですがどのようにすればいいのでしょうか? プロパティを見てみたり、ShiftやCtrlやAlt等を押しながらも試しましたがどうにも出来なくてかなり困ってします…(>_<) 検索もしたのですが解決方法がわからず、どのようにしたらいいかご存知の方いらっしゃいましたらご教授願います。 よろしくお願いいたします。 (尚、この文章はフォントがMSPゴシックで作成しているのでそれ以外の方は上の図がかなりずれて見えると思います。すみません)

  • Access の非連結テキストボックスについて

    Access 2000 を使用しています。 フィールド名 データ型 Code     テキスト型(フィールドサイズ=8) Name     テキスト型(フィールドサイズ=50) というテーブルがあり、このテーブルを元に帳票フォームを作成しました。このフォームは参照用として使用したいので、 AllowEdits/更新の許可 AllowDeletions/削除の許可 AllowAdditions/追加の許可 のプロパティは全て「いいえ」にしてあります。 このフォームのフッタ部分に txtFilter というテキストボックスと cmdFilter というコマンドボタンを置き、フィルターの動作をさせるため、 Private Sub cmdFilter_Click()   If IsNull(txtFilter.Value) Then     FilterOn = False   Else     Filter = "Code LIKE """ & txtFilter.Value & "*"""     FilterOn = True   End If End Sub としました。(見やすくするため全角空白を使用しています。) さらに、txtFilter に 8文字 ( Code フィールドのフィールドサイズ ) 以上は入力できないようにしようと思い、 Private Sub txtFilter_KeyPress(KeyAscii As Integer)   If KeyAscii <> 8 Then     'Delete 以外の場合     If Len(txtFilter.Text) = 8 Then       KeyAscii = 0     End If   End If End Sub としましたが、ここで問題が起きました。 ・FilterOn = False あるいは、 ・FilterOn = True でも何レコードが表示されている状態(該当レコードが存在する文字が txtFilter に入力されている) という場合は良いのですが、該当レコードが存在しない場合、 txtFilter に入力されている文字を変更しようとすると、 txtFilter_KeyPress() 中の If Len(txtFilter.Text) = 8 Then のところで「実行時エラー'2185' コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません。」となってしまいます。 入力中のコントロールですから、「そんな馬鹿な!?」という感じなんですが、 If Len(txtFilter.Text) = 8 Then の前に txtFilter.SetFocus を入れても状況は同じでした。 フォームの「AllowAdditions/追加の許可」プロパティを「はい」にすれば、上記のようなエラーは発生しないのですが(なぜ、「AllowAdditions/追加の許可」プロパティの違いでそのようなことになるのかは理解できませんが)、ユーザーにデータの変更や追加、削除はさせたくないテーブルなので、追加を許すわけにもいきません。 何かいい回避方法はありませんでしょうか。 よろしくお願いします。

  • 前レコードのテキストボックスと同じ値を表示させる

    環境:XP,ACCESS2003 帳票形式のフォームがあります。 次のレコードの入力に移った時、前のレコードのあるテキストボックスは、同じ内容を表示させる方法がわかりません。なお、同じ内容を表示させたいテキストボックスは連結でテーブルのフィールドをコントロールソースにしています。

  • ACCESS2010 テキストボックスに合計値を

    どなたかお助け願います。 私のPC環境は Windows7 64bit ACCESS2010  でございます。 ACCESSは苦手ながら簡単な環境を作成いたしております。 テーブル名 T_入出金    フィールド1 入出金月    フィールド2 入金業者名    フィールド3 入金額    フィールド4 出金業者名    フィールド5 出金額 クエリ Q_入金クエリ    フィールド1 入金額の合計: 入金額    集計:合計    フィールド2 入金業者名 集計:Where条件 抽出条件:Like "業者名" フィールド3 入出金日  集計:Where条件 抽出条件:Like 201401  ←日付です。 としたものを作成いたしました。 このフィールド1の合計結果をテキストボックスに表示したく、 メイン帳票フォームのヘッダー部分にテキストボックスを設置し、  コントロールソースに =[Q_クエリ]![入金額の合計] としましたが、#Name? と出てしまいます。 関数が間違っているのでしょうか・・・?

  • フィールド1だけのテキストボックスの幅を変える事は

    フィールド1だけのテキストボックスの幅を変える事は出来ないのでしょうか? アクセス2007です。 テーブル1に ・ID オートナンバー型 ・フィールド1 テキスト型 ・フィールド2 テキスト型 を作り、 作成→その他フォーム→フォームウィザードで、フォームを作りました。 そして、デザインビューでテキストボックスのコントロールの幅を変えようと思うのですが フィールド1だけの幅を長くしたいのに ・ID ・フィールド1 ・フィールド2 の全てのテキストボックスが同じ長さになってしまいます。 「グループ化がされてるのかな?」と思い見てみましたが、されていません。 フィールド1を選択してF4を押して、プロパティシートを表示し、 幅を10にしたら、 ・ID ・フィールド1 ・フィールド2 全ての幅が10になってしまいました。 どうすれば、フィールド1だけのテキストボックスの幅を変える事が出来るのでしょうか? ご回答よろしくお願いします。

  • [Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには

    Accessにおいて。 帳票フォームの"詳細"に非連結のコントロール(例:テキストボックス)を配置し、それぞれ別々の値を持たせることは可能なのでしょうか? 例えば。 VBAにおいて、カレントレコードのAという値とBという値を計算し、その値を非連結のテキストボックスに挿入したとします。 単票フォームであれば、問題なくテキストボックスには計算後の値が表示されるわけですが…… 帳票フォームの場合では、"規定値"に計算式を入れたときと同様、先頭の値と同じものが連続するテキストボックスに表示されてしまいます。 これを回避し、計算後のデータを連続するテキストボックスにそれぞれの値として表示させるには、どのようにすればよいのでしょうか? もちろん、連結させたコントロールを使用すれば、問題はないのですが…… 状況によっては、これが行えた方が便利かと思い、質問させていただきます。 「帳票フォームでは不可能である」といった回答でもかまいません。 どうぞよろしくお願いいたします。

  • ACCESS VBA フォーム複数条件

    ACCESSフォーム内のテキストボックスが空欄かどうかで条件分岐させる方法を教えてください。 フォーム内に複数テキストボックスがあります。 テキスト1 テキスト2 テキスト3 このテキストボックスの入力があるかどうかで、 エクスポートするクエリを変更したいです。 それぞれのテキストボックスの入力値は、 対応するクエリの抽出条件になっています。 少なくとも、テキスト1には入力があるという条件で、 ・テキスト2が空白なら、クエリ2を出力する ・テキスト3が空白なら、クエリ3を出力する という処理を行いたいのです。 マクロビルダーで、IFを使った処理は作ることができたのですが、 VBAを使って、同じ処理ができるようにしたいです。 どうかご教授のほど、よろしくお願いします。

  • ACCESSのテキストボックス内の任意の文字

    お世話になります。 宜しくお願い致します。 ACCESS2010についてになります。 [フォームA]の[テキストボックスa]に、ある文字が含まれていたら、[テーブルB]の[フィールドb]を検索して、[フィールド'c]の値を[フォームA]の[テキストボックス'a]に表示させたいと思います。 (例) 『信長』が入っていたら、検索結果を表示させる。 [フォームA] [テキストボックスa] 『徳川家康』 ⇒  検索しない。 『織田信成』 ⇒  検索しない。 『織田信長』 ⇒  [テーブルB][フィールドb]を検索する。 [テーブルB] [フィールドb] [フィールド'c] 明智光秀 あけちみつひで 織田信長 おだのぶなが ⇒ 結果を表示する。 [フォームA] [テキストボックス'a] おだのぶなが おわかり頂けますでしょうか。 上手く表現できずにすみません。 お手数ですが、ご教示頂ければと思います。 宜しく、お願い致します。

  • Accessで、親フィールドに子フィールドの値を入れたいのですが

    親フィールドの[テキストボックスA]に [テキストボックスB]-子フィールドのフッターにある[テキストボックスC] という式の値を表示させたいのですが。 Aのコントロールソースに = [B]-[子フィールド名].フォーム![C] と入力すると「#Name?」となり、「フォーム」を「Form」とすると空欄になるのですが、どこを直せばいいのでしょうか。 [B]は数値です。 [C]はsum関数が入っていて、普通に表示されてます。 宜しくおねがいします。