Private Sub Form_Load()
Me!年 = DLookup("num", "TsystemProperty", "name='月TODO開始年'")
Me!月 = DLookup("num", "TsystemProperty", "name='月TODO開始月'")
End Sub
Private Sub 年_AfterUpdate()
CurrentDb.Execute "UPDATE TsystemProperty SET num = " & Nz(Me!年,"NULL") & " WHERE name = '月TODO開始年'"
End Sub
Private Sub 月_AfterUpdate()
CurrentDb.Execute "UPDATE TsystemProperty SET num = " & Nz(Me!月,"NULL") & " WHERE name = '月TODO開始月'"
End Sub
SELECT
DISTINCT a.グループ
FROM
MT_成績 AS a INNER JOIN MT_成績 AS b
ON a.都道府県 = b.都道府県
AND a.グループ = b.グループ
WHERE
a.順位 = 1 AND b.順位 = 2
OR
a.順位 = 2 AND b.順位 = 1;
このクエリ(Q_成績)と元の MT_成績 をグループで結合したクエリを作成します。
SELECT
a.*
FROM
MT_成績 AS a INNER JOIN Q_成績 AS b
ON a.グループ = b.グループ;
サブクエリで一つにまとめるなら、下記になります。
SELECT
a.*
FROM
MT_成績 AS a INNER JOIN
(
SELECT
DISTINCT a.グループ
FROM
MT_成績 AS a INNER JOIN MT_成績 AS b
ON a.都道府県 = b.都道府県
AND a.グループ = b.グループ
WHERE
a.順位 = 1 AND b.順位 = 2
OR
a.順位 = 2 AND b.順位 = 1
) AS b
ON a.グループ = b.グループ;
SELECT
a.*
FROM
MT_成績 AS a INNER JOIN MT_成績 AS b
ON a.都道府県 = b.都道府県
AND a.グループ = b.グループ
WHERE
a.順位 = 1 AND b.順位 = 2
OR
a.順位 = 2 AND b.順位 = 1
ORDER BY a.グループ, a.順位;
ひょっとして、Wordの表データは、セル内で改行があるものですか。
だとすると、テキストボックスにコピペしたものでは、ちょっと難しいですね。
セル内改行とレコード区切りの改行の区別がつかないので。
下記にWordの表をエクセルに取りこむVBAコードのサンプルがあります。
【VBA】Word文書内の表をエクセルに取り込む | あじゅWeb
Tableオブジェクトを使って、Wordの表をExcelに貼り付ける:VBA/マクロ便利Tips - @IT
上記をAccess用改造すれば、ワードファイルのパスと何番目のテーブルかを指定すれば取り込むことは可能だと思います。
↑タグ部分がすっかり消えていたので書き直します
xmlに変換して確認したのですが、
で区切られている部分をフィールドに分けて
で区切られている部分をテーブルに分けたいです。
今回の件がwordの中の、表の中身を抜き取ってアクセスにインポートしたいという作業になるので
一旦xmlに変換してそこから表の部分だけコピペというのも手間がかかるように思い、
やはりwordから表の部分を目視でコピペで完結したいのですが…VBAでの処理は難しいでしょうか…?
xmlに変換して確認したのですが、
で区切られている部分をフィールドに分けて今回の件がwordの中の、表の中身を抜き取ってアクセスにインポートしたいという作業になるので
一旦xmlに変換してそこから表の部分だけコピペというのも手間がかかるように思い、
やはりwordから表の部分を目視でコピペで完結したいのですが…VBAでの処理は難しいでしょうか…?
思ったより問題が単純ではなかったので新しくスレッドを立てます。
上記コードで、別データを扱うことになり、10列ごとに改行してレコードを新しくしたいです。
現在は全てタブ区切りになっています。
spritstrという関数を見つけましたが、accessでは使えなそうです?
どのようにコード指定すればよいでしょうか。
ごめんなさい。そもそもクエリで設定すれば良かったですね…クエリで設定し、解決しました。
しかし、プロパティで指定する条件とマクロで指定する条件が異なることは勉強になりました…
お騒がせしました。
以前教えていただいた、並べ替え条件のプロパティ設定について
更新ボタンにも設置したく、マクロに組み込もうとしたのですが
エラーが出てしまいます。
マクロ>並べ替えの設定>「並べ替え」に下記条件をセット>「式を解析できません」とエラーが出る。
1つずつつまずいて、申し訳ありません。
VBAでもよいので、教えていただけると助かります…
ファイルの内容を見ました。
間違いは下記の部分です。
テーブル名が間違ってます。下記に修正してください。
これで正常動作するのを確認しました。
ファイルの方送信致しましたので宜しくお願い致します。
早急にご回答頂きありがとうございます。
Formatで書式をし、動作確認を行いました。
エラーの出る一台を調べたところ、そのPCだけ日付書式設定が 和暦となっており、
こんなところに原因が!と考えてしまいました。
思うように動くようになり、本当に助かりました。
ありがとうございました。😊
OSの日付書式設定が他のPCと異なっているのが原因だと思われます。
OSの日付書式設定の影響を受けないようにFormatで書式を設定するといいでしょう。
この部分を下記に修正
TMGさんの回答で解決済みですが、下記のような方法もあります。
オプショングループで50音選択 高速版 - hatena chips
上記のサンプル通りに設定すれば動くはずです。
動かないならどこか間違っていると思います。
どうしてもわからなければ、このページの右カラムの下の方に「ファイル送信フォーム」がありますので、該当ファイルを送付してもらえればそれをみて原因を探れます。
ファイルには関係するテーブル、クエリ、フォームのみにしたものを送付してください。
追記です。
もう一度確認したところOp段選択の更新後処理が間違っていました。
訂正すると、レコードに検索キーがないと出たり、式に未定義関数・・・というのは出なくなりましたが、今だにクリックしてもなんの反応もありません・・・
なるほど…1文字だけ抽出しないといけなかったですね。ウッカリしていました。
また、選択クエリで確認すべきというアドバイス、ありがとうございました。
選択クエリでRight([管理番号],3)がどんな値を取得しているのか確認すると状況がつかめるかと思います。
おそらくやりたいことは下記の式になるのではないでしょうか?
ありがとうございます。参考にさせて頂きます。
その「ID」は本当に必要ですか?
例えば「タイトル」は主キーになりませんか?
任意の並び順が欲しいのであればそのまま「並び順」フィールドを作って数値で管理し並び替えればいいと思います
これ以上は「ID」をどう使いたいのかも分かりませんし、当初の質問の内容ともずれているので運用の想定も含めて新しく質問を作ってもらえればと思います
「年月を変更する際は~変更する」だと、それ以外の場合は変更したくないということですよね?データはどこかに記録しておかないと消えてしまいます。データの記録が必要ならやはりテーブルを持つべきでしょう
システム上で1つだけあればいいデータを保持したいのならたとえば「TsystemProperty」というテーブルを作って
name(テキスト型・主キー)
num(数値型)
とすれば、フォーム上からなら
の形で参照することができます。
非連結のコントロールで読み込み、変更もしたいならVBAでフォームの読み込み時にデータの読み込み、各コントロールの更新後処理でテーブルのデータ更新を行えば実現できます
少し落ち着いて頭が整理できてきました。上書きするときは更新クエリを使えば良いですよね。ちょっと考え直してみます。
下記のサンプルような感じのフォームではどうでしょうか。
月単位でデータ入力する場合の日付入力の効率的なUIを考える - hatena chips
年と月を別のコンボボックスにするのは必ずしも使いやすいとか限らないかも。
別のコンボボックスにしたとしても、年月でフィルターをかける、既定値を設定する、などの部分は参考になると思います。
間違いました…すみません。テーブルのフィールド名はそれぞれのプレフィックスを外した名前になります。
「完了日」は日付/時刻型です。
テーブルの名づけが良くないのですが、月毎にあるわけではありません。
月毎のTODOで、例えば完了日は終わったことを自覚するために入力するためのもので
次の月になったら上書きしていく予定です。
色々説明不足でお手数をおかけします。
これはテーブルのフィールド名で間違いないですか。フォーム上のコントロール名のような感じですが。
あと「txt完了日」フィールドのデータ型は日付/時刻型ですか。
名前からテーブルが月ごとにあるような感じの名前ですが、そういうわけではないですよね。
以上、ご回答お願いします。
失礼いたしました。
月TODOテーブル
「ID」(主キー)
フィールドは「txtタイトル」「txt担当者」「txtメールテンプレID」「txt完了日」になります。
また「btnメール作成」も設置予定です。
ちなみに主キーについてですが、オートナンバーにすると希望の順番に並ばないので現在は手動でIDを設定しているのですが、今後、慣れないユーザーに使わせる際には意図が伝わらないかと思っています…ID発行について良いアイデアはありませんでしょうか。
とりあえず、現状のテーブル設計を提示してください。
テーブル名、フィールド名、主キー設定
追記
次月にTODOを持ち越した際、別のTODOが追い越す可能性はないため、年月を変更する際はリセット(リセットボタンを押す)してから変更する予定です。
やったことはないですか、下記に方法が紹介されてます。
■T'sWare Access Tips #112 ~エクスプローラ風のファイルコピー~
hatena様
本当にありがとうございました。
感謝いたします。
前のクエリでグループだけ表示させるようにして、DISTINCTで重複を排除します。
(デザインビューでは「固有の値」を「はい」に設定する)
このクエリ(Q_成績)と元の MT_成績 をグループで結合したクエリを作成します。
サブクエリで一つにまとめるなら、下記になります。
失礼しました。
以後、気をつけます。
何卒宜しくお願い致します。
画像はリンクではなくアップロードして直接表表示させることかできますので、それをご利用ください。

hatena様
図々しいですが、もう一点、ご教示をお願いします。
https://gyazo.com/1faca64f1d679d0793248befd1696ae8
1位、2位は表示できました。
https://gyazo.com/574acf763874b19bbdf18ce5faf397ec
条件を満たしたグループ全部を表示させたい場合はどのようにするのでしょうか?
教えていただいたコードを自分なりに改良したのですが、クエリが何も表示されなくなります。
本当にお手数かと思いますが、ご教示をお願いします。
できました。
いつも正確な回答ありがとうございます。
本当に感謝します。
ありがとうございました。
同一グループ内で順位1、2が同一都道府県のレコードを抽出したいということですよね。
いいかえると、
同一グループかつ同一都道府県のレコード同士を比較して片方が1位もう一方が2位、または片方が2位もう一方が1位のレコードを抽出すればいいということです。
この条件ならサブクエリを使う必要はないです。
「同一グループかつ同一都道府県のレコード同士を比較」の部分はグルーブと都道府県で自己結合すればOKです。
おっしゃるとおり、フォームを開く段階で抽出条件が設定されており、
外したところうまく行きました。
勉強になりました。ありがとうございます。
「F商品」のレコードソースには何を設定していますか?
クエリの場合はそのSQL文をコピペしてください
回答自体には(今のところ)変わりありません
用途の異なるフォームで抽出しようとしているようなので元データから抽出条件が設定されているか、別な抽出処理で上書きされているんじゃないかと思います
その後、絞り込みが反映されず通常のF商品が開かれるようになりました。
作ってみたのですが、入荷テーブルの内、1件しか表示できませんでした。
ちなみにどういう時に使っているかというと、入荷テーブルに入荷した商品データをインポートするボタンがあり、ボタンを押すとインポートするのですが、同時に今インポートしたデータを商品フォームで開きたいです。
コピペしてみたのですが、うまくいきませんでした。私の設定にミスがあるのかもしれません…色々ご検討いただきありがとうございます。
こちらに変更した後、数回テストしたところ、うまく動いてくれています。ありがとうございます!