一覧フォームのレコードの並び替え

このQ&Aのポイント
  • 一覧フォームにコマンドボタンを配してレコードの並び替えを実現したい
  • 一覧フォームのレコードの並び替えをリアルに切替えるための方法を相談したい
  • 現在の一覧フォームの構成を生かしつつ、昇順表示と降順表示を実現したい
回答を見る
  • ベストアンサー

一覧フォームのレコードの並び替え

常々実現したいと思っている事として、一覧フォームのリアル並び替えがありました。軽薄な知識ならではの発想かもしれませんが、レコードソースが切り替えできれば可能になるかもと考えまして、相談させていただきました。 ●実現したいこと 一覧フォームにコマンドボタン「2個」を配してレコードの並び替えを実現したい。 ●実現のイメージ 1、オブジェクトのイメージ ・クエリを2つ作成「昇順用と降順用」する。 ・一覧フォームにコマンドボタンを2つ配する。 2,運用イメージ ・一覧フォームに配したコマンドボタン「2個」で昇順と降順をリアルに切替える。 ・デフォルトは昇順とする。「開くときは昇順のデフォルト表示」 ●対象の一覧フォームと構成 ・フォーム名 「F_入出庫入力」 ・レコードソース名「Q_入出庫入力」 ・並び替えキーフィールド「商品ID」 ◆希望(分からず勝手を申し上げます) 現状の構成を生かして「あまり作り変えないで」、希望「リアルに昇順表示と降順表示」を実現させたいと思っています。 以上ですが、宜しくお願いします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.5

> コマンドボタンを1個配置し、1クリックすると昇順になり、もう一度クリック「又はダブルクリック」し直すと降順になる。 確かにボタンは一個で十分ですよね。 下記のどちらかボタンの好みに合わせて利用してみてください。 コントロールの名前は適宜変更してください。 通常のボタンとチェックボックス(非表示にする)を配置して Private Sub 並び替え_Click() If Me.並び替えチェック.Value = True Then Me.OrderBy = "商品ID asc" Me.並び替えチェック.Value = False Else Me.OrderBy = "商品ID desc" Me.並び替えチェック.Value = True End If Me.OrderByOn = True End Sub もしくはトグルボタンを配置して Private Sub 並び替えトグル_Click() If Me.並び替えトグル.Value = True Then Me.OrderBy = "商品ID desc" Else Me.OrderBy = "商品ID asc" End If Me.OrderByOn = True End Sub

eokwave
質問者

お礼

ありがとうございました。完璧にデータベース「一覧フォーム」の昇降がリアルに可能になりました。一覧フォーム「個別DBが多い為」の数が多いこともあり、極力レイアウト変更を少なくしたいと考えておりました。アドバイス頂きましたドルグボタンは希望に合致しました。ありがとうございます。具体的には、フィールドのラベルを全てドルグボタンに変更して、ワンボタンで並び替えができる様に致しました。その結果、レイアウト変更は皆無となりましたこと、ご報告させて頂きますと同時に、感謝と感激で一杯です。ありがとうございます。 追伸:コマンドボタンを採用した1つの一覧フォームで、たまたまなのか動かないフィールドがありました。全てのフィールドが動かないのでは無く、5個のフィールドの内2個だけでした。この一覧フォームをドルグボタンに変更したら問題なく動きました。結果、全てドルグボタンを採用する事にしました「一回押しでドルグボタンの色が変わり、再度押すとデフォルト色になる点も気に入りました」。問題なく動いてくれています。 動かない原因は不明ですが、対象の一覧フォームは「データボリュームが多い、フィールドにチェックボックスがある」でした。尚、不具合が起きた一覧フォーム以外で確認はしておりません。ご了承下さい。

その他の回答 (8)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.9

1,チェックボックスの個数を3、4,5と増やす時のコーティングに決まりはありますでしょうか。 ★チェックボックスの追加はコーディングではありません。  チェックボックスのの一つをフレーム内にコピペ  →フィールドのプロパティのデータタブ内の規定値を変更します 2,オプショングループを設定するとき「値」に付いてのプロセスがありますが、  デフォルト値以外にする意味はあるのでしょうか。 ★ないと思います  今、回答No.の8の続きに取り掛かっていますが  基準日を 前年、前月、前日、今日、翌日、翌月、翌年の7つの計算の為  フレームのデフォルト値を4番目の今日の4にしています

eokwave
質問者

お礼

ご面倒をおかけしました。本当にありがとうございました。Accessの新しい機能を知ることが出来て利用の幅が広がりそうです。尚、コーティング「ルール含め」は分かっていませんが、教えて頂いたコーティングは、データベス「名前:Access操作」に保存しています。ありがとうございます「感謝」。 今回は、作成済のデータベースを更に「もっと」使い易いものにしたいと考え、今般テーマにてご質問させて頂きました。尚、作成済フォーム「一覧フォーム」の数が多いこともあり、出来るだけ手間「フォームレイアウトを極力踏襲」を掛けず行いたいとの気持ちが強く、結果的にドルグボタンを採用する事に致しました。具体的には、フィールドのラベルを全てドルグボタンに変更し、ワンボタンで並び替えができる様にしました。以上でございますが、親切なアドバイス感謝致しております。今後とも宜しくお願いします。ありがとうございました。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.8

 今晩は、 1.一覧フォーム名は最初のお考え通り昇順表と降順表  検索条件はクエリに組み込みます、  フォームのプロパティー→データタブ→レコードソースの右端の…で  クエリビルダ―より作成 2.プロシージャは命令文の事ですが、VBA,時にはコーディングと呼んでいます  添付図は「一覧表_Click」を検索したところです  ・カレントプロシジャー:命令文の最小単位  ・カレントモジュール:Purivete Sub()で始まりEnd Subで終わる   複数のプロシジャー  ・カレントプロジェクト:1つのファイル内の全てのモジュール 3.コーディングの入口は2通りあります  3-1.ボックスのイベントの右端の…から  3-2.デザインリボン→コードの表示→左のプルダウンからオブジェクトを   選らび→右のプルダウンからイベントを選択すると   一組のモジュールの最初と終わりのプロシジャーが作成されます      4.等号の=は、少し違和感を抱かれるかも  A=A+1  数学では間違いですが右の式を計算して左の値にする 5.是非やっておくこと  このコーディング画面のツール→オプション→編集  →変数の宣言を強制するにチェックを入れる

eokwave
質問者

補足

ありがとうございます。初めての機能でしたが何とか使える様になりました。ご面倒ですが2つ質問させて貰って宜しいでしょうか。 1,チェックボックスの個数を3、4,5と増やす時のコーティングに決まりはありますでしょうか。 2,オプショングループを設定するとき「値」に付いてのプロセスがありますが、デフォルト値以外にする意味はあるのでしょうか。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.7

VBAを「if 一覧表 = 1 Then DoCmd.OpenForm "昇順用" Else DoCmd.OpenForm "降順用"」と 一行にしましたが、コーディング時に「docmd.」と入力すると次の入力項目がリストされます。 このリストをメソッドと呼ぶそうです。 メソッドの詳細は参考URLをご覧ください このメソッド群の利用で、マクロは使っていません イベントはコマンドに限らずどのようなボックスでも発生させる事はご存知ですね 今回はオプショングループのクリックイベントです

参考URL:
https://www.feedsoft.net/access/guide-vba/guide10.html
eokwave
質問者

お礼

ありがとうございました。

  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.6

No5の訂正です。 通常のボタンとチェックボックス(非表示にする)を配置して は 通常のボタンだけでいけました。 Private Sub 並び替え_Click() If Me.OrderBy = "商品ID desc" Then Me.OrderBy = "商品ID asc" Else Me.OrderBy = "商品ID desc" End If

eokwave
質問者

お礼

ありがとうございます。早速設定してみます。

  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.4

No2です。 もしかして2007でしたでしょうか もし DoCmd.SetOrderBy が動かなかった場合は 昇順 Me.OrderBy = "商品ID ASC" Me.OrderByOn = True 降順 Me.OrderBy = "商品ID desc" Me.OrderByOn = True にしてみてください。

eokwave
質問者

お礼

申し訳ございませんでした。ACCESSのバージョン「2007」ですが未案内でした。こちらのプロシージャ記述でトライさせていただきます。

eokwave
質問者

補足

一覧フォームにコマンドボタンを2個配置し、一方を昇順用にしもう一方を降順用にする。問題なく動きました。ありがとうございます。 そこで一つお尋ねしますが、コマンドボタンを1個配置し、1クリックすると昇順になり、もう一度クリック「又はダブルクリック」し直すと降順になる。その様な運用方法は可能なんでしょうか。フォームの面積及びオブジェクトの配置構成からお尋ねしますが、知識軽薄で欲張りなので聞けるんだなーと思って下さっていいです。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

今晩は ●実現したいこと  一覧フォームにコマンドボタン「2個」を配してレコードの並び替えを実現したい。 ★1.コマンドボタンの値はフォームを開く前に確定していなければなりません   開いてから変更しても反映してくれません   従って一覧フォームを開くフォームにコマンドボタンを配置します。  2.コマンドボタンではなく添付のオプションッグループが先々有用です。   グループ内の項目は追加の都度連番が付き  、一つだけONになりそのグループ(枠囲いの名前)の値となります  仮にこの名前を「一覧表」とするとVBAは --------------------------------------- Private Sub 一覧表_Click() if 一覧表 = 1 Then DoCmd.OpenForm "昇順用" Else DoCmd.OpenForm "降順用" End Sub --------------------------------------------------

eokwave
質問者

お礼

早速のアドバイスありがとうございます。トライさせていただきます。

eokwave
質問者

補足

お世話になります。この機会に知識を得たいと考えておりますので、ご理解いただければ幸いと思います。 オプションボタンは初めての体験でありまして、アドバイスに順応出来ていません。下記の通り作業いたしましたが全体像が把握できず、思考停止状態であります。申し訳ございませんが、下記の内容「オブジェクト」でのプロシージャ記述をご教授いただければと思います。すいません。 [作業順] 1,コントロールのオプショングループ「コントロールウィザードの使用」を選択。 2,ラベルの指定でラベル名に「昇順」「降順」を設定。 3,次のオプションを規定するで「昇順」を選択。 4,ラベルの値設定でデフォルト「昇順=1」「降順=2」を選択。 5,コントロールの選択で「デフォルト」オプションボタンと枠囲み選択。 6、オプショングループの表題に一覧表としました。 [オブジェクト] 一覧フォーム名:AccessDB 検索フィールド:オブジェクト 宜しくお願いします。

  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.2

マクロがない場合、それぞれのボタンと開く時のイベントプロシージャに下記を入れてください。 昇順のボタンと開く時 DoCmd.SetOrderBy "商品ID" '昇順 降順のボタン DoCmd.SetOrderBy "商品ID desc" '降順

eokwave
質問者

お礼

早速のアドバイスありがとうございます。トライさせていただきます。

  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.1

こちらに手順がありますので参考にしてください。 最初に文書で説明がありますのでそこを読んでから画像を見てください。 Accessのマクロで並べ替え用のボタンを作成する方法 https://dekiru.net/article/15631/ > デフォルトは昇順とする フォームの開く時のイベントで上記のサイトで昇順とするマクロを作成してください。

eokwave
質問者

お礼

早速のアドバイスありがとうございます。

関連するQ&A

  • コマンドボタンでレコードソースを変更

    「OSとアプリケーション種類」 Windows10、ACCESS2010 「やりたいこと」 簡単な方法で、一覧フォームにコマンドボタンを配して「昇順、降順、未設定」の3通りの表示を実現させたい。 「考えたこと」 予め3つのクエリ「昇順、降順、未設定」を作成しておき、フォームのコマンドボタンでクエリを切り替えできれば「簡単に実現」できるかもしれない。 (簡単発言の背景) 1,レコードソースを変更すれば実現できるのではとの単なる思い付きです。しかし、コマンドボタンのワンクリックで可能にできるスキルがない。 2,対象DBの数「数十個」が多くできるだけ作業の負担を軽減させたい。 「気になること」 コマンドボタンをクリックした時点でフォームの並び替えに即反映の有無。 「他の手段について」 一般的なやり方など、アドバイスがありましたらお願いします。

  • アクセスのデータの並び替え

    アクセスで、データを表タイプのフォームに出して、フォーム上で回数フィールドを昇順・降順でボタンを使って並び替えをしたいのですが出来ますでしょうか? 現在は、右クリックして並び替えています。 宜しくお願いします。

  • [ACCESS]フォームで、レコードを抽出して編集するには?

    ACCESS2003、初心者です。 納品テーブルを作成して、それをフォームで入力しています。 フィールドは、 ID,製品名,セイヒンメイ,メーカー,仕入先,単価,在庫数,残高 です。 納品テーブルのレコードを元にフォームを作成したいのですが悩んでいます。 (1).納品テーブルから、表形式で商品レコードを並べて表示させる (2).セイヒンメイでグループ化。 (3).セイヒンメイを昇順で並び替え (4).在庫数、残高を編集 (1)~(4)の作業を行いたいのですが、いろいろ試した結果、うまくできません。 テーブル作成クエリ→実行→在庫フォーム開く(この場合のソース元はクエリ) のパターンで可能だったのですが、フォームを開いた時にグループ化や並び替えを行う方がスマートなので実現したいのです。 もしくは、フォーム上でコマンドボタンを押せばグループ化や並び替えができればそれでも構いません。 いろいろ調べて、SQL(GROUP BYやHAVING)を使わないと駄目なようですが、どのようなコードを書いたらよいのでしょうか?

  • 並び替えフィールドをコマンドボタンで変更したい

    帳票フォームを使ってデータを一覧表示していますが、フォームにコマンドボタンを配して、並び替えのフィールドを変更したいと思っています。 [データベースオブジェクト] ・テーブル名:偉人賢人テーブル「フィールド:ID、国、名前、分野、功績情報」 ・フォーム名:偉人賢人一覧フォーム ・レコードソース名:偉人賢人クエリ「名前フィールドの並び替え(昇順)」 ・クエリソース:偉人賢人テーブル [フォームの配置] ・詳細欄:ID、国、名前、分野 ・ヘッダー:功績情報 以上ですが、宜しくお願いします。

  • Excel の並び替え機能について

    Excel の並び替え機能について質問です。デフォルトでは「記号・数字・アルファベット」 の順に昇順/降順されますが、これを「記号・アルファベット・数字・(日本語)」 の順に並び替える方法を教えてください。 並び替えオプションでやってみたのですがうまくいきません。宜しくお願いします。

  • Access2000 レポートの並び替えについて

    こんにちは。Access2000について質問です。 フォーム上で指定された項目で並び替えをし、それをそのままレポートの並びにしたいのですが、それがどうも上手くいきません。指定する項目はコンボボックスで複数有り、昇順・降順も指定できるようになっています。レポートを開くときにそのフォームで指定されている項目を読み、コードで並び替えを指定しているのですが、どうやら元のテーブルのキー項目の昇順で表示されているようなのです。「並び替え/グループ化」(青いカッコのもの)は、並びが固定されてしまうので使用したくないのです(実際いつも使っていません)。 同じような現象になったことがあるという方、または解決方法をご存知の方は、回答よろしくお願いします。

  • アクセス2003 - レコード追加について

    同期の代理質問です↓ 新規レコードを入力するフォーム(サブフォームも作成)を作り、コマンドボタンを押すと、サブフォーム(全レコード表示させている)に入力したレコードを追加させる場合、どうしたらいいのでしょうか?   ちなみに、サブフォームに追加されたレコードは、 自動的に昇順に並べ変わるしくみにしたいのですが・・・ 宜しくお願い致します☆

  • Accessでレコードの保存をせずにフォームを閉じたい

    Accessでデータベースのレコード追加を行うフォームを作成しています。 コマンドボタン(1)をクリック→新しいレコードの追加 コマンドボタン(2)をクリック→フォームを閉じる としています。(ウィザードを使用して、埋め込みマクロ?を設定しています。) コマンドボタン(1)でレコードが追加されるのは問題ないのですが、 コマンドボタン(2)をクリックした場合も、レコードが追加されていることに気がつきました。 一般的に入力する人は、 データを追加しようと思って入力していたけれど、 途中でやめてフォームを閉じることってありますよね? そういう場合にレコードが追加されてしまったら問題だと思ったのです。 ですが、どうしたらレコードの追加をせずにフォームを閉じられるかがわかりません。 それって可能でしょうか? Access初心者です。難しいVBAとかはまだよくわかりません。 何か方法、アドバイス等ありましたら よろしくお願いします。

  • 多元(多軸)的に一覧表示できるCMSを教えて下さい

    コンテンツ(htmlぺージ)をいろいろな軸(時間、場所、人名、タイトル名、カテゴリ等)で絞って一覧表示できるようにしたいと考えています。絞り込む条件によって、さまざまな重複表示を可能にしたいのです。 静的なhtmlで作成すると、一覧表の更新も自分で行わなくてはならず、ツリー構造での一覧を作るのがせいぜいで、いろいろな切り口で一覧に出そうとすると大変です。ここを何とかしたいのです。 Movable typeやxoopsと呼ばれるものは、データベースでコンテンツを管理するということなので、自分の希望の軸でコンテンツ一覧を表示できるのではないかと考えたのですが、専門の本を読んでも、入力日付毎の管理と、カテゴリ-サブカテゴリ管理(結局ツリー構造管理)、キーワード検索一覧表示くらいの管理しか載っていません。 以下のようなコンテンツを登録すると、様々な軸で絞り込んで一覧表示できるコンテンツ管理ツールは無いでしょうか? 入力日順一覧(昇順/降順) 出版日順一覧(昇順/降順) 作家作品一覧(年度昇順/降順) 作家作品一覧(タイトル昇順/降順) カテゴリA一覧(昇順/降順) カテゴリB一覧(昇順/降順) カテゴリ?一覧(昇順/降順) カテゴリZ一覧(昇順/降順) サブカテゴリAA(昇順/降順) サブカテゴリAB(昇順/降順) ・・・・ サブサブカテゴリAAA(昇順/降順) サブサブカテゴリAAB(昇順/降順) 要するにツリー構造でないコンテンツ管理がしたいです。既存のCMSでそのような一覧表示は可能でしょうか。 どうすればよいか、参考になるページや本などあったら教えてください。

  • Excelで、リストボックスの値によってVBAの記述を変えたい

    エクセルの表(データベース)を 並び替えるマクロを作っています。 コマンドボタンを押したらあらかじめ登録された 条件で並び替えされる、というところまではできました。 (ここでいう登録とは私が条件指定してVBAに記述したものです) そこで質問なのですが、ユーザーフォームの上で 並び替えの条件(優先順位・降順、昇順)をユーザーに 指定してもらい、ボタンを押したら並び替えされる、 というものを作りたいのですが可能でしょうか。 なぜこんな面倒なことをするかというと、 複数のユーザーが扱うデータベースで、 並び替えの操作を簡略化したいのと、 間違った操作によるデータベースの破壊を 防止したいからです。 まずユーザーフォーム上のリストボックスの中に 優先順位をかける項目を入れておき、それを3つ 作りました。(並び替えの条件が3つまであるので) 次に各リストボックスの横にラジオボタンを置き、 降順、昇順を指定できるようにする。 (ここで、ラジオボタンのどちらかしか選択できないように したいのですがその方法もわからないので教えてください) そして、それぞれの指定された結果でVBAの記述(値) を変えてコマンドボタンを押したら並び替えされる、 という風にしたいのです。(あくまでイメージですが) Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, ・・・とつづく記述で 上の記述のRange("A2")と、xlDescendingの値を ユーザーフォーム上で選んだ結果によって 変更したい、ということなんですが、こんなことって 出来るものでしょうか。もしくは同じ様な事を 可能な書き方とかがあれば教えて頂きたいです。 よろしくお願いします。

専門家に質問してみよう