• ベストアンサー

Accessで計算式を挿入

テーブルで、A・B・Cのフィールドがあります。 C=A/(B/100)^2 という式があります。 この場合、更新クエリを使ってCのフィールドに値を入れるしかないのでしょうか。 もともとあるテーブルを元にフォームを作成しました。 このフォームを使って、AとBを入力すれば自動的にCに値が入る、という事をイメージしていたのですが行き詰っています。 式ビルダは使用してみたのですが、データが反映されません。 元のテーブルCフィールドには式はなく、ただ数値があるだけです…。 どんな作業が足りないのでしょうか。 もしくは別な方法がよいのでしょうか。 よろしくお願いします。

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

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

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

white_lily01
質問者

お礼

回答ありがとうございました。 こんな機能があったとは…。シンプルにできるのですね。 とても参考になりました!! 助かりました。

その他の回答 (4)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

通常は演算結果をテーブルに保存する必要は他の方がいうように必要ありません。しかしテーブルに保存したいというのであれば >フォームを使って、AとBを入力すれば自動的にCに値が入る 簡単にやるには そのフォームの演算結果が表示されるテキストボックスをCではなくべつの名前にします。例えばC1 C1に演算する式をいれます。AとBに入力するとC1に演算結果が表示されるようにしておきます。 フォームにレコードの保存ボタンを作り下記を追加します。 Me![C] = Me![C1] これでテーブルのCというフィールドにC1の値を保存できます。 保存ボタン(例Cmd1)を作ると下記のイベントが書かれます。そのイベントに1行追加でOKです。 Private Sub Cmd1_Click() On Error GoTo Err_Cmd1_Click   Me![C] = Me![C1] 'この部分を追加 DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Exit_Cmd1_Click: Exit Sub Err_Cmd1_Click: MsgBox Err.Description Resume Exit_Cmd1_Click End Sub これで保存できます。フォーム上のTextBoxをCではなくC1にするのはMe![C] = Me![C]ではエラーが出てしまうので別の名前C1にしておきC1をCに保存させるようにしてエラーを回避するためです。 フォームを閉じるボタンを作っても同様に記述すれば出来ます。

white_lily01
質問者

お礼

回答ありがとうございました。 フォームに入力した数値をテーブルに保存することができました。 とても参考になりました!先に進めそうです。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.3

基本的には、計算で求めることができるものは、テーブルに持つ必要がありません。 必要なときに、クエリ等で計算させればいいので。 どうしても、お望みのことを実現したいのなら、マクロなりVBAなりを 使う必要があります。 マクロなら、値の代入アクション。 VBAなら代入式を使ってください。

white_lily01
質問者

お礼

回答ありがとうございました。 マクロやVBAが使えるといろいろ方法が出てきますね。 今はまだ理解できていないのですが、少しずつ勉強していこうと思います。

  • TAK_999
  • ベストアンサー率43% (42/96)
回答No.2

テーブルはAとBのみとして、新規にクエリーを作成してはいかがですか? 新規作成するクエリーで、AとBはそのまま表示し、Cという項目名で、A/(B/100)^2の計算結果を表示させます。 こうすれば、既に作成済みのフォームでもデータテーブル名を変更するだけで済みます。 テーブルは値を格納する器ですから、動的に値が変化するような計算式の定義は無理ではないかと思います。

white_lily01
質問者

お礼

回答ありがとうございました。 クエリーでも作成してみました。 テーブルやクエリーの役割についてもまだまだ勉強不足です。 参考書片手にがんばろうと思います~。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

フォームで良いならフィールドA及びBの更新後イベントに C=A/(B/100)^2 を設定すれば変更できます。

white_lily01
質問者

お礼

回答ありがとうございます。 更新後イベントというと、イベントプロシージャを利用するのでしょうか。 用語すらよくわかっていない状況で申し訳ありません…。 ヘルプ読みながら進めてみます。

white_lily01
質問者

補足

プロパティのデータ、コントロールソースに式を入れたら、行いたい作業は進めることができました! まだまだ知識が足りないのでいろいろ調べてみます。 ありがとうございました。

関連するQ&A

  • ACCESSのフィールドの更新

    マイクロソフトACCESSフォームAでテーブルBのCフィールドの更新は出来るのですが、フォームDから連結でテーブルBのCフィールドの更新が出来ません。(同じようにして2個作成したシステムのうち1個は出来たのですが、もう1個がどうしても出来ません:テーブル,クエリ,フサブフォーム,フォームの違いを捜しているのですが見当たりません。)

  • Access2007 フォームでの計算結果をテーブルに反映させるには?

    ビスタでAccess2007を使っています あるテーブルにA~Dまでのフィールドが設定されています。 フォームでフィールドA.Bは手入力して C.Dには計算式を設定して計算結果を表示させていますがテーブルに反映されません。 (フォームにはきちんど式通りの答えが表示されますがテーブルのフィールドC.Dは空っぽです。) 例 A・・・10,000 B・・・0.1 C・・・1,000(計算式 A*B) D・・・9,000(計算式 A-C) フォーム上で行った計算結果をテーブルに入力反映させるにはどうすればよいでしょうか? テーブルやフォームの作り方が悪いのか? 計算式の設定が悪いのか? なぜテーブルに反映しないのか理由がわかりません。 そもそもフォーム上での計算はテーブルには反映しないのか? だとすれば反映させるにはどうすればよいのでしょうか? テーブルのフィールドに計算式を設定することは出来るのでしょうか? 出来るとすればその方法は? 疑問だらけでどうすれば求める結果が得られるのかさっぱり解りません。 当方Access2007は初心者も同然ですのでわかりやすく解説して戴ければ幸いです。 よろしくご教授ください。

  • アクセス テーブル、クエリーについて

     アクセスでソフト作成中です。そこで教えてほしいことがあります。 たとえば下記のように2つのテーブルがあります。 テーブル1   テーブル2   フィールドA    フィールドB  a1       10  b1       20  c1       30          テーブル1の数値は固定します。そこで下記のようなクエリーを作成したいのです。 クエリー1 フィールドA フィールドB a1 10 b1 20 c1 30 テーブル2に数字を入れていくと テーブル1   テーブル2   フィールドA    フィールドB  a1       10  b1       20  c1       30           40 クエリー1 フィールドA フィールドB a1 40 b1 20 c1 30 このように数字が上書きされていくようなクエリーは作成できないでしょうか。(あくまでテーブル1の数値は固定、フィールドAとフィールドBにリレーションシップは設定されていない。) よろしくおねがいします。

  • Accessのレポート上での計算

    現在4つのフィールドで=DCountを使ってリストの個数を返すクエリを組みました。 それをレポートで表示したのですが、この各フィールドの個数を合計したいんです。 テーブルB | A | B | C | D | ←このA~Dにはコンボボックスでタイプが入っています。 これから クエリ 式1:=DCount("*","テーブルB","[A]='タイプ1'") クエリを実行すると 1      式2:=DCount("*","テーブルB","[A]='タイプ2'")  クエリを実行すると 0      式3:=DCount("*","テーブルB","[A]='タイプ3'")  クエリを実行すると 1 が表示 といったようにクエリで選ばれている個数を算出しています。 このクエリを使ってレポートを作ったのですが、 レポートフッターに =Sum([式1]+[式2]+[式3]) という式を入れてレポートを表示すると 「101」と返ってきてしまいます(表示されている数字が順番にならんでる)。 目的としては「2」にしたいのですが、式が違うのでしょうか? 初心者バリバリの質問で申しわけありませんが、ご教授いただけますようお願いいたします。

  • Access内で計算

    Access2002を使用しています。 あるテーブルに「電話代」「宅急便代」「立て替え金計」という フィールドがあり、「立て替え金計」のフィールドには、自動的に 「電話代」「宅急便代」の合計が入るようにしたいです。 フォーム上でコントロールソースの式ビルドを使用すれば、合計は 表示されるのですが、テーブルには反映されません。テーブルに値を 反映させるにはどうすればよいでしょうか?

  • Access #エラーについて

    Access初心者です。 よろしくお願いいたします。 [前提]  テーブルA のIDに紐づけてクエリBの数値をクエリCで反映させたい。  〈詳細データ〉   ・テーブルA    [ID] [名称]       1   あ     2   い     3   う     4   え     5   お   ・クエリB    [ID] [数値]     2   10     3   20     5   40   ・クエリC    [ID]  [名称] [数値]     1    あ  #エラー     2    い   10     3    う    20     4    え  #エラー     5    お   40   ・”テーブルAの[ID]”の全レコードと”クエリBの[ID]”の同じ結合フィールドだけを含めてリレーションを行っている。    ・クエリCの算式: IIf(IsError([クエリB].[数値]),0,[クエリB].[数値])  [質問]    ・クエリCの『#エラー』部分を0にしたいのですが、何か良い方法はございませんでしょうか。   ・そもそも上記のロジックは無理がありますでしょうか。    アクセスはあまりいじったことがございません。ご回答いただけますと幸いです。   よろしくお願いいたします。

  • アクセス 数値型にするとフォームの入力ができない

    お世話になります。色々調べたり、実験してみたのですが、分からない点があります。 簡単でいいので、可能性のある原因を教えてください。 アクセス2003です。 ■パターン1  フォームC の入力ができる テーブルA(主キーがオートナンバー型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る ■パターン2  フォームC の入力ができない テーブルA(主キーが数値型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る 簡単にいうと、テーブルのデータ型によって、入力可否が変わるのです。 なぜ、パターン2は、入力できないのか分かりません。 よろしくお願いします。

  • Accessのエラー (いくつかあります・・・)

    アクセスでデータを入力したのですが、なぜか下記のエラーがでます… *作成したアクセスデータ* テーブル 項目AのCDと項目A、項目BのCDと項目B、項目CのCDと項目C、項目A~CのCDとその他繰り返し入力しないデータ の合計4つのテーブル それらすべてをリレーションでつないでます クエリ 全項目入りのテーブルを元に作ったもののみ フォーム クエリを元にウィザードを使って作成 *エラー* (1)クエリを作った時に、1つでもCDが入力されてないフィールドがあるとその行全体が表示されなくなる  (CDを入力したら表示されますし、テーブルではCDが入ってなくても全て表示されてます) (2)フォームで新たにデータを入力しようとしても一切入力できないし、変更もできない時がある (使用可能等の項目は一切触っていません) (3)フォームでCDが入ってる箇所を未入力にしたままでは保存できずに、「CDと値が一致しません」?のようなエラーメッセージがでる (すみません、エラーメッセージはうろ覚えです…) (4)なぜか昇順で番号を並べ替えていたのに、フォームでデータを追加したら、昇順が反映されずに「1,11,2…」のようにフォームのみ表示される (テーブル・クエリは反映されています) このエラーの原因がわかる方ぜひ教えてください!! よろしくお願いします。

  • アクセスでフォームのデータ(計算結果)がテーブルに反映されない

    アクセス初心者です、教えて下さい。 うまく説明できないのですが、エクセルで作成した売上表をアクセスで作り直そうと試みているのですが…。 簡単に説明すると、フィールドA,B,Cと3つあって、フォーム上でCはAとBの合計(C=[A]+[B])としました。フォーム上ではA,Bに値を入力するだけでCに結果が表示されるのですが、それがテーブルのCに反映されません。テーブルに計算結果を表示させるにはどうしたらいいのでしょうか?

  • Accessフォームから条件抽出する

    access2010で、フォーム内のリスト選択によって、 クエリのフィールドの計算を変えたいです。 「クエリ1」のフィールド名 いずれも数値 ・合計 ・A ・B ・C 「フィールド1」の「リスト1」で、1;2;3いずれか選択し、 選択した結果を「合計」に表示させたい。 ・リスト「1」のとき、Sum(A,B) ・リスト「2」のとき、Sum(A,B,C) ・リスト「3」のとき、Sum(A,B,C,D) できれば「合計」のフィールドの式のみで済ませたいのですが、 何か適切な式はありませんでしょうか。 よろしくお願いいたします。

専門家に質問してみよう