Microsoft Access 掲示板

views
4 フォロー
6,283 件中 1,881 から 1,920 までを表示しています。
1
wazawaza 2023/05/02 (火) 09:57:22

リレーションシップの状態です。画像1

2
みどり 2023/04/30 (日) 09:02:27 31b5c@ff1f1

hatenaさん、回答ありがとうございます。
デザインビューで開いて、保存するのですね。
早速ためしたところ、うまく行きました

ありがとうございます。
今後もよろしくお願いします。

7
hiroton 2023/04/29 (土) 23:51:23 e5550@2ee8f >> 5

投稿が中途半端になってしまったので>> 5は無視してください
(hatenaさんへ、削除お願いします)

6
hiroton 2023/04/29 (土) 23:50:11 e5550@2ee8f

(中途半端に投稿されてしまったので再投稿します)


「(元の値)」や「(転記する値)」は説明のための抽象的な内容であり、実際にはコードの実行に合わせて適宜置き換えられますので、特別に「C001」や「C002」と言えるものではありません。(特定の場合にはそうなることもあるでしょう)

改めて説明しなおしますが、

For i = 1 To 5

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)

Next i

は、コード実行時には

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 1)
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 2)
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 3)
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 4)
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 5)

が実行されます。すでに述べたようにこの結果は

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 5)

だけしか意味を成しません
質問の(画像にあるような)結果を出したいのであれば

(転記先) = (追記の形になる式) '//(元の値)=>""、(転記する値)=>"C001"、転記先=>"C001"
(転記先) = (追記の形になる式) '//(元の値)=>"C001"、(転記する値)=>"C002"、転記先=>"C001C002"
(転記先) = (追記の形になる式) '//(元の値)=>"C001C002"、(転記する値)=>"C003"、転記先=>"C001C002C003"
(転記先) = (追記の形になる式) '//(元の値)=>"C001C002C003"、(転記する値)=>"C004"、転記先=>"C001C002C003C004"
(転記先) = (追記の形になる式) '//(元の値)=>"C001C002C003C004"、(転記する値)=>"C005"、転記先=>"C001C002C003C004C005"

このような処理になる記述が必要です

5
hiroton 2023/04/29 (土) 23:20:20 c05f8@2ee8f

「(元の値)」や「(転記する値)」は説明のための抽象的な内容であり、実際にはコードの実行に合わせて適宜置き換えられますので、特別に「C001」や「C002」と言えるものではありません。(特定の場合にはそうなることもあるでしょう)

改めて説明しなおしますが、

For i = 1 To 5

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)

Next i

は、コードの実行時には

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)
1

デザインビューにしてからプロパティを変更して、閉じるときに保存すれば、次回開いたときに変更が反映されてます。

  Dim fm As String
  Dim ctl As Control

  fm = "フォーム1"
  DoCmd.OpenForm fm, acDesign 'デザインビューに切り替え
  Set ctl = Forms(fm)!ラベル1
  ctl.Left = 100
  ctl.Top = 100
  DoCmd.Close , , acSaveYes '保存して閉じる
  DoCmd.OpenForm fm         '再度開く

ただ、運用中に頻繁にデザインビューに変更して、変更を保存するのは破損のリスクが高くなるので避けたいところです。

プロパティの変更値をテーブルに保存しておいて、フォームを開くときのイベントで、そのプロパティ値を設定するという設計をお勧めします。

4
えいじ 2023/04/29 (土) 10:43:08

回答ありがとうございます。
元の値とは、C001で、転記する値とは、C002で、この2つを連結して上書きするということでしょうか?

2
モネ 2023/04/28 (金) 13:16:18 c3738@25820

教えていただいた様に一対多関係に変更をしたら出来ました。
ありがとうございました。

3
hiroton 2023/04/28 (金) 08:59:10 72ebf@f966d

まぁそうですね。より正確には「x = x + 1」は「xに1を加えた値でxを上書きする」となります

では、

x = 1
x = 2
x = 3
x = 4
x = 5

Debug.Print x

と、

x = x + 1
x = x + 2
x = x + 3
x = x + 4
x = x + 5

Debug.Print x

ではどうなるでしょうか?


質問のコードを見直してみましょう

For i = 1 To 5

Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i) & vbNewLine

Next i

これは、実際にコードが実行される場合

(txtテキスト_1) = "C001" & vbNewLine
(txtテキスト_1) = "C002" & vbNewLine
(txtテキスト_1) = "C003" & vbNewLine
(txtテキスト_1) = "C004" & vbNewLine
(txtテキスト_1) = "C005" & vbNewLine

が実行されることになります。これでは一番最後の「"C005" & vbNewLineで上書きする」が最終結果として残るのみです
追記(元の値を残した上でさらに書き込む)」には、「(元の値)(転記する値) & vbNewLineを連結して上書きする」ようにする必要があります

2
えいじ 2023/04/27 (木) 21:24:56

回答ありがとうございます。

x= 1 は、そのままで
x=x+1は、x=2だと思います。
まちがっていますか?

1

メインフォームとサブフォームのレコードソースのテーブルは、一対多関係のテーブルになってますか。

メインフォームとサブフォームのレコードソースのテーブルが同じものになってませんか。

7
nuneru 2023/04/27 (木) 09:48:53 e48ae@9a838

ありがとうございました。回答遅くすみません。いろいろ苦戦していました。
最終的に教えて頂いた【レコードソースをクエリにして「正の値表示」「負の値表示」フィールドを作成する】方法で解決しました。

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

1
hiroton 2023/04/27 (木) 08:47:04 8cee2@f966d

プログラミングにおける

x = 1

x = x + 1

の違いわかりますか?

1
あん 2023/04/26 (水) 14:27:38 927ea@0ac0c

テキストボックスのプロパティで書式を標準にしたらちゃんと判定しました。
ありがとうございました。

4
あん 2023/04/25 (火) 15:54:01 927ea@0ac0c

帳票フォームでタブコントロールを用いるのは考えつきませんでした。

ぜひ、利用させていただきます。ありがとうございます。

3

代替案ですが、帳票フォームでも下記詳細されている方法で表示項目を切り替えるというのも検討されてはどうでしょうか。

帳票フォームで表示項目が多いとき、ページ切り替えで
帳票フォームで表示項目が多くて1画面に収まらない場合、データシートビューでの列固定のように一部の項目を固定して表示したいのですが、いい方法はないでしょうか。 データシートビューのように列固定して他の項目を横スクロールで表示というのは、帳票フォームで実現するのははなかなか難しいのです。単票フォームならタブコントロールで項目をグループ分けしてページ切り換えするという手法を使うことができます。タブコン...
Fc2

2
あん 2023/04/25 (火) 10:39:10 927ea@d3640

hatena様
ご回答ありがとうございます。

フィールドが多くあり、表示列を固定する(Excelでいうウインドウ枠の固定)必要があるので、データシートビューにしています。

私も調べたのですが、策が見つかりませんでした。
対応策がないということで理解しました。

1

調べてみましたが、なさそうですね。
データシートビューでは設定の自由度は低いですね。

帳票フォームではだめでしょうか。

2
あん 2023/04/24 (月) 15:59:31 927ea@d3640

hatena様
試せばよかった話でした。すみません。
ありがとうございました。

1

試してみればすぐわかることですが、
Exit Doの記述してある階層のDoのみ抜け出します。

6
hiroton 2023/04/24 (月) 09:00:23 fe8f1@f966d

hirotonは普段条件付き書式を使わないのでアレでしたが、ちょっと考えてみたら条件付き書式だけでも行けそうでした

値が 0 より小さい |前景色:赤
フォーカスがある  |前景色:黒
値が 0 と等しい  |前景色:(背景色と同じにする)
5
hiroton 2023/04/21 (金) 14:24:50 d401c@f966d

複雑になってくると一発でとはなかなかいかないですねぇ
他に何かうまい方法を知っている人がいるかもしれませんが


レコードソースをクエリにして「正の値表示」「負の値表示」フィールドを作成します

正の値表示: IIf([値]>0,Mid([値],1)+0)
負の値表示: IIf([値]<0,Mid([値],1)+0)

フォームには追加した2つのフィールドと合わせて3つのテキストボックスを配置します
各テキストボックスは次のように設定します

正の値表示テキストボックス

背景スタイル  |透明
タブストップ  |いいえ
フォーカス取得時|[イベント プロシージャ]

フォーカス取得時のプロシージャは次の通りにします

Private Sub 正の値表示_Enter()
    Me!値.SetFocus
End Sub

負の値表示テキストボックス

前景色     |(赤の色コード)
タブストップ  |いいえ

これら3つのテキストボックスをサイズを揃えて正面から「正の値表示」「負の値表示」「値」の順で重ねて配置します
これで目的の見た目になると思います

※フィールド名は適切なものに書き換えてください

4
nuneru 2023/04/21 (金) 11:25:32 e48ae@9a838

テキストボックスのプロパティはおっしゃる通りになっています。
条件付き書式も教えて頂いたとおり設定しました。
その状態で、値が0のときは0を非表示にしたいのですが、如何でしょうか?

3
hiroton 2023/04/21 (金) 10:44:19 d401c@f966d

3番ってなんでしょう?
単純にフィールドリストからコントロールを配置し、条件付き書式だけ設定すれば目的の状態になると思いますが

ちなみにこの時のテキストボックスのプロパティは

書式       |(空白)
小数点以下表示桁数|自動

になっていると思いますがどうですか?

2
nuneru 2023/04/21 (金) 10:22:13 e48ae@9a838

ありがとうございます。色は条件付き書式でできました!
ですが2番と3番を同時に満たすにはどうしたらよいでしょう?
0も条件付き書式で白にして、見えないようにすることもできますが、入力時に困るので、他の方法を探しています。

1
hiroton 2023/04/21 (金) 10:06:51 d401c@f966d

色の設定は条件付き書式で設定してみては?

5

すでにhirotonさんから回答があるDSumでも可能ですが、DSum関数は重い処理になりますので、データ件数が多い場合は集計クエリを使う方法がいいでしょう。

テーブルから集計クエリを作成して、「コード」をグループ化、「値引」を合計に設定します。

さらにクエリを新規作成して、テーブルと上記の集計クエリを追加して、「コード」で結合すればご希望の結果が得られます。

4
Muuuuuw 2023/04/20 (木) 14:05:01 d469c@5e3b0

hiroton様

ありがとうございました。
出来ました。
大変助かりました。

3
hiroton 2023/04/20 (木) 12:00:33 b5970@f966d

上記回答のリンク先はMicrosoftの公式ページですが、キーワードが分かったのなら、例えば「access クエリ dsum」等でWeb検索すればいろいろ情報がでてきますよ


クエリでこのような関数を使う場合、式の中にそのレコードの値を使うことができます。Excelでセル参照をするようなものです(ただし、同じ行のデータしか指定できませんが)

コード毎に集計をしたいということなので、DSum関数の条件(criteria)部分に

"コード='"&[コード]&"'"

を指定すれば目的を達成できるでしょう

2
Muuuuuw 2023/04/20 (木) 11:27:31 d469c@5e3b0

hiroton様
ありがとうございます。
すみません。もう少し詳しくお願いできますでしょうか。
なにぶん素人なものですから。
クエリを使って可能なのでしょうか?
宜しくお願い致します。

1
hiroton 2023/04/20 (木) 08:39:38 b5970@f966d

手っ取り早いのはDSum関数を使う方法でしょう

DSum 関数

3
Muuuuuw 2023/04/19 (水) 12:37:38 d469c@5e3b0

hatena様早速のご返答ありがとうございます。
出来ました。
備忘録として: Format(Format([フィールド名],"0000/00/00"),"m""月 ""d\日")と自然に変更されていました。
ありがとうございました。

1

下記のような演算フィールドを作成すればいいでしょう。

和暦日付: Format(Format([フィールド名],"0000/00/00"),"m月d日")
2
すぅ 2023/04/18 (火) 12:10:09 25b58@b9210

hatena さま 返信ありがとうございます。
指示通りにレポートを変更して
思い通りのPDFを発行することができました。
本当に助かりました。ありがとうございました。

1

「発注明細書」レポートをコピーして、そのレポートのレポートヘッダーに「発注書(鑑)」レポートをサブレポートとして埋め込めば、発注書(鑑)と発注明細書が一つのレポートとして出力できます。

このレポートをpdfとして出力すればいいでしょう。

2
nuneru 2023/04/14 (金) 09:20:01 e48ae@9a838

ありがとうございます。やりたいことができました!

3
あん 2023/04/13 (木) 12:50:14 927ea@d09bd

hatena様
ご回答ありがとうございます。

10の位の切り上げではなく、切り上げする桁数を指定して切り上げする式を、
hatena様のご提示いただいた式を基に作成させていただきました。

-INT(-([数値]/10^[桁数]))*10^[桁数]

負の数の切り上げは-531→-530で大丈夫です。

良い式が出来上がり、とてもよかったです。ありがとうございました。

2

数値の変換例をみると、切り捨てではなくて、切り上げですね。

下記でどうでしょうか。

-Int(-[数値]/10)*10

ただし、上記だと負数の場合、
-531→-530
と正方向へ丸められますので、一般的な切り上げの仕様の
-531→-540
としたいなら、

-Int(-Abs([数値])/10)*10*Sgn([数値])
1
あん 2023/04/13 (木) 11:49:10 927ea@d09bd

すみません。
自作関数を作成してスマートにしました。
ありがとうございました。