• 締切済み

accessのフォームで参照しながら入力

access初心者です。教えてください。 今、以下のようなテーブルがあるとします。 TBL_A ID,名前,TEL,FAX TBL_B ID,顧客ID,年月日,メモ 新規でTBL_Bのデータを追加するときにリストボックスから顧客を選び、年月日とメモを入力するフォームを作成しています。 このときにリストボックスより選択後、年月日とメモを入力するテキストボックス等の横に該当顧客の直近(TBL_Bの該当顧客の年月日が最新のもの)のデータを表示したいです。 要するに前回のデータを見ながら入力したいです。 表示はテキストボックスでもラベルでもかまいません。 実際には項目数は20個程度あります。 VBAでもかまいません。どのような方法があるでしょうか? 教えて頂きたいです。

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

各[顧客ID]の最新データを、「フォーム上で参照する」だけなら、 必ずしもVBAが必要であるとは限らないですよ。 「サブフォーム」という基本機能を使う方法です。 最初は「かなり面倒臭い」ですが、 実際に「手を動かして、頭を動かして」一緒に操作してみてくださいね。 ・・とはいえ、お使いのバージョンがわかりませんし、 肝心の質問文中の説明も不十分なところもあります。 とりあえず、2003を例にとり、不足分は予想を含めて説明していきますので、 以降バージョンをお使いであれば、あるいは予想が間違っていたら、 それはご自身で適宜応用くださいませ。 さて。 まずは、クエリを作り、各[顧客ID]の[最新データ]を先に拾っておきます。 ここで不足に対する予想を一つ。 [TBL_A].[ID]フィールド=[TBL_B].[顧客ID]であると見て話が進みます。 クエリを新規作成し、 テーブルリストから[TBL_A]と[TBL_B]の二つを追加し、デザインビューに戻りましょう。 上記の予想より、[TBL_A].[ID]と[TBL_B].[顧客ID]の間にリレーションを作成、 結合プロパティを「'TBL_A'の全レコードと~~」にしてやりましょう。 コレに「集計クエリ」にし、 クエリのフィールドに[TBL_A]側の[ID]を追加、集計を「グループ化」、 更に[TBL_B]の[年月日]を追加、集計を「最大」にしてやります。 コレで完成。実行すると、各顧客IDに対する最新データ(最新年月日)だけを表示してくれます。 動作を確認したら、保存して閉じておきます(例えば「Q_最新データ」など)。 続いて、メインに使うフォームを準備します。 フォームを新規作成し、レコードソースを[TBL_B]にします。 [顧客ID]を除く入力フィールドを配置しましょう。 リストボックスを配置します。 念のため。リストボックスウィザードで ・テーブルまたはクエリの~~   次へ ・TBL_A を選択    次へ ・ID・名前を選択    次へ ・(好みで)キー列を~~ のチェックを外す    次へ ・IDを選択    次へ ・次のフィールドに保存 [顧客ID]    次へ ・リストボックスに名前を付けて、完了  (ここでは「顧客リスト」とします) こんな感じで、リストボックスを作ってやりましょう。 さらに、フォームのプロパティから「データ入力用」=「はい」に設定してやると、 常に「新規データ入力」の状態にできますので、これも設定しておきます。 ここまでで一旦保存しておきましょう(名前は「F_メイン」としました)。 [F_メイン]をデザインビューで開いたまま、もう一つ、フォームを作成しましょう。 新規作成し、プロパティシートからレコードソースの右端の「...」をクリックします。 クエリビルダが動きますので、 [Q_最新データ][TBL_B]を追加し、デザインビューに戻ります。 [Q_最新データ]の[ID]と、[TBL_B]の[顧客ID]を、 [Q_最新データ]の[年月日の最大]と、[TBL_B]の[年月日]を、 上記2組にリレーションをそれぞれ設定しておきます。 クエリのフィールドに[TBL_B]の[ID]を追加、 [Q_最新データ]から、[ID]を追加、[年月日]を追加、 [TBL_B]の[メモ]を追加し、 [Q_最新データ]の[ID]フィールドに抽出条件として     [forms]![F_メイン]![顧客リスト] と指定しておきます。 クエリビルダを閉じ、デザインビューに戻ります。(保存してくださいね。) 好みのデザインでフォームを仕上げましょう。 ここは「適当」で良いです。見易く作ってくださいませ。 で、「F_サブ」と名前を付けて保存しておきます。 [F_メイン]に戻り、「サブフォーム」を配置します。 「ツールボックス」ツールバーの中に「サブフォーム」のスマートアイコンがありますので、 それをクリックして、フォーム上の任意の場所を選択すると、ウィザードが動きます。 ソースオブジェクトに「F_サブ」を選択して完了しておきましょう。 名前は「SF_最新データ」としました。 先ほどのリストボックスに、もう一手間加えます。 デザインビューで[顧客リスト]のリストボックスを選択、 プロパティシートのイベントタブから更新後処理の右端の「...」をクリック。 マクロビルダを選択してOK、マクロビルダを起動します。 まず、名前を決めます。適当で良いですが、ここでは「M_最新データ更新」としました。 マクロビルダが進みますので、アクションには「再クエリ」を選択。 下にコントロール名を聞いてくるボックスが出てくるので、 そこには先ほどの「サブフォーム」の名前、「SF_最新データ」を指定してやりましょう。 保存して、フォームに戻ります。 で、基本的な作業としては終了です。 テストして、動作を確認しておきましょう。 「リストボックスを選択したら、最新データの表示が更新される」状態なら成功。 仮にそうならなかったら、どこかの設定がうまくいっていない証拠ですので、 手順をよく見直してくださいませ。 上手く動いたら、あとはコレに肉を付けたり皮を付けたりして完成させてくださいませ。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

あなたがやりたいと思う処理を実現するための手順を書き出して、それをプログラムにまとめ、VBAプログラムとして入力することになると思います。 なお、そのやりたい処理全体で、いくつか共通する処理が見つかれば、関数等にまとめることで、プログラムは短くなりますし、見通しもよくなります。 「たったこれだけがやりたいのに、思った以上にコードを書かないといけないなあ」ということになるかもしれませんね。

関連するQ&A

  • Access 入力フォームの作成

    アクセス2007 2つのテーブルがあります。 tbl顧客 顧客番号 顧客名 住所 電話 tbl販売 販売番号(オートナンバー) 日付 顧客番号 商品 金額 tbl販売で作成した入力フォームで、 約5日分のデータを、レシートを見て一気に入れます。 次のデータを入力します。 日付|顧客番号|商品|金額 3/8|123|石鹸|200 3/8|122|洗剤|100 3/8|126|食器|700 3/8|127|鉛筆|600 3/8|125|石鹸|200 ------------------- 3/9|123|食器|200 3/9|132|洗剤|900 3/9|126|食器|300 3/9|127|洗剤|600 3/9|128|石鹸|500 同じ日付を毎回入力しています。入力に手間がかかります。 例えば、見出にテキストボックスを作成して、その日付が自動的に入力できるような方法を知りたいです。 3/8と入力 ↓自動的に日付が入る。 3/8|123|石鹸|200 3/8|122|洗剤|100 3/8|126|食器|700 また、顧客番号だけですと入力ミスが起きやすいので、確認の意味で顧客名が表示されるような方法はありますか? 3/8|123|太郎|石鹸|200 3/8|122|花子|洗剤|100 3/8|126|次郎|食器|700 のように。 よろしくお願い致します。

  • ACCESS2000 テキストボックスに入力できない

    お世話になります。 環境:Win2000SP4 ACCESS2000 「メインフォーム」から、条件入力用のテキストボックスがある「条件フォーム」を開いた時、そのテキストボックスに一切入力できなくなります。「条件フォーム」を単独で開いた時には入力できます。条件フォームはオートフォーム:単票形式で作り、フォームヘッダーにテキストボックスと実行ボタンを付加しました。以前のご質問(QNo.394049 Access2000 テキストボックスに文字を入力できない理由が判りません。)に、元が集計クエリであれば入力できないとありました。まさに元が集計クエリなのですが、条件フォームを単独で開いた時には入力できますし、結果も表示されます。 どのような情報が必要かわかりませんのでとりあえず次の内容を。。。 ■集計クエリのSQL  SELECT 使用TBL.年月日,sum(使用TBL.使用金額) AS 使用金額の合計  FROM 使用TBL  GROUP BY 使用TBL.年月日  HAVING (((使用TBL.年月日)=[Forms]![条件フォーム]![txt_年月日])); ■テキストボックス(txt_年月日)  使用可能:はい  編集ロック:いいえ  IME入力モード:コントロールなし  IME変換モード:無変換 メインフォームを経由すると、なぜ入力できなくなるかわかりません。なにか問題でもあるのでしょうか?どなたかご教授頂けないでしょうか?

  • Accessのフォームにて

    Accessの配達管理のフォーム(表形式、ある条件にて抽出済み)にて ●日付 ●顧客ID  ・  ・ ●配達者CD 上記のフィールドがあるとします。 このフォームのヘッダー部分に非連結のテキストボックスA、Bを作成し、 テキストボックスAに配達者CDを入力すると、 テキストボックスBに配達者名が表示される。 フッター部分に「印刷」ボタンを作成し、これをクリックすると、 フォーム一覧の配達者CDにヘッダー部分のテキストボックスAの 配達者CDが入力されるというシステムを作りたいのですが、 テキストボックスAの配達者CDを参照させて、テキストボックスBに 配達者名を表示させるというのがうまくいきません。 テーブルにて、配達者マスタ ●配達者CD ●配達者名 は、作成しています。 よろしくお願いいたします。

  • フォーム上での検索方法

    Windows2000/ACCESS2000 を使ってます。 顧客台帳等を作ってるのですが、フォームのそれぞれのテキストボックスで検索出来るように設定したいのですが・・・・ 例えば、フォームの電話番号のテキストボックスに検索したい電話番号を入力して検索ボタンを押すとその番号の顧客データーが表示されるようにしたいのですが、どのように設定したら良いのか分かりません。 お手数かけますが、宜しくお願いします。

  • ACCESS フォームからサブフォームのデータを更新・入力したい

    ACCESS フォームからサブフォームのデータを更新・入力したい tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。 フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェクトに所属するプロジェクトコードをサブフォームのtbl_テーマのプロジェクトコードにも反映したいのですがどのようにしたらよいでしょうか? そういったことは可能でしょうか?分かりにくい説明で申し訳ないですが教えていただけると助かります。よろしくお願いします! DBの構成 【テーブル】 tbl_プロジェクト (1件1件のIDとプロジェクトコードを持つ) (フィールド:P_ID、プロジェクトコード、件名、契約日など) tbl_テーマ(プロジェクト毎に関連のあるキーワードを持つ) (フィールド:P_ID、プロジェクトコード、テーマ)←これのプロジェクトコードにtbl_プロジェクトのデータが入るようにしたい。 tbl_顧客(プロジェクトを依頼した顧客情報を持つ) 【クエリ】 q_テーマ(プロジェクト、テーマ、顧客を抽出するクエリ) 【フォーム】 f_プロジェクト (プロジェクトを1件ずつ表示・参照・新規作成するフォーム) f_テーマサブフォーム (f_プロジェクトフォームのプロジェクトコードにづきテーマを          表示・入力するサブフォーム) リレーションはP_IDをキーに一対多で作成しています。

  • アクセスのフォームで簡単入力の仕方

    いつもお世話になっております。当方アクセス初心者です。フォームにテキストボックスを2個配置しました。1個にコードを打ち込むと別のテキストボックスにそれに該当する項目を表示させたいのですがどうすればいいのでしょうか?入力したデータを保存するテーブルが1つ、コードと項目を保持するテーブルが1つ、それぞれ用意しています。よろしくご教示願います。

  • ACCESSの技を

    ACCESS初心者なのですがデータ入力(テーブルに)フォームにてふりがなのコンボボックスを使い 顧客のふりがなで検索して顧客を選びそのままフォームの他の入力をしてテーブルに記録させる方法ってのは ありますか? 顧客が多くて顧客のリストボックスではうっとおしくそのまえに「あ」と入れたら あ行の顧客しかでないリストボックス そんなのを作りたいです。 どなたか教えてもらえませんか? それか参考になるHPを教えてください。 お願い致します。

  • ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使っ

    ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使って登録 ACCESSのフォームを使ってデータ入力を作成しています、"顧客名"をコンボボックスを使って選択するようにしていますが。 リスト外の新規顧客を入力する際には別の"顧客登録"フォームが開いて、顧客情報(読み仮名、顧客名、都道府県コード、所在地)を入力して、閉じると登録した"顧客名"がコンボボックスから選択できるようにしたいと思い、マクロを使用して(VBはよくわからないので) イベント→リスト外入力時→”顧客登録”フォームが開く 必要事項を入力し、閉じるボタンをクリック。 してみたのですが、コンボボックスのリストに先に入力した新規データが出てきません。 何が足りないのかご教授お願いいたします

  • リストボックスから選択したデーターの一つだけを取得する

    VB5.0を使っています。 WIN2000です。 MDBとVBを使っています。 まず、顧客ID・顧客氏名・電話番号  この3つが1つのデータとして横並びの文字列で、リストボックスに表示されてゆきます。 リストボックスに表示したデータを選択し、その選択したデータの”顧客ID”だけを取り出して同じフォーム内のテキストボックスにいったん出し、そこから別のフォームに飛んでその”顧客ID”を元にデータの詳細を出す、といったものを作っていますが、 今のわたしの書いてるコードだけでは、何番の顧客IDを出しても、 別のフォーム(契約入力)に行くときには同じ1番の人のデータ詳細しか出ません。 「リストボックスから選択したデーターの一つだけを取得する」 には、どのようなコードを書けばいいか、教えていただけないでしょうか・・。 リストボックス(List1)から選択してテキストボックス(Text5)に取得する際にはすでに”顧客ID”だけを取り出したいのです。 今のコードでは、顧客ID・顧客氏名・電話番号 とすべてテキストボックス(Text5)にでてきてしまいます。 Private Sub cmnd2_Click()’選択ボタンclickでリストボックスのデータを取得。 Dim ListIndex As Integer Dim SelectedIndex As Integer Text5.Text = List1.List(List1.ListIndex)'→ここでリストボックスからデータを取得しています。 End Sub

  • アクセスのフォームに簡単入力の仕方(その2)

    以前「フォームにテキストボックスを2個配置しました。1個にコードを打ち込むと別のテキストボックスにそれに該当する項目を表示させたいのですがどうすればいいのでしょうか?入力したデータを保存するテーブルが1つ、コードと項目を保持するテーブルが1つ、それぞれ用意しています。」と質問したところ、コントロールソースにDLookupを入れるようにご教示いただきましたが、テーブルにデータを反映させるには、どうすればよいのでしょうか?いつも申し訳ありませんがご教示願います(涙)

専門家に質問してみよう