Access VBA質問箱 IV

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

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


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

【12663】複数のクエリを実行です
質問  [okamoto]  - 14/12/8(月) 15:52 -

引用なし
パスワード
   ユニオンクエリで作成した、クエリ(名前DATE1)
そのdate1を「テーブル作成クエリ」で作成したクエリ(名前DATE2)
を、テーブル(名前、資料)に表示します。
その「資料」を再ユニオンクエリで編集して最終数字等を表示します
そのデータベースからフォーム(表)を作成
ボタン1を貼り付け
ボタン1をクリックしたらデータベースを表示したいのですが。
どのように、マクロ実行したらいいのでしょうか。
ご指導お願いします

access2007
・ツリー全体表示

【12662】Re:[SQLに小計、累計を追加する]
お礼  [miyama]  - 14/12/8(月) 10:42 -

引用なし
パスワード
   hatena 様 ありがとうございます

なかなかむつかしいです。
時間かかりますが、頑張ります。
感謝です
・ツリー全体表示

【12661】Re:[SQLに小計、累計を追加する]
回答  hatena  - 14/12/3(水) 10:36 -

引用なし
パスワード
   >>月単位のグループフッターを表示させて、
>月単位ですが、クエリに「月」フィールドを
>作らないといけないのですか?

バージョンは2007ですね。

2010なら、グループ化、並べ替え、集計のウィンドウのグルーブのところで、グループ化の単位を設定できますので、そこで月を選択すればいいですが、2007の場合、設定できたかどうか記憶にありません。

もしできないようなら、クエリで「月」フィールドを作成しておくのが簡単でしょう。

>パラメータの入力「月計」と表示されます
>何か間違えたのでしょうか


前回の回答が間違ってました。累計のテキストボックスは

コントロールソース =[txt月計]

というように月計を表示しているテキストボックスの名前を設定してください。
・ツリー全体表示

【12660】Re:[SQLに小計、累計を追加する]
質問  [miyama]  - 14/12/3(水) 10:15 -

引用なし
パスワード
   hatenaさんありがとうございます
>並べ替え、グループ化の機能で、月単位のグループフッターを表示させて、
>そこにテキストボックスを配置して、
>コントロールソース =Sum([貸方金額])
>名前 txt月計で月計を表示できます。累計は、
>コントロールソース =[月計]
>集計実行 全体と設定
上記の通りおこなったのですが
パラメータの入力「月計」と表示されます
何か間違えたのでしょうか
access2007です
・ツリー全体表示

【12659】Re:[SQLに小計、累計を追加する]
発言  [miyama]  - 14/12/1(月) 17:12 -

引用なし
パスワード
    hatena様 確認ですが
>月単位のグループフッターを表示させて、
月単位ですが、クエリに「月」フィールドを
作らないといけないのですか?

よろしくお願いします


  
・ツリー全体表示

【12658】Re:集計クエリがうまくいかない
お礼  おまき  - 14/12/1(月) 16:30 -

引用なし
パスワード
   いったん解決にしてから、思いつきました。

かるびのさんのおっしゃった
>購入理由の最大をGroup By句から外す
の意味をはき違えていました

[購入理由の最大]フィールドの集計をグループ化から"先頭"とかにすればよかったのですね・・・
そしたら、クエリを二つ作らなくても一つで済みますね。
お恥ずかしい。じっくり考えてやっとわかりました。ありがとうございました。
・ツリー全体表示

【12657】Re:集計クエリがうまくいかない
お礼  おまき  - 14/12/1(月) 16:19 -

引用なし
パスワード
   ご回答ありがとうございました、解決いたしました

仰る通り「購入理由の最大」の項目の値が違うため集計できてませんでした。
ただ、非可視とはいえ抽出のために必要なフィールドなので、悩んだ末このクエリを基にさらにクエリを作成して集計しました
ありがとうございました。
・ツリー全体表示

【12656】Re:[SQLに小計、累計を追加する]
発言  [miyama]  - 14/12/1(月) 15:44 -

引用なし
パスワード
   hatena様 ありがとうございます

>レコードソースとするレポートを作成する

了解しました。
やってみます
  
・ツリー全体表示

【12655】Re:[SQLに小計、累計を追加する]
回答  hatena  - 14/12/1(月) 14:34 -

引用なし
パスワード
   クエリでできないことはないですが、
複雑になりますし、重い処理になります。

現状のクエリをレコードソースとするレポートを作成すれば、
標準の機能で、簡単に希望の結果を得ることができます。

並べ替え、グループ化の機能で、月単位のグループフッターを表示させて、
そこにテキストボックスを配置して、

コントロールソース =Sum([貸方金額])
名前 txt月計

で月計を表示できます。累計は、

コントロールソース =[月計]
集計実行 全体

と設定します。
・ツリー全体表示

【12654】[SQLに小計、累計を追加する]
質問  [miyama]  - 14/12/1(月) 13:48 -

引用なし
パスワード
   元帳を作成するため以下の内容をSQLで作成しました。

ID 日付 相手科目 摘要  借方金額 貸方金額 
1---1/20----普通----預金--------------1000
3---1/25----給料----支払--------------1000
5----2/1----売上----商店---200000
8---3/25---接待費--居酒屋-------------2000
10--4/10----売上----商店---100000
12--5/10----給料----支払--------------3000
下記コードです。フォーム元帳のtextbox1にコードを
記入したら表示するようにしました
工事仕訳テーブルからです
SELECT
ID
, 貸方科目 AS 相手科目
, 日付
, 摘要
, 借方金額
, "" AS 貸方金額
FROM
工事仕訳
WHERE
借方コード = forms!元帳_uf!textbox1
UNION SELECT
ID
, 借方科目 AS 相手科目
, 日付
, 摘要
, "" AS 借方金額 
, 貸方金額
FROM
工事仕訳
WHERE
貸方コード = forms!元帳_uf!textbox1;

この元帳に日付を基準に、「小計」「累計」を挿入したいです
下記のようにです

ID 日付 相手科目 摘要  借方金額 貸方金額 
1---1/20----普通----預金----------------1000
3---1/25----給料----支払----------------1000
-------------------1月計----------------2000      
--------------------累計----------------2000
5---2/1-----売上----商店-----200000
-------------------2月計-----200000           
--------------------累計-----200000-----2000
8---3/25---接待費--居酒屋---------------2000
-------------------3月計----------------2000           
--------------------累計-----200000-----4000
10--4/10----売上----商店-----100000
-------------------4月計-----100000    
--------------------累計-----300000-----4000
12--5/10----給料----支払----------------3000
-------------------5月計----------------3000
--------------------累計-----300000-----7000

上記は、基準月を1取引にしていますが、多数あります
又、月計、累計の行に、色を付ければと。
ご指導お願い申します
・ツリー全体表示

【12653】Re:2つのテーブルに同じデータを入力し...
お礼  kok  - 14/11/28(金) 17:31 -

引用なし
パスワード
   返信ありがとうございます。

アクセスはレコード抽出するのが得意なのはわかっていたのですが、数百件の顧客に項目が増える毎に一つずつ入力することが困難だと思い、横に広げる方法を選んでました。

先程このデータベースを使う担当者と話をし、前年のをコピーして使えば入力作業が少なくできるのではないかという事が持ち上がりました。

まだ構想段階ですので、どうのようにしたら使いやすいか考え中ですので、また行き詰ったらよろしくお願いします。
・ツリー全体表示

【12652】Re:2つのテーブルに同じデータを入力し...
発言  かるびの  - 14/11/28(金) 0:24 -

引用なし
パスワード
    気になった点があります。

>1対1結合なんですが、T発送テーブルに○年お歳暮、○年年賀状・・・とフィールドを追加していく>ので、顧客フィールドのインデックスは重複なしにして結合しましたので1対1となっております。
 データベースは、データは縦へ延ばしていくものです。
横へ延ばしていくようなテーブル構成にしてはいけません。

 その理由ですが、第一に、各オブジェクトのプロパティには、
フィールド名を使うものがたくさんあります。
 フィールドを新設すると、それらのプロパティを再設定しなければならなくなります。
ただ、そういうプロパティはいろいろあり過ぎるので、どのプロパティを再設定すべきかは
直ちにはわかりません。
 いろいろと動かしてみて、不具合が出たら直すということにならざるを得ません。
 もっとも、そんな悠長なことはしていられません。
結局、クエリ、フォーム、レポートなどを一から作り直すのが最も手っ取り早いということになります。
 しかし、フィールドを新設する都度、クエリ等を一から作り直すというのは面倒です。
 だから、フィールドをあとで追加するようなテーブルにしてはいけないのです。

 第二に、アクセスは、
縦に並んだものの中からある行、つまりレコードを抽出することは得意ですが、
横に並んだものの中からある列、つまりフィールドを抽出することはできません。
 上例で、ある顧客について、発送したのはいつだったかなと調べようと思っても、
該当するフィールドを抽出することはできません。
 
 第三に、横へ延ばしていくようなテーブル構成は、データベースとしてルール違反であり、
このデータベースにさらにいろいろな機能を盛り込みたいと思った場合、このルール違反のため、
機能拡大ができなくなる、あるいは無駄に手数を要することになってしまいます。


 では、テーブル構成をどうすべきかですが、T発送テーブルは、
    発送ID   オートナンバー又は長整数型 (主キー)
    顧客番号  長整数型
    発送年   整数型  「○年お歳暮」における「○年」を格納する
    発送事由ID 長整数型  
とし、さらにT発送事由を設け
    発送事由ID オートナンバー又は長整数型 (主キー)
    発送事由  テキスト型 「○年お歳暮」における「お歳暮」を格納する。
とするのがいいと思います。  

 T発送事由を設けるのは、
テーブル設計では、あるフィールドにおいて同じ値となるレコードが存在する場合は、
そのフィールドを別テーブルにするというルールがあるからです(テーブルの正規化)。
・ツリー全体表示

【12651】Re:2つのテーブルに同じデータを入力し...
お礼  kok  - 14/11/27(木) 11:37 -

引用なし
パスワード
   ありがとうございます。

第一の方法でできました。
いろいろ調べたのですが、こんな簡単は方法があるとは知りませんでした。


1対1結合なんですが、T発送テーブルに○年お歳暮、○年年賀状・・・とフィールドを追加していくので、顧客フィールドのインデックスは重複なしにして結合しましたので1対1となっております。
念のためリレーションシップを確認したら、リレーションシップの種類は一対一になっているのですが、結合線は1―∞になっています。何かおかしいです・・・
とりあえずエラーも出ず動くので様子をみてみます。


また何かありましたらよろしくお願いします。
・ツリー全体表示

【12650】Re:集計クエリがうまくいかない
回答  かるびの  - 14/11/26(水) 15:35 -

引用なし
パスワード
   >何がおかしいのかご指摘よろしくお願いします
 IDコードがBであるレコードのうち、
「金額の合計」フィールドの値が600であるレコードと250であるレコードとでは、
「購入理由の最大」フィールドの値が異なっているからではないでしょうか。

 もし、そうであれば、GROUP BY 句から「購入理由の最大」フィールドを
はずせば、
IDコードがBであるレコードについて、1レコードだけが返され、
「金額の合計」フィールドの値も850になると思います。
・ツリー全体表示

【12649】集計クエリがうまくいかない
質問  おまき  - 14/11/26(水) 13:34 -

引用なし
パスワード
   こんにちは、基本的な質問かもしれませんが、よろしくお願いします
集計クエリがうまくいかなくて悩んでいます

SELECT [ID+ID名].[ID+ID名] AS IDコード, テーブルA.日付, [部署CD] & " " & [部署名] AS 部署名CD, [カテゴリ+カテゴリ名].汎用カテゴリ AS カテゴリコード,
Sum(テーブルA.金額) AS 金額の合計, "課税仕入" AS 税区分, Val(8) AS 税率, "A000001" AS 取引先CD, テーブルA.支払日付, テーブルA.備考, テーブルA.No
FROM [カテゴリ+カテゴリ名] RIGHT JOIN ([ID+ID名] RIGHT JOIN テーブルA ON [ID+ID名].ID一覧表 = テーブルA.ID) ON [カテゴリ+カテゴリ名].カテゴリ = テーブルA.カテゴリ
GROUP BY [ID+ID名].[ID+ID名], テーブルA.日付, [部署CD] & " " & [部署名], [カテゴリ+カテゴリ名].汎用カテゴリ, "課税仕入", Val(8), "A000001", テーブルA.支払日付, テーブルA.備考, テーブルA.No, テーブルA.購入理由の最大
HAVING (((テーブルA.購入理由の最大) Not Like "*お歳暮*"));

展開すると、

IDコード 日付   部署名CD カテゴリコード 金額の合計 税区分 税率 取引先CD 支払予定日 備考    No 
A    2014/5/18  1 経理   あああ    500    課税  8  A00001  2014/6/30 あいうえお 5555
B    2014/5/18  1 経理   あああ    600     課税  8  A00001   2014/6/30 あいうえお 6666
B    2014/5/18  1 経理    あああ    250    課税  8  A00001  2014/6/30 あいうえお 6666   
C    2014/5/18  1 経理   あああ    150    課税  8  A00001  2014/6/30 さしすせそ 7777

IDコードのBが集計されて「金額の合計」 のフィールドが850になってほしいのになりません
何がおかしいのかご指摘よろしくお願いします

※[購入理由の最大]フィールドは不可視です
よろしくお願いします
・ツリー全体表示

【12648】Re:2つのテーブルに同じデータを入力し...
回答  かるびの  - 14/11/25(火) 23:18 -

引用なし
パスワード
   >以前はマクロで値の代入があったと思うのですが、Access2010では無くなってしまったのでしょう
>か?
 2010は持っていませんし、マクロは全くわからないのですが、こんなページがありました。
ht tp://answers.microsoft.com/ja-jp/office/forum/office_2010-access
/%E3%83%9E%E3%82%AF%E3%83%AD%E5%80%A4%E3%81%AE
/170e06e9-aacd-40bd-bb5d-36e741ca9459?auth=1


>1対1で結合しています。
 余計なお世話ですが、本当に一対一結合でいいんでしょうか。
 一対一結合だと、1人の顧客について1回の発送しかデータを格納できない
ことになってしまいます。
 テーブル名から見ると、T顧客名とT発送テーブルとは一対多ではないかと
思うんですが。


>両方のテーブルを基にF顧客名とF発送フォームを作成し、同時に両方のフォームを開いてF顧客
>名フォーム内にある顧客番号テキストに値を代入すると、F発送フォーム内の顧客番号テキストボ
>ックスに同じ値を代入したいのですがうまくいきません。
 第一の方法です。
 フォームを1つだけにしてしまう方法です。2つのフォームを同時に
開くよりも、フォームは1つだけにした方が入力しやすいと思います。

 まず、T顧客名とT発送テーブルとを、顧客番号フィールドで結合するクエリを作ります。
 次に、フォームのレコードソースに、上記のクエリを設定します。
 次に、このフォームに各種コントロールを配置していきますが、
顧客番号のテキストボックスは1個だけ設けます。
 そして、顧客番号テキストボックスのコントロールソースに、
T発送テーブルの顧客番号フィールドを設定します。

 こうしておけば、「顧客番号」テキストボックスに入力すると、
両テーブルの顧客番号フィールドに入力されます。


 第二の方法です。
 F顧客名とF発送フォームと同時に開いて入力する場合です。
 F顧客名の顧客番号テキストボックスのAfterUpdateイベントで、
F発送フォームの顧客番号テキストボックスに
F顧客名の顧客番号テキストボックスの値を代入します。

Private Sub 顧客番号_AfterUpdate()
  If SysCmd(acSysCmdGetObjectState, acForm, "F発送フォーム") <> 0 Then
    Forms!F発送フォーム!顧客番号.Value = Me!顧客番号.Value
  End If
End Sub

 なお、上記のSysCmdメソッドですが、
上記コード実行時にF発送フォームが開いていないと、エラーになるため、
F発送フォームが開いているかをチェックします。
・ツリー全体表示

【12647】2つのテーブルに同じデータを入力したい
質問  kok  - 14/11/25(火) 15:44 -

引用なし
パスワード
   T顧客名とT発送テーブルの両方に顧客番号フィールドがあり、T顧客名テーブル内の顧客番号フィールドに主キーで設定し、リーレーションシップで1対1で結合しています。

両方のテーブルを基にF顧客名とF発送フォームを作成し、同時に両方のフォームを開いてF顧客名フォーム内にある顧客番号テキストに値を代入すると、F発送フォーム内の顧客番号テキストボックスに同じ値を代入したいのですがうまくいきません。
どのようにしたらよろしいでしょうか?

以前はマクロで値の代入があったと思うのですが、Access2010では無くなってしまったのでしょうか?

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

【12646】Re:Accessの抽出について
回答  かるびの  - 14/11/19(水) 23:44 -

引用なし
パスワード
    どういうクエリを作りたいのか、2つくらい考えられるのですが、
どちらのものかのかわかりません。
 テーブルのレコード例と、作りたいクエリのレコード例を
示してみてください。
・ツリー全体表示

【12645】Accessの抽出について
質問  ちの  - 14/11/19(水) 9:55 -

引用なし
パスワード
   Accessのクエリについて質問なのですが、
たとえば、一番売れている地域を抽出するときに、
1つの品目で一番多く売れている金額の地域をフィールドに表示させるにはどうした
らよいのでしょうか。
説明がわかりにくくてすいません。

・ツリー全体表示

【12644】Re:クエリのフィールドの制限
お礼  bbk  - 14/11/18(火) 17:45 -

引用なし
パスワード
   かるびの 様
Pirorin 様
返信いただきましてありがとうございます。

モジュールに関数を作成しクエリ上で解決することが出来ました。
また、SQLビューに書き込む方法も今後の参考になりました。

素早い回答で問題が解決しました。
ありがとうございました。
・ツリー全体表示

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