• ベストアンサー

アクセスのDsum関数の使い方

これまでに何度となく同じような質問を出している者です。すみません・・・。以前は下記の【newcode】を【code】と【国名】から作成する方法を質問しその問題は解消しました。 【code】  【国名】    【newcode】  111    日本     111_日本  111    日本     111_日本  111    中国     111_中国  111    中国     111_中国  121    アメリカ   121_アメリカ  121    アメリカ   121_アメリカ  123    日本     123_日本  123    日本     123_日本  123    中国     123_中国 しかし、この表にはまだもう一つの作業が残っているのです。それは、下記のように 【code】  【国名】   【A1】 【A1合計】  111    日本     10    30  111    日本     20    30  111    中国     25    40  111    中国     15    40  121    アメリカ   22    37  121    アメリカ   25    37  123    日本     20    35  123    日本     15    35  123    中国     30    30 【A1】が追加されているのです。 そして、【A1合計】として【code】と【国名】が同じものを『DSum関数』を使用してレコードの合計値を出すにはどうしたらいいでしょうか? 以前は、上にあった【newcode】を使い、『DSum("[A1]","[シート名]","[newcode]='" & [newcode] & "'")』といった演算でやっていたんですが・・・。条件を『[code]=[code]and[国名]=[国名]』といった感じでやりたいのです。 すみませんが、教えていただけるとありがたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.5

No.3、DexMachinaです。 > 質問に書いたとおり前には、条件式を増やすやり方ではムリでしょうか? えーと・・・その方法でしたら、「code」と「cade」の打ち間違い(「o」が「a」に なっている)がありますが(汗)、No.2でn-junさんが既に答えられています。 なお、質問文を見返していて気になった点があったので、念のためですが、 「And」の前後には必ず半角スペースが入りますので、手入力する際は ご注意下さい。 それと、もしも現状では「'」の置き方がわかりにくいようでしたら、以下の 書き方でも同じ意味になりますので、参考まで。 (かえってわかりにくかったら、すみません(汗)) 【「"'" & [code] & "'"」でひとセット、という形】  DSum("[A1]","シート名","[code]=" & "'" & [code] & "'" & " And [国名]=" & "'" & [国名] & "'") 【さらに、「And」も分離した形】  DSum("[A1]","シート名","[code]=" & "'" & [code] & "'" & " And " & "[国名]=" & "'" & [国名] & "'") ※「[code]=」と「"'" & [code] & "'"」が1条件目の指定、   「[国名]=」と「"'" & [国名] & "'"」が2条件目の指定で、   それを「" And "」でつないでいます。

rie78
質問者

お礼

いつも、いつも細かい回答をありがとうございます。 頑張ってやってみますね!

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

普通下記でやると思う。アクセスのクエリの基本だけで出来る。 ーー 操作主義で説明する。実際のアクセスでやってみてください。 例データ 国別計数テーブル ID コード 国名 計数 1 111 日本 10 2 111 日本 20 3 111 中国 25 4 111 中国 15 5 121 アメリカ 22 6 121 アメリカ 25 7 123 日本 20 8 123 日本 15 9 123 中国 30 ーー クエリのデザイングリッドで 国別計数クエリ コード   国名    計数 国別計数  国別計数  国別計数 グループ化 グループか 合計 表示    表示    表示   ーーー クエリー実行で 実行結果 コード 国名 計数の合計 111 中国 40 111 日本 30 121 アメリカ 47 123 中国 30 123 日本 35 ーーーー これと元の国別テーブルを左結合で結合する クエリー新規作成ー選択クエリ テーブル/クエリ 国別計数  フィールドは全選択 完了 デザイン テーブルの表示ー国別計数クエリをダブルクリック   左      右 (国別係数)ーー(国別計数クエリ)の結合線を下記のように引く コードー     コード 国名 ー     国名 (国別計数クエリ)の「計数の合計」を新しいフィールド列へD&D するとデザインは コード  国名   計数    計数の合計 国別計数 国別計数 国別計数  国別計数クエリ 全て表示 ーー クエリー実行で 結果 コード 国名 計数 計数の合計 111 日本 10 30 111 日本 20 30 111 中国 25 40 111 中国 15 40 121 アメリカ 22 47 121 アメリカ 25 47 123 日本 20 35 123 日本 15 35 123 中国 30 30

rie78
質問者

お礼

アドバイスありがとうございました。 色々とやってみたいと思います。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

先日のこちらの質問の回答者です: http://oshiete1.goo.ne.jp/qa5168984.html そちらの回答時は、ユーザー関数を使用した「第2段階」が後に控えていたため、 「第1段階」ではそれに近い形となるDCountでの回答をしましたが、実際には クエリを使用した方が、(速度的に)よいかと思います。 既に回答は出ていますが、初心者が比較的とりかかりやいと思われる、「クエリの デザインビューで対応可能な方法」を、以下にご紹介します。 (但し、クエリは2つ作ることになります) 【概要】  <1つ目のクエリ>   Codeと国名でグループ化し、A1の合計を出す  <2つ目のクエリ>   上記クエリと元のテーブルを、Codeと国名で結合させ、各Codeと国名ごとでの   A1の合計を同時に表示させる <1つ目のクエリの作成> 1)Accessのメニューで「挿入(I)→クエリ(Q)」を選択するなどして、『新しいクエリ』  ダイアログを開く 2)「デザインビュー」を選択し、Okをクリック 3)『テーブルの表示』ダイアログで、対象テーブルをダブルクリックするなどして追加 4)『Σ』(集計)ボタンをクリックして、『集計』行を表示させる 5)フィールドに『Code』『国名』『A1』を追加し、『集計』行を以下の通り設定:  Code:グループ化  国名:グループ化  A1:合計 6)クエリを保存して閉じる(名前を、仮に「Q1_合計」とします)  (この状態だとA1は「A1の合計」と表示されるので、「A1合計」に変更する場合は   再度デザインビューを開いて、「の」を削除してください) <2つ目のクエリの作成> 1)上記「1~2」を実行後、今度は『テーブルの表示』ダイアログで、対象テーブルと  『Q1_合計』クエリの2つを追加  (上記ダイアログで、『クエリ』タブを選択すると、クエリが表示されます) 2)対象テーブル側の『Code』を、『Q1_合計』クエリの『Code』の上にドラッグ&ドロップ  →それぞれの「Code」が線で結合されます 3)「国名」についても同様にして結合 4)対象テーブルから、『Code』『国名』『A1』を『フィールド』に追加 5)『Q1_合計』クエリから、『A1合計』を追加  →添付画像のような形になります 6)クエリを保存して閉じる ・・・以上です。 これで、2つ目のクエリを開くと、ご要望の結果が得られると思います。

rie78
質問者

補足

DexMachinaさん、いつもありがとうございます。 今回の質問にも答えていただきありがとうございました。一応、教えていただいたとおりやってできたのはできたんですが、どうにかクエリ一つで、できないものでしょうか? 質問に書いたとおり前には、条件式を増やすやり方ではムリでしょうか?ほんとうにすみません。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

A1合計:Dsum("[A1]","[シート名]","[cade]='" & [cade] & "' AND [国名]='" & [国名] & "'") でしょうか?

rie78
質問者

お礼

アドバイスありがとうございます。色々とやってみます。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

他にも方法はあると思います(以下クエリの一例) SELECT T1.code, T1.国名, T1.A1, T2.A1合計 FROM テーブル名 AS T1 INNER JOIN (SELECT code, 国名, Sum(A1) AS A1合計 FROM テーブル名 GROUP BY code, 国名) AS T2 ON T1.code = T2.code AND T1.国名 = T2.国名; ※但し、提示されたものを上記クエリで試してみると  121    アメリカ   22    37  121    アメリカ   25    37 は、  121    アメリカ   22    47  121    アメリカ   25    47 になります。

rie78
質問者

お礼

アドバイスありがとうございました。 数値が間違ってましたね・・・。 色々とやってみます。