会員登録で5000円分が当たります

これまでに何度となく同じような質問を出している者です。すみません・・・。以前は下記の【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[国名]=[国名]』といった感じでやりたいのです。
すみませんが、教えていただけるとありがたいです。

このQ&Aに関連する最新のQ&A

A 回答 (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 "」でつないでいます。
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/08/18 22:58

普通下記でやると思う。

アクセスのクエリの基本だけで出来る。
ーー
操作主義で説明する。実際のアクセスでやってみてください。
例データ
国別計数テーブル
IDコード国名計数
1111日本10
2111日本20
3111中国25
4111中国15
5121アメリカ22
6121アメリカ25
7123日本20
8123日本15
9123中国30
ーー
クエリのデザイングリッドで
国別計数クエリ
コード   国名    計数
国別計数  国別計数  国別計数
グループ化 グループか 合計

表示    表示    表示  
ーーー
クエリー実行で
実行結果
コード国名計数の合計
111中国40
111日本30
121アメリカ47
123中国30
123日本35
ーーーー
これと元の国別テーブルを左結合で結合する
クエリー新規作成ー選択クエリ
テーブル/クエリ 国別計数 
フィールドは全選択
完了
デザイン
テーブルの表示ー国別計数クエリをダブルクリック
  左      右
(国別係数)ーー(国別計数クエリ)の結合線を下記のように引く
コードー     コード
国名 ー     国名
(国別計数クエリ)の「計数の合計」を新しいフィールド列へD&D
するとデザインは
コード  国名   計数    計数の合計
国別計数 国別計数 国別計数  国別計数クエリ
全て表示
ーー
クエリー実行で
結果
コード国名計数計数の合計
111日本1030
111日本2030
111中国2540
111中国1540
121アメリカ2247
121アメリカ2547
123日本2035
123日本1535
123中国3030
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/18 23:00

先日のこちらの質問の回答者です:


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つ目のクエリを開くと、ご要望の結果が得られると思います。
「アクセスのDsum関数の使い方」の回答画像3

この回答への補足

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

補足日時:2009/08/16 14:30
    • good
    • 0

A1合計:Dsum("[A1]","[シート名]","[cade]='" & [cade] & "' AND [国名]='" & [国名] & "'")



でしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/18 23:05

他にも方法はあると思います(以下クエリの一例)



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
になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/18 23:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessクエリで分類ごとの累計を計算する方法

テーブルのデータをクエリに読み込んで、大分類ID-小分類IDの組合せを元にして、
月々の累計を計算したいのですが、算出式がどうしてもわかりません。
DSUMを使えばいいかなと思い、クエリのフィールドに、
累計:DSUM("金額","tbl_sample",    )
のような感じでやってみたのですが、条件式をどういれてよいかわかりません。
もし分かる方がいらっしゃればお知恵をお貸しください。よろしくお願いします。

イメージ的には以下のような感じで、★箇所のような累計結果を算出したいです。

------------------------------------------------------------
元のテーブルファイル名:tbl_sample

月 大分類ID 小分類ID 金額 ★累計
4___1___1___\100_\100
4___1___2___\200_\200
4___2___1___\300_\300
4___2___2___\400_\400
5___1___1___\150_\250
5___1___2___\250_\450
5___2___1___\350_\650
5___2___2___\450_\850
--------------------------------------------------------------

テーブルのデータをクエリに読み込んで、大分類ID-小分類IDの組合せを元にして、
月々の累計を計算したいのですが、算出式がどうしてもわかりません。
DSUMを使えばいいかなと思い、クエリのフィールドに、
累計:DSUM("金額","tbl_sample",    )
のような感じでやってみたのですが、条件式をどういれてよいかわかりません。
もし分かる方がいらっしゃればお知恵をお貸しください。よろしくお願いします。

イメージ的には以下のような感じで、★箇所のような累計結果を算出したいです。

-------------------...続きを読む

Aベストアンサー

累計:dsum("金額","tbl_sample","大分類ID=" & 大分類ID & " And 小分類ID=" & 小分類ID & " And 月<=" & 月)
だとどうでしょう。
ここを読んでもらった方が早くて確実。
http://www.moug.net/tech/acvba/0080017.html

Q【アクセス】複数の条件のDSumを記述したい

番号 = "001"
種類 = "支払"

合計支払金額 = DSum("teble1!金額", "teble1", "teble1!番号 = '" & 番号 & "'", "teble1!種類 = '" & 種類 & "'")

というイメージで
teble1の番号が「001」、
なおかつ種類が「支払」の合計金額を取得したいのですが
「引数の数が一致しません」となってしまいます。

合計支払金額 = DSum("teble1!金額", "teble1", "teble1!番号 = '" & 番号 & "'")
ならいけます。

原因は「, "teble1!番号 = '" & 番号 & "'", "teble1!種類 = '" & 種類 & "'"」
の部分だと思うのですが何がダメなのでしょうか?

ご教授よろしくお願いします。

Aベストアンサー

条件は1つの文字列で指定するので、

"teble1!番号 = '" & 番号 & "'", "teble1!種類 = '" & 種類 & "'"

"teble1!番号 = '" & 番号 & "' AND teble1!種類 = '" & 種類 & "'"

QSum関数の使いかたについて(ACCESS)

レポート上に商品A、商品B、商品Cというテキストボックスがあってそれぞれのプロパティのコントロールボックスには以下の設定がしてあります。
=DSum("[商品A]","[抽出クエリ]")
=DSum("[商品B]","[抽出クエリ]")
=DSum("[商品C]","[抽出クエリ]")
商品A~Cそれぞれの合計値は正常に表示されるのですが、商品A~Cの合計値を別に設けたテキストボックス(総計)に表示させたいのですが、何も表示されません。
総計のコントロールボックスには以下の記述をしました。
=Sum([商品A]+[商品B]+[商品C])
Web検索で関数の使い方等を調べましたが、原因が分かりません。
どなたか、サポートをお願いいたします。

Aベストアンサー

原因はNullでしたか~

値がNullの時値を変換する関数として
Nz()というのがありますので
DSumの関数自体をNz(DSum("[商品A]","抽出クエリ"),0)とすれば
Nullの場合でも ゼロ が返されるので 今度はうまく行くと思いますよ。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QDSumの計算式の入れ方

アクセスでDSumの式の入れ方が分からないので教えてください。
振込み日07年10月21日以前の振込み金額をすべて集計させたいのですが式の組み方が良く分からないので教えてください。
項目名は『振込み日』で集計する項目名は『金額』で07/10/21以前のものをすべて集計の場合の式を教えてください。
=DSum([振込み日],[金額],07/10/21) ???
となるのでしょうか?

Aベストアンサー

#3です。
> 金額出てきました。
であれば、条件式がおかしいか、テーブルのデータがおかしいのでしょう。
テーブルの「振込み日」のフィールドをチェックすべきでしょう。
1.フィールド名が「振込み日」であるか確認。
2.フィールドのタイプをチェック。「日付時刻型」か「文字型」か。
3.「振込み日」フィールドに妙なデータ(日付)が入っていないか確認する。

DSum関数は、外部(そのフォームやレポート関連づけられていない)のテーブルやクエリのデータを集計できる関数です。
書式は、DSum("集計するフィールド名","テーブル/クエリ名","抽出条件")で、
全て文字列で指定します。
今回は、抽出条件がうまく設定されていないようです。
検索する相手のフィールドが文字型である場合は、
DSum("金額","手形","品名='みかん'")
のように、検索する文字列を「'」(シングルコーテーション)でくくらなくてはいけません。
もし、相手が日付型で、かつフォームのテキストボックスに入力した内容を使って絞り込む場合は、
=DSum("金額","振込","振込み日 <= " & CDate(Me.日付)
とか
=DSum("金額","手形",BuildCriteria("振込み日", adDate, "<=" & Me.日付))
のようにします。
BuildCriteriaは、抽出条件を正しい形で文字列化してくれる関数(メソッド)です。

> ("金額,"手形")-("貸し方","手形")…なんて感じの式なんてできますか?
できます。
関数で計算された数値は、通常の数値と何ら変わりはないので、
DSum ("金額,"手形")-DSum("貸し方","手形")
などと計算させることができます。当然、それぞれ条件も指定できます。
DSum ("借り方,"手形","日付 Between 2007/10/1 And 2007/10/31")-DSum("貸し方","手形","日付 Between 2007/10/1 And 2007/10/31")
などとすることも可能です。
日付の場合、#2007/10/31#と「#」でくくる必要があるかも...

#3です。
> 金額出てきました。
であれば、条件式がおかしいか、テーブルのデータがおかしいのでしょう。
テーブルの「振込み日」のフィールドをチェックすべきでしょう。
1.フィールド名が「振込み日」であるか確認。
2.フィールドのタイプをチェック。「日付時刻型」か「文字型」か。
3.「振込み日」フィールドに妙なデータ(日付)が入っていないか確認する。

DSum関数は、外部(そのフォームやレポート関連づけられていない)のテーブルやクエリのデータを集計できる関数です。
書式は、DSum("集計...続きを読む

QACCESS DCOUNTの抽出条件について

式1: DCount("コード","テーブル","コード=" & [テーブル]![コード])

結果の2以上のものを抽出したいのですが、どのように記述するのでしょうか?

>1または>=2またはnot 1でもいいですが・・・
記述方法が良く分かりません。

Aベストアンサー

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも上記エラーが出ているようでしたら、
 元となるテーブルとクエリの情報(フィールド名とデータ型)をお知らせ下さい)
※なお、コードは数値型と想定しています。もしも文字列方の場合は、併せて
 式を「"コード='" & [テーブル]![コード] & "'"」と変更する必要があります。

上記のエラーを回避するには、DCountの第1引数を「*」にします。
また、コードがNullのレコードで、クエリの表示結果が「#エラー」となるのを
回避するためには、第3引数にNz関数を使用します。
(コードの最小値は0か1でしょうから、「最小値-1」(=-1か0)にするのがよいかと
 思います)

【Nullは重複数に含めない場合】
DCount("*","テーブル","コード=" & Nz([テーブル]![コード],-1))
※コードがNullの場合は、第3引数の結果がTrueにならない(Null=-1)ので
 0件扱いとなるため、抽出条件の「>1」で弾かれます。
 また、第3引数にNz関数を使用する代わりに、クエリの『コード』の抽出条件に
 「Is Not Null」を指定する(→最初から集計の対象外にする)方法もあります。

【Nullも1つのコードとして重複扱いする場合】
DCount("*","テーブル","Nz(コード,-1)=" & Nz([テーブル]![コード],-1))

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング