Access VBA質問箱 IV

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

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


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

【8960】Re:月単位で集計したいのですが、、
発言  JUN  - 07/1/10(水) 15:50 -

引用なし
パスワード
   ▼クロ さん:
>日付のフィールドを
>年月:Format(日付のフィールド名,"yyyy/mm")
>としてはどうでしょうか?

クロさん
元データがYYYY/MM/DDで入ってくるため、インポートする関係上
テーブルのフィールドを”yyyy/mm”に変更できません。
そうなるとクエリでYYYY/MMで集計しないと目的の集計ができません。
なので悩んでいます。
よい方法あるでしょうか??
・ツリー全体表示

【8959】Re:月単位で集計したいのですが、、
回答  クロ  - 07/1/10(水) 15:44 -

引用なし
パスワード
   日付のフィールドを
年月:Format(日付のフィールド名,"yyyy/mm")
としてはどうでしょうか?
・ツリー全体表示

【8958】月単位で集計したいのですが、、
質問  JUN  - 07/1/10(水) 14:56 -

引用なし
パスワード
   YYYYMMMDD_機械名_その他のフィールド・・・

というテーブルがあるのですが、これを
単純にクエリで機械名をグループ化、とカウントすると
日付単位でのカウントとなってしまいます。

これを日付単位ではなく月単位でカウント集計したいのですが
よい方法があるでしょうか?

アクセスには詳しくないので、わかる範囲で調べてみましたが
よくわかりませんでした。

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

【8957】Re:フォーム、レポートから、ユーザー定義...
お礼  bin  - 07/1/10(水) 14:41 -

引用なし
パスワード
   ▼小僧 さん:
返信ありがとうございます。

>フォーム(またはレポート)の開く際のイベントに
>
>Private Sub Form_Load()
>  Me.テキスト名.ControlSource = "=" & test(10, 4).a
>End Sub
>
>の様にすると、とりあえずは回避できるようですが…。

ご提案の方法で、とりあえずは回避できました。ありがとうございました。

これはやはり、accessのバグなんでしょうかねぇ。
・ツリー全体表示

【8956】Re:リポートのフォーマットについて
質問  ひろ E-MAIL  - 07/1/10(水) 11:12 -

引用なし
パスワード
   小僧様、早速のご返答ありがとうございます。

>レコード毎に色を変えたい場合は条件付書式を設定するのが
>一般的だと思われます。

色を塗る条件は複雑で、ヘッダー部に詳細部のテキストボックスと対応する
日付の入ったテキストボックスがあります。日曜日及び祝祭日なら塗り潰しと
なります。その曜日の条件がまずありまして、その後各工期期間ならば別の色
で塗ることになります。条件付書式では出来るのでしょうか?
・ツリー全体表示

【8955】Re:リポートのフォーマットについて
回答  小僧  - 07/1/10(水) 9:20 -

引用なし
パスワード
   ▼ひろ さん:
おはようございます。

> VBで工期期間を色を塗ってみたいのですが、みんな同じ色になってしまいます。

表型式のフォームやレポートの場合
デザインビューで見ると解るとおり実際のコントロールは一つです。

レコード毎に色を変えたい場合は条件付書式を設定するのが
一般的だと思われます。
・ツリー全体表示

【8954】Re:フォームの肥大化
回答  小僧  - 07/1/10(水) 9:18 -

引用なし
パスワード
   ▼ひろのしま さん:
おはようございます。

>小僧さん。ありがとうございます。
>内部で隠れている MSys〜のテーブルのうち、
>・MSysAccessObjects
>・MSysACEs
>のテーブルの件数が最適化後に減少するという現象が起きていました(駄洒落)。


MSysObjects についてなのですが、
Typeというフィールドが存在しますよね。

色々といじっているとなんとなく解るとは思うのですが
・テーブル ⇒ Type = 1
・クエリ  ⇒ Type = 5
・フォーム ⇒ Type = -32768

などの数値となっています。


>>~sq_cフォーム名~sq_cコンボ名

という名前のオブジェクトについては
Type = 5 となっているかと思われます。

フォーム上に値集合ソースを指定したコンボボックスやリストボックスが
存在する場合、データベースウィンドウ上には表示されておりませんが
Access内にはクエリオブジェクトが存在しているという事が解るかと思われます。

コンボボックスの基になるソースのレコード数が多かったり、
またコンボボックスの個数そのものが多かったりすれば
クエリオブジェクトのサイズの増加に繋がり
それが肥大化の原因となっているのではないでしょうか。

また最適化してファイルサイズが減るのは
何かの際に一時的に作られたオブジェクトが
破棄されるからだと考えられますね。
・ツリー全体表示

【8953】リポートのフォーマットについて
質問  ひろ E-MAIL  - 07/1/10(水) 0:37 -

引用なし
パスワード
   表形式のリポートでフォーマット時に、各レコードに工期初と工期終があり、50日分のテキストボックスを作りました。VBで工期期間を色を塗ってみたいのですが、みんな同じ色になってしまいます。どなたか良い知恵はありませんか。

If Not Me!工期始 Then
  ks = Me!工期始
Else
  ks = Now
End If

Dim ke As Date
If Not Me!工期終 Then
  ke = Me!工期終
Else
  ke = Now + 20
End If

If Me!k >= ks And Me!k < ke Then
  Me!d01.BackColor = vbBlack
  Me!d02.BackColor = vbBlack

End If

If Me!k1 >= ks And Me!k1 < ke Then
  Me!d11.BackColor = vbBlack
  Me!d12.BackColor = vbBlack

このMe!k が連番になっていて50あります。
 最初のレコードにある工期だけがks,keに入っているだけで2番目の工期は
 入っていません。
・ツリー全体表示

【8952】Re:複数テーブルからのフォーム作成
お礼  きょん  - 07/1/9(火) 18:41 -

引用なし
パスワード
   Gin_II さん

ありがとうございます。
挑戦してみます。
・ツリー全体表示

【8951】Re:フォームの肥大化
お礼  ひろのしま E-MAIL  - 07/1/9(火) 13:24 -

引用なし
パスワード
   小僧さん。ありがとうございます。
内部で隠れている MSys〜のテーブルのうち、
・MSysAccessObjects
・MSysACEs
のテーブルの件数が最適化後に減少するという現象が起きていました(駄洒落)。

MSysObjectsのテーブルにNameという列があり
>~sq_cフォーム名~sq_cコンボ名
こういった名前のものがありましたが、
目安となるサイズの数値みたいなものは見当たりませんでした。

現在のところ確認できる事は以上でした。


▼小僧 さん:
>▼ひろのしま さん:
>おはようございます。
>
>>その上で、進捗管理_Data.mdbの容量が肥大化するのは分かるのですが、
>>進捗管理_Form.mdbも肥大化していってしまいます。
>>本来、テーブルを持たない進捗管理_Form.mdb側が肥大化してしまうのは
>>いけないことなのでしょうか?
>>肥大化するのには原因があるのでしょうか。
>
>進捗管理_Form.mdbを開いて
>[ツール] ⇒ [オプション] ⇒ 表示タブ にある
>システムオブジェクトにチェックを入れた後
>
>MSysObjects というテーブルを開いてみて下さい。
>
>フォームにコンボボックス等を配置し、
>その値集合ソースがリンクテーブルだった場合
>
>~sq_cフォーム名~sq_cコンボ名
>
>の様な名前のオブジェクトがある事が解るかと思われます。
>
>
>こういった隠されているオブジェクトが
>肥大化しているのではないでしょうか。
>
>
>関係のない話でしたら申し訳ありません。
・ツリー全体表示

【8950】Re:フォーム、レポートから、ユーザー定義...
発言  小僧  - 07/1/9(火) 10:54 -

引用なし
パスワード
   ▼bin さん:
こんにちは。

>これで、レポートのテキストボックスコントロールのコントロールソースに
>=test(10,6).a
>と設定すると、access自体が「落ちて」しまいます。

こちらでも再現しました。(Access2003 SP2)


代替案と言う訳ではないのですが、
コントロールソースを空白にして
フォーム(またはレポート)の開く際のイベントに

Private Sub Form_Load()
  Me.テキスト名.ControlSource = "=" & test(10, 4).a
End Sub

の様にすると、とりあえずは回避できるようですが…。
・ツリー全体表示

【8949】Re:フォームの肥大化
回答  小僧  - 07/1/9(火) 10:17 -

引用なし
パスワード
   ▼ひろのしま さん:
おはようございます。

>その上で、進捗管理_Data.mdbの容量が肥大化するのは分かるのですが、
>進捗管理_Form.mdbも肥大化していってしまいます。
>本来、テーブルを持たない進捗管理_Form.mdb側が肥大化してしまうのは
>いけないことなのでしょうか?
>肥大化するのには原因があるのでしょうか。

進捗管理_Form.mdbを開いて
[ツール] ⇒ [オプション] ⇒ 表示タブ にある
システムオブジェクトにチェックを入れた後

MSysObjects というテーブルを開いてみて下さい。

フォームにコンボボックス等を配置し、
その値集合ソースがリンクテーブルだった場合

~sq_cフォーム名~sq_cコンボ名

の様な名前のオブジェクトがある事が解るかと思われます。


こういった隠されているオブジェクトが
肥大化しているのではないでしょうか。


関係のない話でしたら申し訳ありません。
・ツリー全体表示

【8948】Re:複数テーブルからのフォーム作成
回答  Gin_II  - 07/1/9(火) 10:12 -

引用なし
パスワード
   > コードでなく名称で選択したいのですが、別テーブルの場合、
> アクセスではどのような方法で、これらを実現させるのがよいのでしょうか?

同じmdbファイル内の、別テーブルにあるのであれば、コンボボックスなどを
使ってやれば大丈夫ですね。


> それとも非連結の項目を使えば可能なのでしょうか?

連結コントロールで可能です。
コンボボックスの
 値集合タイプ:テーブル/クエリ
 値集合ソース:テーブル名
 列数:2

のようにすれば、別のテーブルを参照できます。
あとは、コントロールソース・列幅・連結列あたりのプロパティを
設定してください。
・ツリー全体表示

【8947】複数テーブルからのフォーム作成
質問  きょん  - 07/1/8(月) 23:04 -

引用なし
パスワード
   アクセス初心者です。

生徒管理用データベースを作っています。
科目や学校情報は、別途マスターがあるので
生徒情報は出来るだけ、学校名など持たずに
学校コードや科目コードだけを保有しようと考えてます。

ただ、生徒情報のフォーム上での登録や変更、照会は
コードでなく名称で選択したいのですが、別テーブルの場合、
アクセスではどのような方法で、これらを実現させるのがよいのでしょうか?

出来るだけシンプルな処理で実現したいと考えていますが、
具体的な方法が思いつきません。
予めクエリーを作る必要があるのでしょうか?
それとも非連結の項目を使えば可能なのでしょうか?

漠然とした質問で申し分かりませんが、
今の状態から抜け出すためのきっかけが欲しいです。

基本的なことで申し訳ありませんが
ご教示頂けます様、お願いします。
・ツリー全体表示

【8946】Re:ExcelとAccessのモジュール...
回答  パンダ  - 07/1/8(月) 9:02 -

引用なし
パスワード
   ▼Gin_II さん:
回答有難うございました。
結果は、すべてレポートです。
急ぎ試してみます。
>> 一つは、クエリに日付、人名、数量、その他いろいろがあります。その人名を一人
>> セレクトすると、その人の数量の合計、全ての日付が出るようにする。
>> また、これは人名別に(数量の合計の多い順に)一つの集計クエリに並べられて
>> いくようにしたい。
>
>最終結果はレポートでしょうから、
>
>日付 人名 数量の合計
>
>がでるような集計クエリを作ってください。
>で、抽出はレポート出力時にします。
>
>フォームで、コンボボックス等を使って、人を選択するためのコントロールを
>作成し、フォームのコマンドボタンを使ってレポートを出力すればいいですね。
>
>その際に、OpenReport メソッドの、WhereCondition 引数を使えば、抽出が
>可能です。
>
>
>並べ替えについても、レポートで設定しておけばいいです。
>なので、VBAが必要な処理ではない気がしますが・・・
>(OpenReport メソッドも、マクロを使ってもかまわないですし。)
・ツリー全体表示

【8945】Re:オブジェクトの管理
お礼  キキ  - 07/1/7(日) 18:43 -

引用なし
パスワード
   小僧さん

ありがとうございました。
希望する形にできるようになりました。
ただ、バグがありそうなことなので注意して運用をして見ます。

Gin_IIさん ありがとうございました。
・ツリー全体表示

【8944】Re:ExcelとAccessのモジュール...
回答  Gin_II  - 07/1/7(日) 10:25 -

引用なし
パスワード
   > 一つは、クエリに日付、人名、数量、その他いろいろがあります。その人名を一人
> セレクトすると、その人の数量の合計、全ての日付が出るようにする。
> また、これは人名別に(数量の合計の多い順に)一つの集計クエリに並べられて
> いくようにしたい。

最終結果はレポートでしょうから、

日付 人名 数量の合計

がでるような集計クエリを作ってください。
で、抽出はレポート出力時にします。

フォームで、コンボボックス等を使って、人を選択するためのコントロールを
作成し、フォームのコマンドボタンを使ってレポートを出力すればいいですね。

その際に、OpenReport メソッドの、WhereCondition 引数を使えば、抽出が
可能です。


並べ替えについても、レポートで設定しておけばいいです。
なので、VBAが必要な処理ではない気がしますが・・・
(OpenReport メソッドも、マクロを使ってもかまわないですし。)
・ツリー全体表示

【8943】Re:ExcelとAccessのモジュール...
回答  パンダ  - 07/1/7(日) 10:04 -

引用なし
パスワード
   ▼Gin_II さん:
Gin_IIさん、お返事有難うございます。
データの集積は集計クエリのことです。
私は一時期、Excelで表を打ち込んだ後、モジュールを打ち込んで計算結果を別シートに出して、それをプリントアウトしていましたが、今はAccessのほうが便利だということが分かり、こっちを使っています。
計算させたいのは、以前Excelにてした計算です。

一つは、クエリに日付、人名、数量、その他いろいろがあります。その人名を一人セレクトすると、その人の数量の合計、全ての日付が出るようにする。また、これは人名別に(数量の合計の多い順に)一つの集計クエリに並べられていくようにしたい。

二つ目は、毎日打ち込まれているデータで数量1、数量2、数量3、数量4があります。日付をセレクトすると指定した期間の数量1の合計、数量2の合計、数量3の平均、数量4の平均が出るようにする。これらも一つの集計クエリに(これは日付の古い順に)並べられていくようにしたい。

三つ目は、日付、人名、数量1から数量4まであります。その人の数量1の合計から数量3の合計をひいた数字、数量2の合計から数量4の合計をひいた数字を人名別に出るようにする。また、これも一つの集計クエリに出るようにしたいのですが、ひいた結果の数字がゼロに近い数字のものが上から順に並ぶようにしたい。

以上の三つです。
可能な限り自分の力でやりたいのですが、是非力をお貸し頂きたいです。
宜しくお願いします。
>> データの集積が出来るようになり、
>
>集計クエリのことでしょうか?
>
>
>> 計算されたものをプリントアウトすることです。
>
>どんな計算?
>
>
>> Excelにモジュールを打ち込んだことはありますが、それと同じものを打ち込んで大丈夫でしょうか?
>
>どのようなコードなのかわかりませんが、ダメでしょう。
>
>
>> モジュールを打ち込むクエリ設定も教えていただけると助かります。
>
>標準モジュールに、Function プロシージャを作成してください。
>それをクエリから呼びだします。
・ツリー全体表示

【8942】Re:ExcelとAccessのモジュール...
発言  Gin_II  - 07/1/6(土) 19:44 -

引用なし
パスワード
   > データの集積が出来るようになり、

集計クエリのことでしょうか?


> 計算されたものをプリントアウトすることです。

どんな計算?


> Excelにモジュールを打ち込んだことはありますが、それと同じものを打ち込んで大丈夫でしょうか?

どのようなコードなのかわかりませんが、ダメでしょう。


> モジュールを打ち込むクエリ設定も教えていただけると助かります。

標準モジュールに、Function プロシージャを作成してください。
それをクエリから呼びだします。
・ツリー全体表示

【8941】Re:空室管理
お礼  ヒロ  - 07/1/6(土) 17:19 -

引用なし
パスワード
   ありがとうございました。
お蔭様で目的に到達いたしました。
正月早々から本当にありがとうございました。
DMAXの関数で出来るとは夢にも思いませんでした。
頭が固いですね。笑わないでくださいね。
又、大変勉強になりました。今後ともよろしくお願い申し上げます。
▼Gin_II さん:
>> 【空室抽出】
>> SELECT 入居者マスタ.*
>> FROM 入居者マスタ
>> WHERE 入居者マスタ.[入居年月日]=DMax("入居年月日"
>>                   , "入居者マスタ"
>>                   , "部屋ID=" & [部屋ID])
>>  AND 入居者マスタ.退去年月日 Is Not Null;
>
>これを、そのままコピーじゃ、エラーになりますね ^^;
>見やすいように、全角スペースでインデントをつけてます。
>
>【空室抽出】
>SELECT 入居者マスタ.*
>FROM 入居者マスタ
>WHERE 入居者マスタ.[入居年月日]=DMax("入居年月日"
>                  , "入居者マスタ"
>                  , "部屋ID=" & [部屋ID])
> AND 入居者マスタ.退去年月日 Is Not Null;
>
>半角スペースにしてやれば、大丈夫だと思います。
・ツリー全体表示

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