• ベストアンサー

Accessで単語テストフォームを製作するにあたって

初めてaccessを使います。おそらく本来の使い方(ビジネスなど)と違うため、作り方を検索したり、本屋で本を買おうと思っても知りたいことが書いてないです。(初心者のため、何が知りたいのかもわかっていないかもしれません) 今、作成しているのですが、リストについての操作方法がよくわかりません。 テーブルは二つあります。 両方のテーブルに 番号、単語、訳 の3つのフィールドを作成しました。 作成したいフォームは (1)リストボックス(1)で使いたいテーブルを選択 (2)(1)で選んだテーブルのデータがリストボックス(2)に表示 (3)(2)で表示された単語を目的の単語をみつけてクリックしてリストボックス(3)に表示 このとき選択した単語番号+30番までなどをリストボックス(3)に表示したいです。 (4)選択した単語+何番までを表示するかを指定したいです。 指定方法としてオプションコントロールでオプションボタンを作成して、10個や20個や50個などをリストボックス(3)に表示できるようにしたいです。 最終的にはテーブルを増やして様々な単語テストが行えるようにしたいです。 実現したいこととして(例:ある単語帳51番から100番までテストしたい) ・単語帳を選択→番号と単語と訳のリストが出てくる→50個の単語が表示されるようにオプションボタンで50を選択→51番の単語を選択→51番から100番までの単語がリストに表示される→印刷ボタンを押すと表示されたリストの単語がレポートに出力され、印刷される 上記を実現したいと考えています。 よろしくお願いします。 また、参考になる本やHPなどの紹介もあわせてよろしくお願いします。

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

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

単語帳: テーブル [単語帳]__整数 [番号]____整数 [単語]____テキスト [訳]______テキスト インデックス:単語帳 primaryKey_単語帳__昇順 ___________番号____昇順 このようなテーブル[単語帳]を用意して以下のデータを登録。 単語帳: テーブル [単語帳]_[番号]_[単語____]_[訳] 単語帳1______1___book_______本 単語帳1______2___pen________筆 単語帳1______3___chair______椅子 単語帳2______1___love_______愛 単語帳2______2___sadness____悲哀 先ずは、[クエリ1]を作成して列[単語帳]に登録されている単語帳の種類を抽出表示。 クエリ1: クエリ [単語帳] 単語帳1 単語帳2 次に、[クエリ2]を作成して'単語帳1'に属する単語を抽出表示。 クエリ2: クエリ [番号]_[単語]_[訳] ____1___book___本 ____2___pen____筆 ____3___chair__椅子 つまり、単語帳は幾らでも増やせることが判ります。 また、それぞれの'単語帳'に属する単語も容易に抽出表示できることが判ります。 で、先ずは、かかるテーブル設計で'単語帳'をフォームで如何に登録していくかがテーマ。 その場合、列[番号]は削除や追加で発生させたりリナンバーさせたりがチトややこしいですね。 クエリ3: クエリ [カウンタ]_[単語]_[訳] ________1___book___本 ________2___chair__椅子 ________3___pen____筆 列[番号]の管理が面倒と思うのであれば、このように抽出・参照を綴り昇順にしてカウンタを付与。 そういう手もあります。 リストボックスへの表示の前にテーブルでのデータの管理要領、参照要領の思案が先だと思いますよ。 なお、参考書、入門者の類は読んだことがありません。 Access のヘルプ文が基本中の基本参考書だと思いますよ。 先ずは、ヘルプ文を熟読されたがいいです。

j-time
質問者

補足

大変ありがとうございます! テーブルとクエリについて上記のように作成し、クエリを実行したところ望む結果を得ることができました。 またフォームについてリストを選択することで新たなリストに代入し、表示させることも実現しました。 後は最終的に表示させるリストの単語数なのですが、 オプションコントロールで何個かを指定したいです。 現在は、リストボックス(2)から(3)へ指定したレコードから30個指定するのに クエリの抽出条件で Between [Forms]![単語テスト]![単語リスト] And [Forms]![単語テスト]![単語リスト]+29 として30個表示させることはできました。これをオプションボタンで可変にするにはどうしたらよいでしょうか? 単語テスト→フォームの名前 単語リスト→質問文のリストボックス(2)のこと です。

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#3です。乗りかかった船でやってみました。 単語帳1フォームのヘッダーに、コンボボックスと、印刷プレビューボタンを設けて、単語帳1というレポートを作成しておき、 1.選択したレコードから、コンボボックスで選択した個数分フィルター Private Sub コマンド6_Click() Me.Filter = "ID >= " & Me.ID & " AND ID <= " & Str(Me.ID + コンボ9.Value - 1) Me.FilterOn = True End Sub 2.1でフィルターをかけた範囲をレポートプレビュー Private Sub コマンド11_Click() If IsNull(コンボ9.Value) Then Exit Sub DoCmd.OpenReport "単語帳1", acViewPreview, , "ID >= " & Me.ID & " AND ID <= " & Str(Me.ID + コンボ9.Value - 1) End Sub 単語帳の数だけ、フォームとレポートを作らないといけないのが面倒ですね。

j-time
質問者

補足

ありがとうございます! 大変ありがたく参考にさせていただきます。 現在は#1様の回答を参考に作成を始め、リストの表示までこぎつけることができました。 今後作っていくうえで、参考にさせていただきます。 今は#1様の補足に書き込んだことについて困っています。もしアドバイスなどあればよろしくお願いします!!

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

Huskey2007さんの回答は実践的で参考になりますね。 素人なりに別の切り口で考えてみました。 Excel発想を離れ、Accessの機能を活用します。 1.単語帳リスト(ID,単語帳名)、単語帳1(ID、単語、訳)、単語帳2というテーブルを作成します。単語帳リストには、単語帳1、単語帳2というデータを入れます。簡単にするため、各IDは数値型で考えています。 2.各テーブルを元に、フォーム/新規作成で自動で作成できる帳票フォームを作成しておきます。フォームの名前はテーブルと同じ名前にして保存しておきます。(混乱の元なので本当はお勧めしませんが、説明を簡単にするために採用しています) 3.単語帳リストのフォームの詳細フィールドにコマンドボタンを配置して、次のコードを登録します。 Private Sub コマンド4_Click() DoCmd.OpenForm Me!単語帳名 End Sub これで、単語帳リストフォームから、単語帳の名前の所のボタンをクリックすると、対応する単語帳の帳票フォームが開く様になります。 4.次に単語帳1のフォームを改造します。詳細フィールドに、コマンドボタンを配置して、次のコードを登録します。 Private Sub コマンド6_Click() Me.Filter = "ID >= " & Me.ID & " AND ID <= " & Str(Me.ID + 10) Me.FilterOn = True End Sub これで、選択したレコードを始点に、+10個目までのレコードがフィルターがかけられて表示されます。単語帳2についても同様のフォームを作成します。 この10を帳票フォーム上のヘッダーに設けたコントロールから選択できる様にすれば、お望みの事に近い機能が実現できると思います。 (注)コマンドボタンの4,6は自動で付けられた成り行きの番号です。念のため。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>本来の使い方(ビジネスなど)と違うため 一見したところ、ビジネスの課題ではないが、特殊とは思いません。 初心者にしては、コントロール(フォーム上の部品、リストボックスやオプションボタンなど)を使いすぎているとは思いましたが。 ーー だからアクセス独自というよりも、コントロールの使い方の解説書を読むべきだとおもう。 >知りたいことが書いてないです うそです。この程度のことは、書いてあるが、自分で自分の課題に当てはめられないだけです。 ー 何番から何個選択は、テキストボックスなどの方が良いのではと思う。 個別飛び飛び選択ならリストボックスのマルチセレクト機能を使うとか。 2つー10個以内ぐらいの中から1つを選ぶなら、コマンドボタンを2つ以上並べて、クリックしたほうで、選別する手もある。 その後フォームの切り替えが必要で、この件も勉強が必要。 ーー 気持ちを伝えるのは質問のような文章になるが、質問ー回答という面からすると、余分な文章が多く、質問の内容を的を絞って、箇条書きにでもして質問すべきです。 ーー あるコントロールで選択ナリしたことを、別のコントロールやクエリに渡すにはどうするかが、勉強する課題だと思う。 Requeryの問題とか。

j-time
質問者

お礼

おっしゃられる通りで、実力が極度に不足しています。 本来ならばもっと時間をかけてやるべきなのでしょう。 しかし、すぐにでも使いたいということと、仲間内でしか使わないことから、見栄えや、高機能である必要はありません。 当初「これくらいのことならすぐできるものなはず」と思い、 できなかったため質問させていただきました。 簡単と思っていたことがいかに難しいのか、今感じています。 自分の実力をまったく把握できていませんでした。 今後時間が作って少しづつ学んでいきたいと思います。 アドバイスありがとうございます!!

関連するQ&A