「夫を成功」へ導く妻の秘訣 座談会

 こんばんは。また質問させてもらいます・・。
これがアクセスに関して、最後の質問になるようにしたいです!!

 さて、フォームに入力したものは自動的にテーブルに保存されます。
しかし、フォーム上で計算したものは、テーブルに反映されていませんでした。
過去の質問にフォーム上計算したものは、テーブルに反映されないということがわかりました。
では、一体どうすればいいのでしょうか。

 フォームのコントロールソースには
=([QTY]*[COST]) 数量*値段を入れています。

どうすれば、テーブルに表示できるでしょうか。
ご教授お願いいたします。

過去の質問は、こちらを参考しました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1002073

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

A 回答 (6件)

クエリーを覚えると便利です。


テーブル=オペレーターが入力したりする項目
クエリー=テーブルのデータプラスそれから計算出来るさまざまな項目

例えばQTYとCOSTはテーブルに
合計は 合計:[QTY]*[COST}
というようにクエリーに追加すれば、テーブルに
合計という項目を持つ必要がありません。
テーブルの「合計」を削除しても差支えありません。

また入力日という項目をテーブルに持ち
後の整理の目的でクエリーには
年:Year([入力日])
月:Month([入力日])
などとする事も可能です。

これで何年何月のデータだけを抽出したい場合でも
クエリーの抽出条件に 2004 とか 8(月)とかを
入力するだけでOKです。

合計、平均、最大、最小なども....

データベースはクエリーにあるレコードをいちいち保存するのではなく、計算式だけを覚えていて、開くたびに
計算して表示してくれるだけなのです。
    • good
    • 2
この回答へのお礼

お返事が遅くなって申し訳ありませんでした。
丁寧な回答ありがとうございました。
無事、出来ました!

お礼日時:2004/12/15 04:22

>Me![AMOUNT]=Me![AMOUNT]


フォームのフィールド名を変更してください。テーブルのフィールド名と同じだとエラーになります。
フォームのフィールド名を例えばAMOUNT1にしてAMOUNT1のソースに=([QTY]*[COST]) を記述し

Me![AMOUNT]=Me![AMOUNT1]
で保存できます。

>金額とは?
例えば演算させるフィールド名が金額の場合
    • good
    • 0
この回答へのお礼

お返事遅くなり申し訳ありませんでした。
なんとか、出来上がりました。
不具合が出ないよう、願うだけです。
ありがとうございました。

お礼日時:2004/12/15 04:21

どうしてもテーブルに反映したいのであれば


フォームの閉じるボタンやレコードの保存ボタンに記述を追加すれば出来ます。

Me![テーブルのフィールド名] = Me![フォームのフィールド名]
をイベントプロシジャに追加します。ボタンをクリックされたときにそのイベントと一緒にフィールドの値がテーブルに反映されます。

またはフォームのフィールドの変更時のイベントに
Private Sub 金額_Change()
テーブルのフィールド名 = ([QTY]*[COST])
End Sub
フォームのフィールドのコントロールソースはテーブルのフィールドにしてください。
これでも出来るはずです。

この回答への補足

アドバイスありがとうございました。
1つ目の
Me![テーブルのフィールド名] = Me![フォームのフィールド名]
をやってみましたが、エラーになりました。
Me![AMOUNT]=Me![AMOUNT]
にしてみましたが、無理でした。

2つ目のPrivate Sub 金額_Change()についてですが
金額ってなんでしょう?
これは、金額じゃなくても何でも良いんでしょうか?
それとも決まっているのでしょうか?
私のアクセスは、英語版なので、日本語は読み込めないと思いますので、気になりました。
回答よろしくお願いします。

補足日時:2004/12/10 07:50
    • good
    • 0

既に解説があるように、アクセスの場合はテーブルは出来るだけ節約して、他のフィールドの値を利用した


計算結果はクエリーに設定するようにする方が
ファイルサイズの節約にもなり便利です。

クエリーの作り方
クエリー→新規作成→指定のテーブルを選択→
全部選択のボタンを押す→クエリーの名前を決める

クエリーのデザインを開く
列を追加(あるいは空白の列に
フィールド名:([QTY]*[COST]) 数量*値段
としてヴューを見てください。これで新しくフィールド名が表示されると思います。

ここまでの作業で不具合があれば連絡してください。

この回答への補足

丁寧な解説ありがとうございました。
言われたとおりすれば、出来ました!

しかし、私が言い忘れていたことがあります。
「=([QTY]*[COST]) 」これを、「合計」というフィールドに表示したいのです。
でも、新しいフィールドが出来てしまって、そちらに保存となってしまいます。
私が望んでいることは無理でしょうか?


>計算結果はクエリーに設定するようにする方が
ファイルサイズの節約にもなり便利です。

なるほど。ちっとも知りませんでした。
先ほど、一通り注文票に入力してみたところ、クエリにも情報が保存されていました。
全ての情報も、テーブルよりクエリで保存した方が、いいのでしょうか。

もう少しだけお願いします。

補足日時:2004/12/10 06:08
    • good
    • 0

テーブルにデータがあるかのように使いたいのであれば、クエリを作成して、数量×値段のフィールドを追加すれば問題ありません。

この回答への補足

回答ありがとうございました。
やってみたところ、できましたが、同じ名前のフィールドに保存したいのです。

フォーム:合計(数量×値段の答えが表在される所)
テーブル:合計
テーブルの合計に保存したいのですが、できませんでした。

補足日時:2004/12/10 08:01
    • good
    • 0

> フォーム上で計算したものは、テーブルに反映されていませんでした。



> そもそも、テーブルに持たせる必要がないです。
のとおりなんですが (^^ゞ
何か、テーブルに持たせたい理由があるのでしょうか?

この回答への補足

こんにちは。
いつもありがとうございます。

>何か、テーブルに持たせたい理由があるのでしょうか?
最終的には、アクセスからエクセルへ情報を飛ばし、エクセルで情報を管理したいようです。
そのときに、コマンドボタンでエクセルにインポートのボタンを作りましたが、合計金額は、エクセルに反映されていませんでした。
よって、せめてテーブルにはすべての情報を保存したいと思ったからです。

無駄でしょうか・・・?

補足日時:2004/12/10 05:58
    • good
    • 0

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

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

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

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

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

QAccess フォーム上で計算する方法とそれをテーブルに反映させる方法を教えてください。

こんばんは。色々試したのですが、わかりませんでしたので質問します。
Accessのフォーム上で計算する方法とそれをテーブルに反映させる方法を教えてください。

サブフォーム入りのサブフォームの中の、「売上」と「原価」を入力すると自動的に「原価率」が表示させ、その「原価率」をテーブルに反映させたいのですが、どうしたらよいのでしょうか。

途中まで考えたのは、選択クエリ上で計算させて、それをフォームにしたら表示のみは出来たのですが、テーブルに反映させる方法までたどりつきませんでした。
どうぞ宜しくお願い致します。

Aベストアンサー

> プロパティ-更新後処理のところに
> Me![原価率]= Me![原価]/Me![売上げ] と式を入れました。

更新後処理の横に…となっているところがあるのでそこをクリックして
コードビルダを選択すると(原価の場合)
Private Sub 原価_AfterUpdate()

End Sub
と表示されるので
Private Sub 原価_AfterUpdate()
    Me![原価率]= Me![原価]/Me![売上げ]
End Sub
となるようにしてください。
各コントロールが存在するものとして考えてます。

Qフォームの計算がテーブルに反映するには?

Windows2000/ACCESS2000を使用してます。
フォームで自動的に合計や消費税が計算されるように設定しましたが、保存されたテーブルを見てみると合計や消費税は空白になっていて計算された値が入力されてませんでした。
フォームでの計算式は以下のように設定しました。
合計のフィールドを選んで、プロパティを開きその中のデータタブのコントロールソースに式ビルダーで、 =A+B と設定しました。フォーム上では計算されるの
ですが・・・
どのようにしたらテーブルに計算された値が表示されるのでしょうか?
宜しくお願いします。

Aベストアンサー

no.1のものです。

No.3のお礼に対しての回答です。

フォームの計算させている名前は別のものにして下さい。
そして、フォームで計算させているところと、テーブルの方で
入力させたいところの書式は同じものにしてください。


実際にやってみた結果です。

テーブル:テーブル1
a[数値]
b[数値]
kotae[数値]

フォーム:テーブル1
a
b
kotae2[数値]
(計算式は  =[a]+[b])

フォーム上につくったボタンのコード

Private Sub コマンド6_Click()

Me![kotae] = Me![kotae2]

End Sub


です。

試してみてください。

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...続きを読む

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

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"...続きを読む

QAccessで計算式を挿入

テーブルで、A・B・Cのフィールドがあります。
C=A/(B/100)^2
という式があります。

この場合、更新クエリを使ってCのフィールドに値を入れるしかないのでしょうか。

もともとあるテーブルを元にフォームを作成しました。
このフォームを使って、AとBを入力すれば自動的にCに値が入る、という事をイメージしていたのですが行き詰っています。
式ビルダは使用してみたのですが、データが反映されません。
元のテーブルCフィールドには式はなく、ただ数値があるだけです…。

どんな作業が足りないのでしょうか。
もしくは別な方法がよいのでしょうか。
よろしくお願いします。

Aベストアンサー

クエリで新フィールドに計算式を入れて、C=A/(B/100)^2のフィールドを作ります
その後「クエリのテーブル化」をすれば何のことはないのでは。
ただクエリで済むものをテーブル化は普通はしません。
やり方は、クエリのデザインの画面で、メニュのクエリーテーブルの作成-テーブル名を指定-OKー実行ー確認に答える、でよいのでは。

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

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

Aベストアンサー

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

QAccessでテーブルの値をテキストボックスに代入するには?

[ID][文字列]の2つのフィールドからなる単純なテーブルがあり、削除クエリを併用して常に最新のデータしか格納されていない状態に工夫できました。(データは常に1つ)
そこでフォーム上にあるテキストボックスにこのテーブルの[文字列]フィールドのデータを表示させたいのですが、
どうしたらよいでしょうか?

また、このテーブルの[文字列]フィールドのデータを直接変数として使いたい場合はVBAでどのように記述すればよいのでしょうか?

Aベストアンサー

テーブルに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名")」
IDごとに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名","[ID]='" & Me.ID & "'")」

Dlookup関数のヘルプ
http://office.microsoft.com/ja-jp/assistance/HP010496551041.aspx

QAccess フォーム上でのテキストボックスとテーブルの連結

フォームヴィザードからフォームを作成すると、
テキストボックスと指定したテーブルを連結させることができるのですが、デザインビューでそれをするときに、テキストボックスのプロパティのコントロールソースにテーブル名を入れれば連結できるのかと思いきや、うまく表示されません。どこを設定すればテキストボックスとテーブルを連結できるのでしょうか?

Aベストアンサー

#2です。
デザインビューの空欄スペース(グレー1色のところ、升目なし)で右クリックをするとプロパティが出てきます。また、フォームウィザードの途中で、そのフォームと連結するテーブルかクエリを選択する画面が出てきます。


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

人気Q&Aランキング