Access VBA質問箱 IV

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

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


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

【9551】Re:DSUM関数の日ごと、商品ごとの集計
質問  miyake  - 07/6/10(日) 13:09 -

引用なし
パスワード
   ▼hatena さん:
回答ありがとうございます。
私の説明不足もあり、うまく伝わらず、うまくいきませんでした。

クエリーで求めたい形は

商品売上テーブル
売上日    商品名    金額
2007/05/01    ビデオ    100000
2007/05/01    エアコン    50000
2007/05/01    テレビ    300000
2007/05/02    パソコン    200000
2007/05/02    エアコン    50000
2007/05/03    パソコン    200000
2007/05/03    テレビ    300000
2007/05/04    テレビ    300000
2007/05/04    パソコン    200000
2007/05/04    エアコン    50000
2007/05/05    テレビ    130000
2007/05/05    パソコン    200000
2007/05/06    パソコン    200000
2007/05/06    ビデオ    100000



求めたいクエリーの結果
売上日    商品名    金額
2007/05/01    ビデオ    100000
2007/05/01    エアコン    50000
2007/05/01    テレビ    300000
2007/05/02    パソコン    200000
2007/05/02    エアコン    100000
2007/05/03    パソコン    400000
2007/05/03    テレビ    600000
2007/05/04    テレビ    900000
2007/05/04    パソコン    600000
2007/05/04    エアコン    150000
2007/05/05    テレビ    1030000
2007/05/05    パソコン    800000
2007/05/06    パソコン    1000000
2007/05/06    ビデオ    200000

このような形です。
例えばエアコンを例に説明しますと、エアコンが5月1日と2日と4日に50000円で1台売れたとします。
これをクエリーの結果では、5月1日のエアコンの金額は50000円、2日は100000円、4日は150000円と、その日の金額にその日以前の累計を出したいのです。これを商品ごとにしたいのですが、可能でしょうか。
よろしくお願いします。
・ツリー全体表示

【9550】Re:フォームに自動的に採番をしたいのです...
回答  hatena  - 07/6/10(日) 11:55 -

引用なし
パスワード
   >>=DCount("*", "お客様情報", "会社名カナ='" & [会社名カナ] & "'")

ごめんなさい。前回の回答に間違いがありました。

=DCount("*", "お客様情報", "会社名カナ<='" & [会社名カナ] & "'")

ですね。

>重複を考慮して、工夫してみます。

重複があるのなら、カナとの組み合わせで、並び順が位置に決まるフィールドが
必要です。主キーがあるのならそれを ID (数値型)として

=DCount("*", "お客様情報",
"会社名カナ<'" & [会社名カナ] & "' OR (会社名カナ='" & [会社名カナ] &
"' AND ID<=" & [ID] & ")")
・ツリー全体表示

【9549】Re:フォームに自動的に採番をしたいのです...
発言  大河原  - 07/6/10(日) 11:43 -

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

実は、「ORDER BY お客様情報.会社名カナ・・」で苦戦していました。

>>前画面の条件入力画面で「会社名順表示」ボタンクリックした時のイベントは
>> Private Sub 会社名順表示_Click()
>>    DoCmd.OpenForm "Aクエリ"
>
>ここは、
>
>DoCmd.OpenForm "Aフォーム"
>
>ですよね。

すみません、"Aフォーム"でした。

>
>会社名カナ には重複は有りませんか。
会社名カナには重複が存在します。

>ないのなら、連番 のテキストボックスのコントロールソースに
>
>=DCount("*", "お客様情報", "会社名カナ='" & [会社名カナ] & "'")
>
>と設定すれば連番が表示されると思います。
>クエリの方に、上記の式の演算フィールドを追加しても
>いいです。
>

>SELECT *,
> DCount("*", "お客様情報", "会社名カナ='" & [会社名カナ] & "'")
> AS 連番
>FROM お客様情報
>ORDER BY お客様情報.会社名カナ;

ありがとうございます。
重複を考慮して、工夫してみます。
・ツリー全体表示

【9548】Re:フォームに自動的に採番をしたいのです...
回答  hatena  - 07/6/10(日) 11:24 -

引用なし
パスワード
   >表形式のフォームに連番を0001〜nnnnまで自動採番をして
>表示したいのですが。
>
>「Aテーブル」から、会社名順に抽出する
>「Aクエリ」を作り、抽出した結果を表示する
>「Aフォーム」を作りました。
>この「Aフォーム」(表形式です)の行の一番左には、"連番"という領域が
>あります。
>この"連番"に1〜自動採番をしたいのですが手法が分かりません。
>
>「Aテーブル」のデザインは、氏名,会社名,住所・・ となっています。
>
>前画面の条件入力画面で「会社名順表示」ボタンクリックした時のイベントは
> Private Sub 会社名順表示_Click()
>    DoCmd.OpenForm "Aクエリ"

ここは、

DoCmd.OpenForm "Aフォーム"

ですよね。
> End Sub です。

>「Aクエリ」の内容は
>SELECT *
>FROM お客様情報
>ORDER BY お客様情報.会社名カナ;
>としました。
>
>「Aフォーム」のデザインは
>連番(非連結),氏名(連結),会社名(連結),住所(連結)・・
>となっています。

会社名カナ には重複は有りませんか。
ないのなら、連番 のテキストボックスのコントロールソースに

=DCount("*", "お客様情報", "会社名カナ='" & [会社名カナ] & "'")

と設定すれば連番が表示されると思います。
クエリの方に、上記の式の演算フィールドを追加しても
いいです。

SELECT *,
DCount("*", "お客様情報", "会社名カナ='" & [会社名カナ] & "'")
AS 連番
FROM お客様情報
ORDER BY お客様情報.会社名カナ;
・ツリー全体表示

【9547】Re:DSUM関数の日ごと、商品ごとの集計
回答  hatena  - 07/6/10(日) 10:14 -

引用なし
パスワード
   >このクエリーは、売上日と商品名はグループ化し、金額の累計は
>金額の累計: DSum("金額","商品売上テーブル","売上日 <= #" & [売上日] & "#")
>にしています。
>このクエリーでは、日ごとに加算した累計はでますが、商品名が無視されています。
>ここで質問ですが、日ごとの加算した累計をさらに商品名ごとに分けてだすことはできるのでしょうか。

金額の累計: DSum("金額","商品売上テーブル",
"売上日 < #" & [売上日] & "# OR (売上日=#" & [売上日] & "# AND 商品名<='" & [商品名] & "')")

でいかが。
・ツリー全体表示

【9546】Re:レポートの改ページ
回答  hatena  - 07/6/10(日) 10:10 -

引用なし
パスワード
   >初心者質問ですみませんが、ACCESS2000のレポートで、
>中途半端な時には改ページしちゃいたい時はどうしたら
>よいのでしょうか。
>グループの途中でページまたいじゃうのが困ってます。

「並び替え/グループ化の設定」のグループプロパティで
「同一ページ印刷」を「グループ全体」に設定してください。
・ツリー全体表示

【9545】Re:社員名だけ固有にしたい。
発言  hatena  - 07/6/10(日) 10:08 -

引用なし
パスワード
   Moug掲示板とマルチポストですね。

ここの基本方針をお読みください。
上にリンクがあります。

ここはマルチポストは禁止ではないですが、
その旨を宣言すること、他で解決したら結果を
報告すること、となっていますので、放置せずに
ちゃんと対応してくださいね。
・ツリー全体表示

【9544】Re:フォームに自動的に採番をしたいのです...
回答  kohji  - 07/6/10(日) 5:18 -

引用なし
パスワード
   大河原 さん おはようございます

>※私には、SELECT文 B, の意味を理解できていません。
Bはその他大勢のフィールド達をイメージしていました
説明不足でした… すみませんです

>「Aテーブル」のデザインは、氏名,会社名,住所・・ となっています。

このAテーブルを参考に以下のような感じで作成してみました

SELECT
Format((SELECT COUNT(*)+1 FROM A WHERE A.ID < T1.ID),'0000') AS 連番,
T1.*
FROM A AS T1;

IDフィールドは主キーです
※必ず主キーを使用してください

以上 よろしくでした
・ツリー全体表示

【9543】レポートの改ページ
質問  Miki  - 07/6/10(日) 2:52 -

引用なし
パスワード
   お世話になります。
初心者質問ですみませんが、ACCESS2000のレポートで、
中途半端な時には改ページしちゃいたい時はどうしたら
よいのでしょうか。
グループの途中でページまたいじゃうのが困ってます。
よろしくお願いします。
・ツリー全体表示

【9542】DSUM関数の日ごと、商品ごとの集計
質問  miyake  - 07/6/9(土) 22:53 -

引用なし
パスワード
   いつもお世話になっております。
クエリーで結果を出したいのですが、うまくいかないため知恵を貸してください。
たとえば、商品売上テーブルがあります。

商品売上テーブル
売上日    商品名    金額
2007/05/01    ビデオ    100000
2007/05/01    エアコン    50000
2007/05/01    テレビ    300000
2007/05/02    パソコン    200000
2007/05/02    エアコン    50000
2007/05/03    パソコン    200000
2007/05/03    テレビ    300000
2007/05/04    テレビ    300000
2007/05/04    パソコン    200000
2007/05/04    エアコン    50000
2007/05/05    テレビ    130000
2007/05/05    パソコン    200000
2007/05/06    パソコン    200000
2007/05/06    ビデオ    100000

次に、これをもとにして、日ごとの累計金額を出そうとします。
(1日ごとに金額の累計が加算されていくもの)

金額の累計クエリー
売上日    商品名    金額の累計
2007/05/01    ビデオ    450000
2007/05/01    エアコン    450000
2007/05/01    テレビ    450000
2007/05/02    パソコン    700000
2007/05/02    エアコン    700000
2007/05/03    パソコン    1200000
2007/05/03    テレビ    1200000
2007/05/04    テレビ    1750000
2007/05/04    パソコン    1750000
2007/05/04    エアコン    1750000
2007/05/05    テレビ    2080000
2007/05/05    パソコン    2080000
2007/05/06    パソコン    2380000
2007/05/06    ビデオ    2380000

このクエリーは、売上日と商品名はグループ化し、金額の累計は
金額の累計: DSum("金額","商品売上テーブル","売上日 <= #" & [売上日] & "#")
にしています。
このクエリーでは、日ごとに加算した累計はでますが、商品名が無視されています。
ここで質問ですが、日ごとの加算した累計をさらに商品名ごとに分けてだすことはできるのでしょうか。
教えてください、よろしくお願いします。
・ツリー全体表示

【9541】Re:フォームに自動的に採番をしたいのです...
質問  大河原  - 07/6/9(土) 20:33 -

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

>>SELECT *
>>FROM tacifimport
>>ORDER BY tacifimport.kaisyameikana;
>
>SELECT
>A,
>B,
>(SELECT COUNT(*) + 1 FROM tacifimport WHERE tacifimport.A < T1.A )
>AS 連番
>
>FROM
>tacifimport AS T1;
>
>上記のような形で連番が振られると思います
>Aのフィールドは主キーです

※私には、SELECT文 B, の意味を理解できていません。

質問の内容を変えました。
Access2003です。

表形式のフォームに連番を0001〜nnnnまで自動採番をして
表示したいのですが。

「Aテーブル」から、会社名順に抽出する
「Aクエリ」を作り、抽出した結果を表示する
「Aフォーム」を作りました。
この「Aフォーム」(表形式です)の行の一番左には、"連番"という領域が
あります。
この"連番"に1〜自動採番をしたいのですが手法が分かりません。

「Aテーブル」のデザインは、氏名,会社名,住所・・ となっています。

前画面の条件入力画面で「会社名順表示」ボタンクリックした時のイベントは
Private Sub 会社名順表示_Click()
    DoCmd.OpenForm "Aクエリ"
End Sub です。

「Aクエリ」の内容は
SELECT *
FROM お客様情報
ORDER BY お客様情報.会社名カナ;
としました。

「Aフォーム」のデザインは
連番(非連結),氏名(連結),会社名(連結),住所(連結)・・
となっています。

訳も分からず下記の事をしてみましたが
Private Sub 会社名順表示_Click()
    DoCmd.OpenForm "Aクエリ"
    Dim Bango As Variant
    Bango = "0000"
    連番 = Format(Bango + 1, "0000")
    DoCmd.OpenForm "Aクエリ"
End Sub

『実行時エラー'3164'フィールドを更新できません。』と
エラーになり、HELPを参照すると』フィールドを更新できません。
(Error 3164)
原因:
現在、ほかのユーザーによってロックされているレコードまたは
テーブルのフィールドを更新しようとしました。
ほかのユーザーがレコードやテーブルの処理を完了してから、
もう一度実行してください。
MicrosoftR Access で、Locked プロパティが Yes に設定されている
コントロールの値を変更しようとしました。

と解説にありました。

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

【9540】Re:フォームに自動的に採番をしたいのです...
回答  kohji  - 07/6/9(土) 16:56 -

引用なし
パスワード
   大河原 さん こんにちは

>SELECT *
>FROM tacifimport
>ORDER BY tacifimport.kaisyameikana;

SELECT
A,
B,
(SELECT COUNT(*) + 1 FROM tacifimport WHERE tacifimport.A < T1.A ) AS 連番

FROM
tacifimport AS T1;

上記のような形で連番が振られると思います
Aのフィールドは主キーです

以上 お試しくださいませ〜
・ツリー全体表示

【9539】Re:社員名だけ固有にしたい。
回答  kohji  - 07/6/9(土) 16:36 -

引用なし
パスワード
   よっくん さん こんにちは

>図1
>   佐藤 : 帰社   :5月10日
>
>   佐藤 : 様子伺い :5月8日
>
>   佐藤 : 出向   :5月1日
>
>       ↓
>図2
>   佐藤 : 帰社   :5月10日

上記のように社員名のみ固有にしたいのであれば
グループ化は社員名のみになります

他フィールドの
ステータス名および日付は集計する形になると思われます

SELECT
社員名, First(ステータス名) AS ステータス名, Max(日付) AS 日付

WHERE
ステータスフラグ=Yes AND 削除フラグ=No

GROUP BY
社員名

簡単に考えればこんな形になるかと思われます

しかしこれでは
図2が以下のようになってしまう場合があります
 佐藤 : 様子伺い:5月10日

ですので…

SELECT
社員ID, Max(日付ID) AS 日付ID

FROM
日付テーブル

GROUP BY
社員ID

こんな感じのクエリを作成して
そのクエリを元に目的のビュー表を作成してみては
いかがでしょうか?

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

【9538】社員名だけ固有にしたい。
質問  よっくん E-MAIL  - 07/6/9(土) 15:48 -

引用なし
パスワード
   テーブル      フィールド
社員名テーブル  :社員名ID、社員名、社員名フリガナ、削除フラグ
ステータステーブル:ステータスID、ステータス名、ステータスフラグ
日付テーブル   :日付ID、社員名ID、ステータスID、日付、
          様子伺いの担当者、備考(帰社した期間)


SQL文で、図2のように社員名だけ固有化して図2のように表示させたいので
すが、図1のように社員名とステータス名が固有化されてしまい図1のように
表示されてしまいます。どうしたらいいのですか。

教えてください。お願い致します。


   社員名:ステータス名: 日付
図1
   佐藤 : 帰社   :5月10日

   佐藤 : 様子伺い :5月8日

   佐藤 : 出向   :5月1日

       ↓

   社員名:ステータス名: 日付
図2
   佐藤 : 帰社   :5月10日


Dim adoCON As ADODB.Connection
Dim adoRS As ADODB.Recordset


Set adoCON = Application.CurrentProject.Connection

Set adoRS = adoCON.Execute("SELECT 社員名テーブル.社員名, ステータステ
ーブル.ステータスフラグ, 社員名テーブル.削除フラグ, Max(日付テーブル.
日付) AS 日付の最大, ステータステーブル.ステータス名 FROM (ステータス
テーブル INNER JOIN 日付テーブル ON ステータステーブル.ステータスID =
日付テーブル.ステータスID) INNER JOIN 社員名テーブル ON 日付テーブル.
社員ID = 社員名テーブル.社員ID GROUP BY 社員名テーブル.社員名, ステー
タステーブル.ステータスフラグ, 社員名テーブル.削除フラグ, ステータステ
ーブル.ステータス名 HAVING (((ステータステーブル.ステータスフラグ)=Yes
) AND ((社員名テーブル.削除フラグ)=No));")


  Do Until adoRS.EOF = True
 
    MsgBox (adoRS!日付の最大)

    adoRS.MoveNext
  Loop


adoRS.Close
adoCON.Close

Set adoRS = Nothing
Set adoCON = Nothing


End Sub
・ツリー全体表示

【9537】Re:他のプロシジャーの呼び出し
回答  hatena  - 07/6/9(土) 7:36 -

引用なし
パスワード
   >1つのレポートを2種類のフォームから印刷条件を入力して印刷する処理を作っていますが、レポートの表題(ページヘッダー)にそれぞれのフォームで入力した印刷条件を印字するためにフォームからレポートに印刷条件を引数として受け渡ししたいとのですがFUNCTIONプロシジャーのような引数を宣言する方法をお教え下さい。
>よく分からないのですが、フォーム、レポートともクラスモジュールで作成しています。

印刷条件 とは、抽出条件のことですか。

OpenReport の WhereCondition でレポートに抽出条件を設定できます。

DoCmd.OpenReport "レポート名", acViewPreview , , "フィールド1='A'"

設定された抽出条件は、レポートのFilterプロパティを調べれば分かりますので、
テキストボックスのコントロールソースを

=[Filter]

とすれば表示されます。
・ツリー全体表示

【9536】Re:他のプロシジャーの呼び出し
回答  Gin_II  - 07/6/8(金) 22:59 -

引用なし
パスワード
   > OFFICE2000を使用していますので OpenArgsは無いようです。
> 個別にフォームを作成します。

> フォームで入力した印刷条件を印字するために

フォームを開いているのなら、レポート側でフォームを参照すればだけのような
気がしますけどね。

IsLoaded プロパティ
SysCmd

なんかで、フォームが読み込まれているかどうかを確認することができます。

開かれていれば、

Forms!フォーム名!コントロール名
で参照することができます。
・ツリー全体表示

【9535】フォームに自動的に採番をしたいのですが
質問  大河原  - 07/6/8(金) 19:31 -

引用なし
パスワード
   お世話になります。
初めて投稿しますが、よろしくお願いします。
Xp,Access2003を使用しております。

クエリからフォームにデータを渡して表示する
処理なんですが、
フォーム上の連番という領域に1〜から連番を
割り付けたいのですが、SQL文が分かりません。
過去ログを参照しましたが、私には該当するもの
がないように思われました。

下記のクエリに連番(seqno)をセットしたいのですが。

SELECT *
FROM tacifimport
ORDER BY tacifimport.kaisyameikana;

初歩的で申し訳ありませんがよろしくお願いします。
・ツリー全体表示

【9534】Re:条件一致方法
お礼  長谷 E-MAIL  - 07/6/8(金) 14:18 -

引用なし
パスワード
   小僧さん、Ginさん有難う御座いました。
具体的例をまとめて、別な形で質問し直します。
二方が言われる様に、抽象的過ぎて理解していただけなかった事を反省しております。
・ツリー全体表示

【9533】Re:他のプロシジャーの呼び出し
お礼    - 07/6/8(金) 13:17 -

引用なし
パスワード
   ▼Gin_II さん:
>その他の値:OpenArgs 引数
>
>OpenArgs 引数は、バージョンによってないかもしれません。

お返事、有難うございます。
 OFFICE2000を使用していますので OpenArgsは無いようです。
 個別にフォームを作成します。
 有難うございました。
・ツリー全体表示

【9532】Re:他のプロシジャーの呼び出し
回答  Gin_II  - 07/6/8(金) 11:11 -

引用なし
パスワード
   > 印刷条件を印字するためにフォームからレポートに印刷条件を引数として受け渡ししたいとのですが

OpenReport メソッドの引数で対応できると思います。

印刷条件:WhereCondition 引数
その他の値:OpenArgs 引数

OpenArgs 引数は、バージョンによってないかもしれません。
・ツリー全体表示

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