Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11 / 500 ページ ←次へ | 前へ→

【13109】Re:レポート「ビュー」・「印刷」について
回答  亀マスター  - 16/11/4(金) 13:38 -

引用なし
パスワード
   >テーブルにデータが無くてもラベル・テキストボックスを表示する方法は無いでしょうか。

フォームではなく、レポートの話ですね?
確かに、レポートの中にサブフォームを埋め込んだ場合、サブフォームの元になるデータが空だと何も表示されません。
ただ、フォームヘッダ・フッタであれば表示されるので、そこにラベルを用意しておけばそれは表示されますよ。それではダメでしょうか。
・ツリー全体表示

【13108】レポート「ビュー」・「印刷」について
質問  まゆ  - 16/11/2(水) 13:08 -

引用なし
パスワード
   レポートのフォーム内にサブフォームがあるのですが、
サブフォームの詳細内がテーブルにデータが無い場合そのサブフォーム内は何も表示されません。
テーブルにデータが無くてもラベル・テキストボックスを表示する方法は無いでしょうか。
または、
フォームで未入力の場合Nullのテーブルが作成するようにはできないでしょうか。

また、フォームでは「ClirntNo」をリンク子フィールド・リンク親フィールドに設定しています。
Nullテーブルを作成する場合は
「ClirntNo」→1
その他のデータ→Nullのようなテーブルが作成されてほしいです。

宜しくお願い致します。
・ツリー全体表示

【13107】Re:サブフォームについて
お礼  まゆ  - 16/10/31(月) 13:12 -

引用なし
パスワード
   ▼亀マスター さん:
▼hatena さん:

一から「リンク親フィールド」「リンク子フィールド」で作成しなおしてみます。

細かい設定などはまだ出来ていませんがうまくいきそうです。
また詰まる部分があれば改めて投稿させていただきます。

ありがとうございましたm(_ _)m
・ツリー全体表示

【13106】Re:早出残業時間と残業時間の合計方法
回答  hatena  - 16/10/28(金) 19:08 -

引用なし
パスワード
   >クエリにそれぞれ早出残業時間と残業時間を作成しました。
>それを合計しようとしても不可能です。

「それ」というのは何を指していますか。

[早出残業時間]+[残業時間]

ということがしたいのですか。


>最初に
>クエリ早出残業時間
>フィールド名:早出時間: FormatDateTime([元になる出勤時間]-[出勤])
>次に
>クエリ残業時間
>フィールド名:早出時間: Sum(DateDiff("n",[出勤],[元になる出勤時間]))\60 & Format(Sum(DateDiff("n",[出勤],[元になる出勤時間])) Mod 60,"\:00")
>という流れで進めます。

クエリが2つあるということですか。それぞれのクエリに「早出時間」という演算フィールドがあるのですか。

で、何を合計したいのでしょうか。
どのようなことをして、どのようにうまくいかないのでしょうか。

うまくいかないクエリのSQL文も提示されると状況がもう少し伝わるかもしれません。

あと、FormatDateTime というのは独自に作成した関数ですよね。どのような関数ですか。
・ツリー全体表示

【13105】Re:サブフォームについて
回答  亀マスター  - 16/10/28(金) 18:51 -

引用なし
パスワード
   ▼まゆ さん:
>▼hatena さん:
>>>レコードごとに
>>>「顧客No.」が同じデータが紐づいて表示されるようにしているのですが、
>>
>>この紐付けは、サブフォームコントロールの「リンク親フィールド」「リンク子フィールド」にリンクするフィールド名を設定しているのですか。
>>
>>もし、クエリの抽出条件かフィルターで設定しているなら、それはやめて、上記の方法に変更してください。

私が以前に紹介したやり方をご覧になり、フィルターで設定されたようですね。
私の責任ですが、hatenaさんがおっしゃるとおり、この場合はサブフォームのリンク親フィールドとリンク子フィールドを設定した方がいいですね。

hatenaさんの回答に横出しする形になってしまいますが、以下の通りにすればいいかと思います。

・サブフォームはクエリではなくテーブルBとテーブルCを元に作成(クエリでもいいですが、この場合あまり意味がないので。クエリのまま使うのであれば、フィールドにテーブルB・テーブルC由来の「顧客No」を追加してください。)
・サブフォームのフィルターの設定を削除
・メインフォームに埋め込まれたサブフォームを一度クリックしてサブフォームの周囲がオレンジ色(?)で選択された状態にし、その状態でプロパティの「データ」→「リンク親フィールド」を選択するとサブフォームフィールドリンクビルダーというのが出るので、親フィールドと子フィールドのそれぞれに「顧客No」(上記のクエリを使っているなら、テーブルB・テーブルC由来の方)を設定。

これでいけると思います。
・ツリー全体表示

【13104】Re:グループごとに明細列追加
発言  オスマン  - 16/10/28(金) 15:16 -

引用なし
パスワード
   hatenaさま

アップロードしましたので
ご確認よろしくお願い致します。
・ツリー全体表示

【13103】Re:サブフォームについて
質問  まゆ  - 16/10/28(金) 14:34 -

引用なし
パスワード
   ▼hatena さん:
>>レコードごとに
>>「顧客No.」が同じデータが紐づいて表示されるようにしているのですが、
>
>この紐付けは、サブフォームコントロールの「リンク親フィールド」「リンク子フィールド」にリンクするフィールド名を設定しているのですか。
>
>もし、クエリの抽出条件かフィルターで設定しているなら、それはやめて、上記の方法に変更してください。

現在クエリの結合でテーブルを繋げている状態です。

テーブルA
・顧客No.
・顧客名

テーブルB
・顧客No.
・担当者
・電話番号

テーブルC
・顧客No.
・営業担当
・契約日

クエリ1
テーブルAとBを顧客No.で結合し
・顧客No.(A)
・担当者
・電話番号

クエリ2
テーブルAとCを顧客No.で結合し
・顧客No.(A)
・営業担当
・契約日

フォーム
テーブルAを元に
・顧客No.
・顧客名
サブフォーム1
クエリ1
・担当者
・電話番号
サブフォーム2
クエリ2
・営業担当
・契約日

としています。

どう直せば(つくり直しかもしれませんが。。。)いいか教えていただけないでしょうか。。。
・ツリー全体表示

【13102】早出残業時間と残業時間の合計方法
質問  困って  - 16/10/28(金) 14:22 -

引用なし
パスワード
   クエリにそれぞれ早出残業時間と残業時間を作成しました。
それを合計しようとしても不可能です。

どうやって合計させればいいのでしょうか?
最初に
クエリ早出残業時間
フィールド名:早出時間: FormatDateTime([元になる出勤時間]-[出勤])
次に
クエリ残業時間
フィールド名:早出時間: Sum(DateDiff("n",[出勤],[元になる出勤時間]))\60 & Format(Sum(DateDiff("n",[出勤],[元になる出勤時間])) Mod 60,"\:00")
という流れで進めます。

教えて頂けると嬉しいです。
お願いします。
・ツリー全体表示

【13101】Re:サブフォームについて
回答  hatena  - 16/10/28(金) 13:43 -

引用なし
パスワード
   >レコードごとに
>「顧客No.」が同じデータが紐づいて表示されるようにしているのですが、

この紐付けは、サブフォームコントロールの「リンク親フィールド」「リンク子フィールド」にリンクするフィールド名を設定しているのですか。

もし、クエリの抽出条件かフィルターで設定しているなら、それはやめて、上記の方法に変更してください。

>新規入力するときに
>顧客No.を入力した値を同じレコードのサブフォームにも認識させ、入力することはできないでしょうか。

そうすれば、これは自動でAccess君がやってくれます。
・ツリー全体表示

【13100】Re:グループごとに明細列追加
発言  hatena  - 16/10/28(金) 13:33 -

引用なし
パスワード
   >hatenaさまの掲示板等で
>一度見て頂きたいですが、御返事お待ちしております。

はい、御待ちしていますので、いつでもどうぞ。
・ツリー全体表示

【13099】サブフォームについて
質問  まゆ  - 16/10/28(金) 11:39 -

引用なし
パスワード
   フォーム内に
・顧客No.
・企業名
・サブフォームが複数
があり

レコードごとに
「顧客No.」が同じデータが紐づいて表示されるようにしているのですが、
新規入力するときに
顧客No.を入力した値を同じレコードのサブフォームにも認識させ、入力することはできないでしょうか。

現在は
顧客No.、企業名を入力し
サブフォーム内の入力するとエラーになり、
データベースを確認すると
顧客No.が0でサブフォームの値が保存されてしまっています。

宜しくお願い致します。
・ツリー全体表示

【13097】Re:グループごとに明細列追加
発言  オスマン  - 16/10/26(水) 16:04 -

引用なし
パスワード
   hatenaさま

すみません、少しPCの環境から離れており
返事が遅れてしまいました。

hatenaさまの掲示板等で
一度見て頂きたいですが、御返事お待ちしております。
・ツリー全体表示

【13096】Re:クエリにおける、複数条件でのオート...
お礼  まだら  - 16/10/22(土) 23:01 -

引用なし
パスワード
   hatena さん:

 アドバイスをもとに試行錯誤した結果、うまくいきました!

 いただいたアドバイスの、後者のSQLを使用して作業しました。
 自分の場合、VBAその他の言語が多少は理解できるため、SQLの方が工程を理解し
やすかったです。

 有益なご助言、本当にありがとうございました!!
・ツリー全体表示

【13095】Re:クエリにおける、複数条件でのオート...
回答  hatena  - 16/10/22(土) 11:49 -

引用なし
パスワード
   テーブル2 は、日付と攻撃者氏名の組み合わせでユニークになっているということですね。

ならば、クエリのデザインビューで日付同士、攻撃者同士を結合線で結べばOKです。

SQLビューでは、下記のようになります。

SELECT
テーブル1.*, テーブル2.攻撃側ゲーム数, テーブル2.守備側ゲーム数
FROM
テーブル1 INNER JOIN テーブル2
ON テーブル1.日付 = テーブル2.日付 AND テーブル1.攻撃者氏名 = テーブル2.攻撃者氏名;
・ツリー全体表示

【13094】クエリにおける、複数条件でのオートルッ...
質問  まだら  - 16/10/22(土) 10:48 -

引用なし
パスワード
   初心者ですがよろしくお願い致します。
2つのテーブルがあり、それぞれ以下の構成になっています。

テーブル1
日付a 攻撃側氏名i データ1 データ2 データ3 ・・・
日付a 攻撃側氏名i データ1 データ2 データ3 ・・・
日付a 攻撃側氏名j データ1 データ2 データ3 ・・・
日付b 攻撃側氏名k データ1 データ2 データ3 ・・・
日付b 攻撃側氏名i データ1 データ2 データ3 ・・・


テーブル2
日付a 攻撃側氏名i 守備側氏名 攻撃側ゲーム数o 守備側ゲーム数p
日付a 攻撃側氏名j 守備側氏名 攻撃側ゲーム数q 守備側ゲーム数r
日付b 攻撃側氏名k 守備側氏名 攻撃側ゲーム数s 守備側ゲーム数t
日付b 攻撃側氏名i 守備側氏名 攻撃側ゲーム数u 守備側ゲーム数v


上記から、下に示すようなクエリを作成したいと考えています。

日付a 攻撃側氏名i データ1 データ2 攻撃側ゲーム数o 守備側ゲーム数p
日付a 攻撃側氏名i データ1 データ2 攻撃側ゲーム数o 守備側ゲーム数p
日付a 攻撃側氏名j データ1 データ2 攻撃側ゲーム数q 守備側ゲーム数r
日付b 攻撃側氏名k データ1 データ2 攻撃側ゲーム数s 守備側ゲーム数t
日付b 攻撃側氏名i データ1 データ2 攻撃側ゲーム数u 守備側ゲーム数v

つまり、テーブル1における「日付」および「攻撃側氏名」の両者が、テーブル2
の両者と一致した場合に、テーブル2の「攻撃側ゲーム数」および「守備側ゲーム
数」を結び付けたい、という作業です。

 ・テーブル1中、同じ日付で同一の攻撃者のデータが複数存在する。
 ・テーブル1中、同じ日付で異なる攻撃者のデータが複数存在する。
 ・テーブル2中、同じ日付で異なる攻撃者のゲーム数が存在する。
 ・テーブル2中、各日付における各攻撃者のゲーム数はそれぞれひとつのみ。

どなたか、良いアイディアがあればご教示いただければ幸いです。 
・ツリー全体表示

【13093】Re:お手数をおかけします。VBAについて
回答  亀マスター  - 16/10/21(金) 19:28 -

引用なし
パスワード
   >  If [点数] * 3 > 200 = X Then
ここがまずおかしいですね。200で上手くいかない場合の直接的な原因はここでしょう。「= X」が余計です。

>If [負割] = 200 Then
>If [負割] < 199 Then
これらに対するEnd Ifがないように思えますが、転記漏れでしょうか?
そのままだと、[負割]が200かどうか以前に、エラーで止まると思いますが。
あと、
Private Sub 負担金_BeforeUpdate(Cancel As Integer)
に対するEnd Subもありませんね。

>If [負割] < 199 Then
>  If [点数] * [負割] Then
>  Else
(上記のEnd If漏れがなかったとして)これだと[負割]が199のときのパターンが含まれなくなるので、期待した結果が得られませんよ。
あと、わざわざ[負割]が199以下かどうかを判定しているようですが、説明を見ると、200とそれ以外のパターンしかないのではないでしょうか。だったら、199以下かどうかを改めて判定するのではなく、200の場合とそれ以外の場合という形での判定がスマートです。
(例)
If [負割] = 200 Then
  <-- 200丁度の場合の処理 -->
Else
  <-- それ以外の場合の処理 -->
End If

X という変数は最終的に [負担金] = X とでもしているのでしょうか。
でしたら構わないのですが、このままだと[負担金]が何も変化しないように思えました。それに、わざわざ X という変数を挟まなくても、直接[負担金]を操作すればいいのではないでしょうか。

>Public Function Rounds
せっかく四捨五入をするための関数を用意しているのに、それを使わずに別途四捨五入のための処理をしているのが気になります。
・ツリー全体表示

【13092】Re:お手数をおかけします。VBAについて
質問  みとこんどりあ  - 16/10/21(金) 11:55 -

引用なし
パスワード
   わかりにくいとおもったので追記します。


関係するフィールドは

[点数] [負割] [入金] [負担金] なのですが

[点数]*[負割]=負担金(四捨五入)

が主な式です。

例外が[負割]が200の時で

200の時のみ、[点数]×3 という式にしたいのです
これに出た数は 200以上の場合   例 600(点数)×3=1800
答えは1800ですが、強制的に200にしたいんです。
200以下の場合  45(点数)×3=135(第一位四捨五入で140)
としたいのです。

例外200の場合がうまくいかないので、お分かりになる方お知恵をお貸しください。お願いします。
・ツリー全体表示

【13091】お手数をおかけします。VBAについて
質問  みとこんどりあ  - 16/10/21(金) 10:57 -

引用なし
パスワード
   現在、access勉強中です。
現職の会社にデータベースを依頼されたのですが、なかなかうまくいきません。
もしよろしければどこんにちは。VBAで分からない点があるので教えてください。

下記なのですが、負割が[200]の時、[点数]×3 の答えが200を越えたら[負担金]フィールドの答えが[200]で固定。
答えが[199]か[199]以下の場合、そのまま四捨五入。
これができません。

[負割]が200以外の場合は、[点数]×[負割]の出た数を四捨五入した答えを負担金フィールドに表示したいです。

お手数ですがどなたか教えてください。

Private Sub 負担金_BeforeUpdate(Cancel As Integer)

If [負割] = 200 Then
  If [点数] * 3 > 200 = X Then
    X = 200
  Else
    If ([点数] * 3 Mod 10) < 5 Then
      X = [点数] * 3 - ([点数] * 3 Mod 10)
    Else
      X = [点数] * 3 - ([点数] * 3 Mod 10) + 10
    End If
    
If [負割] < 199 Then
  If [点数] * [負割] Then
  Else
    If ([点数] * [負割] Mod 10) < 5 Then
      X = [点数] * [負割] - ([点数] * [負割] Mod 10)
    Else
      X = [点数] * [負割] - ([点数] * [負割] Mod 10) + 10
    End If

Public Function Rounds(ByVal M As Currency, _
            ByVal A As Integer, _
            Optional D As Integer = 0) As Variant
  Dim R As Currency
 
  Select Case A
    Case 0 ' 四捨五入
      R = Fix(M * 10 ^ D + 0.5@)
    Case 1 '切り捨て
      R = Fix(M * 10 ^ D)
    Case 2 ' 切り上げ
      R = Rounds(M * 10 ^ D + 0.4@, 0)
  End Select
  Rounds = Sgn(M) * (R / 10 ^ D)
End Function
なたかお知恵を授けてください。
・ツリー全体表示

【13090】Re:グループごとに明細列追加
回答  hatena  - 16/10/20(木) 14:38 -

引用なし
パスワード
   ▼オスマン さん:
>これと併せてページ番号をつけているのですが
>グループフッタのみが最終ページにくると全体の件数より多く表示され
>「3/2」のようなページ表示になってしまいます。
>
>tp://hatenachips.blog34.fc2.com/blog-entry-27.html
>こちらを参考に行っていますが、何か方法はありますでしょうか?
>よろしくお願いします。

レポートは、設定によって複雑な動作をしますので、
実物を見ずに文章だけで、状況を確認して原因を特定するのは
困難です。

下記の私の運営する掲示板なら、ファイルをアップロードできますので
そちらに移動しませんか。

hatena の Microsoft Access 掲示板
ht tp://hatena-access.progoo.com/bbs/

もし、移動される場合は、いきなりファイルをアップロードせずに、
一旦文章で質問してから、私の返答を待って、アップロードしてください。
・ツリー全体表示

【13089】Re:グループごとに明細列追加
質問  オスマン  - 16/10/20(木) 8:14 -

引用なし
パスワード
   hatenaさま
回答いただきありがとうございます。

さっそく試したところ思っていた通りに動きました。
これと併せてページ番号をつけているのですが
グループフッタのみが最終ページにくると全体の件数より多く表示され
「3/2」のようなページ表示になってしまいます。

tp://hatenachips.blog34.fc2.com/blog-entry-27.html
こちらを参考に行っていますが、何か方法はありますでしょうか?
よろしくお願いします。
・ツリー全体表示

11 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free