Microsoft Access 掲示板

views
4 フォロー
6,283 件中 3,481 から 3,520 までを表示しています。
3
ほほ 2021/06/28 (月) 21:04:07 e27f2@0af37

mayu さま
hiroton さま

一時はどうなるのか心配していましたが、
お陰様で思い通りのレポートを出力することができました。
クエリの使い方次第で色んなことが出来そうですので
もうすこし勉強していこうと思っています。
ありがとうございました。

9
おにこ 2021/06/28 (月) 15:45:27 3e392@b524f

hiroton様
回答ありがとうございます。
おかげさまで実装できました!!
稚拙な文章にも関わらずご理解いただき大変感謝しております。
またお力を貸して頂けると嬉しいです。

11
hiroton 2021/06/28 (月) 15:25:53 38cf2@f966d >> 4

間違える手順もなさそうですが念のため
画像1


動作チェックとして、「再クエリ」のアクションを削除して実行してみてください。テキストボックスに文字を入力するだけになりますがエラーがでますか?

次に、テキストボックスの名前とマクロで設定するコントロール名を変更して試してください(たとえば「test1」とか)

あとは・・・ボタンと非連結のテキストボックスは同じフォームの上にありますよね?

10

ありがとうございます。なんどもすみません。
教わったそのとおりにやってみましたが、「あ」のボタンを押すと
「コントロール名"抽出用カナ"が正しくないか、存在しないコントロールを参照しています」とエラーが出ます。

配置したテキストボックス、作成したクエリ、埋め込みマクロのコントロール名 すべて確認しましたが、抽出用カナとして間違っていないはずなのですが、何がいけないのでしょうか?

8
hiroton 2021/06/28 (月) 14:34:26 修正 38cf2@f966d

たとえばレポートフッターにテキストボックスを配置しレコードソースを次のようにします

=Sum(IIf([上着サイズ]="Sサイズ" And [上着チェック]=False,1,0))
7

質問を読み違えてました。
チェックの入ったレコードを表示しないというのがご希望だと思っていました。
チェックの入ったレコードのあるフィールドの値を非表示にしたいということですね。
hirotonさんから適切な回答がついていますのでそちらを参考にしてください。

6
おにこ 2021/06/28 (月) 13:49:58 3e392@b524f

hiroton様

上着サイズ表示:IIf([上着チェック],"",[上着サイズ])
こちらで実装できました!
ありがとうございます。
hatena様もアドバイス頂き誠にありがとうございました。

少しお聞きしたいのですが、購入不要のものはレポート上に表示されなくなりました。
今表示されている制服の各種類、各サイズの合計をレポート上に表示することは可能でしょうか?
例えば
上着のSサイズが8 Mサイズが17 Lサイズが20
ズボンの9号が18 11号が28・・・
のようにそれぞれのサイズの合計を出したいです。

追加質問のようになり申し訳ありませんがお分かりであれば教えて頂きたいです。

5
hiroton 2021/06/28 (月) 12:30:35 38cf2@f966d

フィールドの値を個別にON/OFFしたいならクエリにチェックの内容で条件分岐させたフィールドを作ったらいいですね
ex)クエリのフィールド

上着サイズ表示:IIf([上着チェック],"",[上着サイズ])

テキストボックスのコントロールソースで同様に指定する形でもいいです
ex)テキストボックスのコントロールソース

=IIf([上着チェック],"",[上着サイズ])

余談ですが、名前が「上着チェック」だとONで要なのか「いらないときはチェックをつける」なのかわからないですね

「チェック」自体はデータ型を見れば「Yes/No型」なのでわかると思います

フィールド名:上着不要
データ型:Yes/No型

のようにするといいと思います

4
おにこ 2021/06/28 (月) 11:53:36 3e392@b524f

hatena様
失礼いたしました。
クリック時のイベントに記述しました。

クリック時のイベントに記述しましたがやはりチェックされた人のレコード自体消えてしまいます・・・

テーブル情報は以下になります。
☆社員制服マスタ
社員番号:数値型
上着サイズ:テキスト型
ズボンサイズ:テキスト型
シャツサイズ:テキスト型
キャップサイズ:テキスト型
上着チェック:Yes/No型
ズボンチェック:Yes/No型
シャツチェック:Yes/No型
キャップチェック:Yes/No型

このチェックは支給不要と回答した社員にチェックを入れて管理表のレポートにサイズを表示しないようにしたいのです。

提示して頂いたコードをクリック時に入れると、上着のチェックボックスにチェックを入れてるだけでもその人のレコードがレポートに表示されなくなりました。

フィールドと連結しているチェックボックスにチェックを入れると、そのフィールドの値が表示されないという仕様を実装したいです。

説明が凄く下手で本当に申し訳ありませんが宜しくお願い致します。

3

提示のコードは、開く時のイベントではなく、フォーム上に配置したコマンドボタンのクリック時のイベントプロシージャに記述してください。

2
おにこ 2021/06/28 (月) 08:53:18 3e392@b524f

hatena様
回答ありがとうございます。
提示して頂いたVBAを開くときのイベントに入れてみましたが、チェックするとテキストボックスの値だけでなくちぇチェックされた人のデータそのものがレポートに表示されなくなりました・・・
チェックされたテキストボックスの値を空白のように表示されないようにしたいのですが可能でしょうか?
言葉足らずで申し訳ありませんが宜しくお願い致します。

23

改めて考えてみたんですがSTARTの判定はよくないですね
ENDのレコードの存在が保証されない場合データが漏れます
ENDのレコードの存在が保証されているなら奇数偶数でSTART/ENDがきれいに出現するのでIF判定が必要ないです

2
hiroton 2021/06/26 (土) 19:06:06 9ff1a@d02b8

フィールド「小計グループ:nz(DMax("順番","クエリ","品<>'"&[品]&"' AND 順番<"&[順番]),0)」を作って、これを順番よりも上位でグループ化してグループフッターを付けてみたらどうでしょう?

9

VBAは分からないので埋め込みマクロでということでしょうか。

上でも書きましたがコマンドボタンよりオプショングループとトグルボタン(ラジオボタン)でやるのがUI上もいいでしょう。

フォーム上にオプショングループを配置して、その中にラジオボタンを10個配置します。

それぞれのトグルボタンのプロパティを下記のように設定します。

標題 ア
オプション値 1

標題 カ
オプション値 2

標題 サ
オプション値 3



標題 ワ

オプショングループの名前 フレーム1

オプショングループの更新後処理の埋め込みマクロに下記のように設定します。

再クエリ
 コントロール名 コンボボックス名

コンボボックスの値集合ソースのクエリの抽出条件は下記のようにします。

Like Choose([Forms]![フォーム名]![フレーム1],"[ア-オ]*","[カ-コ]*","[サ-ソ]*","[タ-ト]*","[ナ-ノ]*","[ハ-ホ]*","[マ-モ]*","[ヤ-ヨ]*","[ラ-ロ]*","[ワ-ヲ]*")

オプショングループの作り方がよく分からない場合は、コントロールウィザードで作成できます。
下記を参考にしてください。

Accessのフォームでオプションボタンを使ってデータを入力する方法 | できるネット

5

質問の表のテーブルだとして、

テーブルから集計クエリを作成して、種別1と購入日でグループ化、SEQ(連番)は最小に設定。
さらにクエリを新規作成して、テーブルと上のクエリを追加して、種別1と購入日で結合。
これをレポートのレコードソースにして、SEQでグループ化、並べ替えをすればいいでしょう。

あるいは、レポートのレコードソースはテーブルにしておいて、
グループ化と並べ替えの「フィールドの選択」で「式」を選択して、
そこに下記の式を設定するというのでもいいでしょう。

DMin("SEQ","テーブル名","種別1='" & [種別1] & "' AND 購入日=#" & [購入日] & "#")

1

レポートの「並び替え/グループ化」には
上下のレコードで値を比較してグループ分けする機能はありません。
したがって

順番個数
110
320
420
5野菜5
8野菜5
910
 
というデータの場合は
レポートのレコードソースを何らかの手段で
順番個数グループ
1101
3201
4202
5野菜53
8野菜53
9104
 
という形にする必要があるでしょう。

グループ連番は SQL を用いて
スカラサブクエリや定義域集計関数で付与することも出来ますけど
件数によっては重くなるため、
テーブルに連番用のフィールドを作成して
値を一気に書き込んでしまったほうがいいように思います。

サンプルコードを提示してもいいのですけど
ほほさんのスキルが分かりませんし、Access 2003, 2010をお使いとのことなので
もしかすると、Recordsetを用いたデータ編集のご経験もおありなのではと推測します。

なお、レポート上で工夫するなら、並び替えの最初に

= DCount("*", "テーブル", "順番 <= " & [順番])
      - DCount("*", "テーブル", "品 = '" & [品] & "' AND 順番 <= " & [順番])

という式を組み込んで
ご希望の形に近いレイアウトにすることは可能ですけど
2階層目を「品」でグループ化すると「順番」の昇順にはデータが並ばないでしょう。

以上のヒントをもとに、まずはご自身で試行錯誤してみることをお勧めします。

4
ほほ 2021/06/25 (金) 21:41:58 e27f2@646ca

oGFzgtnIStrl6D0さま

同じような問題で悩んでいました。
今どきですが、アクセス初心者で2003開発しています。

>kitasueさんのご回答内容を元に出来ました。
>感謝致します。
↑こちらはグループ化して
昇順・降順選択後にソートされたのですか?

ご意見聞かせてください。

8
hiroton 2021/06/25 (金) 17:17:55 e9544@f966d >> 4

テーブルのフィールドは必要ないですよ

フォームデザインツールコントロールの中からテキストボックスを選んでフォーム上の適当な場所に配置し、「テキスト ボックス名を指定してください。」のとこで「抽出用カナ」と入力します

これで、フォームのデザインビュー上でテキストボックスに「非連結」と表示された名前プロパティが「抽出用カナ」のテキストボックスが配置できます


配置済みの適当なテキストボックスをコピー&ペーストしてコントロールソースプロパティを「」(削除)、名前プロパティを「抽出用カナ」と変更してもかまいません。コントロールソースプロパティがないテキストボックスはデザインビュー上で「非連結」と表示されます


このような「非連結」のテキストボックスを配置すると、テーブルのデータに影響しない自由な入力のできるテキストボックスになります。今回は五十音の各ボタンがあって、それぞれで動きを変えたいのでどのボタンを押したのかを覚えておく必要があります。フォームに専用のメモ書きを用意してるという感じです

2

hatenaさん
いつもありがとうございます!
できました!今回も勉強になりました!
レコードソースを変えると思いもしませんでした。。。
本当にありがとうございました。
解決です

1

OrderBy に指定できるのはレコードソースのフィールドのみになります。
フォーム上のコントロールの式では並べ替えはできません。

レコードソースをクエリにして、そこのフィールドに式を設定してください。

来院回数: DCount("顧客コード","T03_来院データ","顧客コード=" & [顧客コード])

上記は顧客コードが数値型の場合です。
顧客コードがテキスト型の場合は、下記になります。

来院回数: DCount("顧客コード","T03_来院データ","顧客コード='" & [顧客コード] & "'")
1
hatena 2021/06/25 (金) 16:33:20 修正

クエリで、チェックボックスと連結しているフィールドの抽出条件を False と設定して、
そのクエリをレポートのレコードソースとすればいいでしょう。

あるいは、レポートのレコードソースには抽出条件を設定せずに、レポートを開く時にフィルターをかけてもいいでしょう。
VBAなら下記のようになります。

DoCmd.OpenReport "レポート名", acViewPreview, , "フィールド名=False"
7

hiroton さんありがとうございます。
まず私にもわかるかもしれないこのパターンでやってみようと取り組んでいますが、
質問させてください。
テーブルに「抽出用カナ」に該当するフィールドがなく、「苗字カナ」とは別にそれを設ける必要があるということでしょうか?

5
にこっと、、 2021/06/25 (金) 14:52:16 70584@0c3fa

解決しました。
以下の関数で出来ました。
Public Sub initalizeTables(tblName$)
    CurrentProject.Connection.Execute "DELETE FROM " & tblName$
    CurrentProject.Connection.Execute "ALTER TABLE " & tblName$ & " ALTER COLUMN id NUMBER"
    CurrentProject.Connection.Execute "ALTER TABLE " & tblName$ & " ALTER COLUMN id COUNTER (1, 1);"
End Sub

▼参考
sql - MS Access run-time error 3259 invalid field data type on alter table - Stack Overflow
https://stackoverflow.com/questions/22659444/ms-access-run-time-error-3259-invalid-field-data-type-on-alter-table/33188788

4
にこっと、、 2021/06/25 (金) 14:27:58 70584@0c3fa

私も同じエラーが出ます。

エラー番号3259
フィールドのデータ型が正しくありません。

▼実行したコード
currentdb.execute "ALTER TABLE inRecve ALTER COLUMN id COUNTER (1, 1)"

7

ありがとうございます!!
今とりあえず試行錯誤してやってみたopenargsをやってみてからコピーして教えてもらったやり方も試してみます。
リストボックスとは思いもつかなかったやり方です。勉強になります!
先に今うまくいってないopenargsですが、やりたいことにとても近づいてるんですがやはり動きが不安定なんです。
どこか間違っていますか??
これをやるのにopenargsはむいてないのでしょうか。
よろしくお願いいたします。

6

従業員リストのフォームから、ア、カ、サ、タ、ナと抽出できるボタンを作りました。

このボタンというのが、コマンドボタンのことなら、ラジオボタン(オプショングループ内に配置)で実装したほうがいいでしょう。今、押しこれまているボタンの文字で抽出されていると目で見て分かりますので。

下記でラジオボタンで50音選択できるサンプルを紹介しています。

オプショングループで50音選択 高速版 - hatena chips

上記のサンプルをフォームのデータにフィルターをかけるものですが、生成された抽出条件でSQLをコンボボックスに設定すればいいでしょう。

6
りんご 2021/06/25 (金) 05:01:26 c564b@0e907 >> 4

 ごめんなさい、混乱させてしまいました。顧客データと来院日時のコンボボックスが既にあるという事ですね。私がイメージしたのは、コンボボックスの代わりに、リストボックスを使う方法でした。
 こんな遊びもあるよと軽く読んで下さい。
 準備するものは、こんな感じです。
  明細フォーム・・・・・・・・・・レコードソース:フォームに連結した明細クエリ
  顧客コード検索リストボックス・・・値集合ソース:顧客コード検索クエリ、非連結
  来院日時検索リストボックス・・・・値集合ソース:来院日時検索クエリ、非連結
  明細リストボックス・・・・・・・・値集合ソース:フォームに連結しない明細クエリ、非連結
 顧客コードと来院日時が決まると、明細リストボックスが絞り込まれる。(帳票絞り込みのイメージ)
  顧客コード検索リストボックスのクリック時イベント:Me.明細リストボックス.Requery
  来院日時検索リストボックスのクリック時イベント :Me.明細リストボックス.Requery
 明細リストボックスからどれか選ぶと、明細フォームが絞り込まれる。(単票絞り込み)
  明細リストボックスのクリック時イベント     :Me.Requery
 絞り込むために、同じ明細クエリを2つ用意、名前を変えて、抽出条件で違いを出します。
  フォームに連結しない明細クエリ
   顧客コードフィールド:[Forms]![明細フォーム]![顧客コード検索クエリ]
   来院日時フィールド:[Forms]![明細フォーム]![来院日時検索クエリ]
  フォームに連結した明細クエリ
   明細IDフィールド:[Forms]![明細フォーム]![フォームに連結しない明細クエリ]
 以上になります。
  
 

5
りんご 2021/06/25 (金) 01:52:38 c564b@0e907 >> 3

なんか動きが変なんです。

ダイアログ(acDialog)で開くのをやめたから?
AccessVBAでフォームを画面遷移っぽく見せる - Ateitexe アテークゼ *非IT企業のプログラマによるメモブログ
規定値モード(acWindowNormal)で開いたら、DoCmd.Close acForm, Me.Nameとするブログがありました。どうでしょう?

4

更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス(非連結を想定していますがどうかな?)の値集合ソースに設定しているクエリを開いて、抽出条件にリストボックスを設定するのは、どうでしょう。

↑これのやり方ですが、わからないので質問させてください。
引数で渡している2つは、「F05_更新削除_来院データ」フォームのヘッダーに作成してある非連結のコンボボックスです。
顧客データと来院日時です。
これとは別にこの二つのリストボックスを作成するのでしょうか?
そしてもともとあるコンボボックスの値集合ソースにリストボックスを設定するのですか?!
知識が乏しくイメージが湧かなくて申し訳ないです。

3

りんごさんありがとうございます。
検索不足でした。
リンク先で、複数の値を渡すやり方で引数を渡すことができました!!

渡す側
Private Sub 更新削除_Click()
    Dim args As String
    args = Me.顧客コード & "," & Me.来院日時
    DoCmd.OpenForm "F05_更新削除_来院データ", , , , , , args
End Sub

受ける側
Private Sub Form_Open(Cancel As Integer)
    Dim str As Variant
    If Me.OpenArgs <> "" Then
        str = Split(Me.OpenArgs, ",", , vbTextCompare)
        Me.顧客コード検索.Value = str(0)
        Me.来院日時検索.Value = str(1)
    End If
End Sub

これで、正しく渡したい引数を渡して「F05_更新削除_来院データ」にも正しく表示されるのですが
なんか動きが変なんです。
渡す側で、コマンドボタンを押して「F05_更新削除_来院データ」が表示されるのですが
渡す側のフォームが全面にアクティブ化されていて開いたフォームが上手く表示できません。
また、続けてコマンドボタンを押すと今度はなにも反応しなくなってしまいます。
なにかおかしいでしょうか??

openargsでやり取りする理由は、それしかわからなかったからです😭
「F05_更新削除_来院データ」のフォームは、今回のようにコマンドボタンから引数を渡して開きたい場合と
直接開いて、ヘッダーにあるコンボボックスの引数を指定して表示させる2通りで表示させます。
このフォームのフィルターには、
(顧客コード=Forms!F05_更新削除_来院データ!顧客コード検索 and 来院日時=Forms!F05_更新削除_来院データ!来院日時検索)と入力していて、ヘッダーにあるコンボボックスの引数に応じてレコードを表示させています。
分かりにくい説明で大変恐縮ですが、よろしくお願いいたします。

2
りんご 2021/06/24 (木) 23:52:42 c564b@0e907 >> 1

ごめんなさい、一部、訂正します。

更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス連結クエリの抽出条件に、リストボックスを設定するのは、どうでしょう。

更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス(非連結を想定していますがどうかな?)の値集合ソースに設定しているクエリを開いて、抽出条件にリストボックスを設定するのは、どうでしょう。

1
りんご 2021/06/24 (木) 22:57:50 c564b@0e907

 ググると、色々出てますが、どうですか?ネット情報なので、もしかしたら、過不足や間違いがあるかもしれませんが。
【Access】OpenArgsでフォームを開く引数に複数の値を渡したい|アズビーパートナーズ
T'sWare Access Tips #648 ~フォームに複数のOpenArgsを渡すには?~
 ところで、前の質問中に、下記コメントがありました。

F05_更新削除を、なんとか教えてもらったリンク先の通り連結フォームで作ってレコードソースをT01_商品としました。
更新削除フォームを直接開くと、商品コード検索という非連結のコンボボックスがひとつおいてあって
そこで選んだ商品コードに値するレコードが表示できるようにしています。

少し気になったのが、openargsでやり取りする理由です。
・帳票が検索しやすい、単票が更新削除しやすい、とか?
・非連結のときに、5つのフィールドのデータを受け渡しする予定だったから、とか?
 更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス連結クエリの抽出条件に、リストボックスを設定するのは、どうでしょう。

11

ありがとうございます!
すみませんでした。スレ立てなおしますね!

10
りんご 2021/06/24 (木) 20:05:00 c564b@0e907

 横道に逸れるけど、結果フォームを連結フォームに変更したという事ならば、結果フォームに検索機能を統合すれば、どうなるか?
 あとは、解決クローズならば、スレ立て直しがいいかも。

9

こんにちは!!
こちらで教えていただいたこの方法が大変役にたっておりますが、これと全く同じ方法で、今度は指定項目は2つになるとどのように記述すればいいでしょうか??
どう変更してもうまくいかなくて、また教えていただけるとありがたいです。

検索フォーム側(商品コードだけではなくて商品名も一致しているレコードを表示したい)
    Dim args,args2 As String
    args = Me.商品コード
    args2 = me.商品名
    DoCmd.OpenForm "氏名テーブル", acNormal, , "商品コード=" & args & "", , acDialog, args,args2?

結果フォーム側
Private Sub Form_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
      me.商品コード検索.Value = Me.OpenArgs
      me.商品名検索.valtue = ????
    End If
End Sub

お手数ですが、宜しくお願いいたします😵

5
りんご 2021/06/24 (木) 13:19:24 c564b@0e907 >> 1

 テキストボックスを配置して、
・選択クエリの抽出条件に、Like[Forms]![フォーム1]![テキスト1] & “*”
・プロパティシートの変更時イベント

Private Sub テキスト1_Change()
    Me.Requery
    Me.テキスト1.SetFocus

    If IsNull(Me.テキスト1) Then
        Me.テキスト1.SelStart = 0
    Else
        Me.テキスト1.SelStart = Len(Me.テキスト1)
    End If
End Sub

 ボタンを配置して、
・マウスボタンクリック時イベント

Private Sub ボタン1_MouseDown(ほにゃらら、自動入力されるので、省略)
     Me.テキスト1 = “[ア-オ]“
     Me.Requery
End Sub

 コンボボックスを配置して、
・プロパティシートの値集合ソースに、絞り込むために活用した選択クエリを設定
・フォーカス取得時イベント

Private Sub コンボ1_Enter()
        Me.コンボ1.Requery
End Sub
4
hiroton 2021/06/24 (木) 13:07:34 修正 79b19@f966d

※名前の提示がないモノもあるので適当に読み替えてください

「従業員リストのフォーム」にテキストボックス「抽出用カナ」を配置します
「従業員リスト」テーブルを元にクエリ「Q従業員抽出」を作成します

フィールド:氏名苗字カナ
テーブル:従業員リスト従業員リスト
並べ替え:
表示:
抽出条件:Like [Forms]![従業員リストのフォーム]![抽出用カナ]

「従業員リストのフォーム」にコンボボックス「従業員コンボボックス」を配置し、以下の設定にします

値集合ソース|Q従業員抽出
値集合タイプ|テーブル/クエリ

各ボタンの埋め込みマクロに次のようにアクションを追加します

プロパティの設定
 コントロール名 抽出用カナ
   プロパティ 値
       値 [ア-オ]*

再クエリ
 コントロール名 従業員コンボボックス

プロパティの設定はそれぞれのボタンに合わせて変更してください

3
りんご 2021/06/24 (木) 11:31:45 c564b@0e907 >> 2

えっとですね、最終的に、ひとつのコンボボックスで出来ると思うのですが、うーん。

2

早速ありがとうございます!
あ行で絞り込んでいるのは、埋め込みマクロ(条件式 =[苗字カナ] Like "[ア-オ]*")です。

仮に、(やり方がよくわかっていませんが)クエリで絞り込んだ場合、あ行用のコンボボックス、か行用のコンボボックスと、それぞれに必要になるということでしょうか?

1
りんご 2021/06/24 (木) 10:58:45 c564b@0e907

例えば、あ行で絞り込めた時に、活用した選択クエリを、コンボボックスのコントロールソースに設定するのは、どうでしょうか?