プロが教えるわが家の防犯対策術!

accessのクエリの式ビルダを使ってべき乗計算させたいのですが、その際、その都度切捨てをしたいのですが、難しいでしょうか。
具体的にいうと、
XにYをN-1乗させる場合、「X*Y^(N-1)」となりますが、
ここで、Yを1回かけるごとに小数点以下切捨てたいので
1回目はint(X*Y)とかけます。
その次からはint(int(X*Y)*Y)とかけますが、
なにぶんN-1をかけて求めたいため、
どのように式を組んでよいかわかりません。
よい方法があれば教えてください。
よろしくお願いします。

A 回答 (8件)

テーブルの情報が欲しかったんですけどね


テーブルは下のようなものと仮定します
「??T](取得価格、現価率、年数)

評価額=3000*(1-0.206/2)
は2691じゃなくて2607だよね

それでよければ下のようなユーザー関数を作り
クエリで
評価額:Hyoukagaku(取得価格,原価率,年数)
のように使います

Public Function Hyoukagaku(b, c, d)
Dim I As Integer, c2 As Single, b2 As Long
b2 = b

For I = 1 To d
If I = 1 Then
c2 = c / 2
Else
c2 = c
End If

b2 = Int(b2 * (1 - c2))
Next

Hyoukagaku = b2
End Function
    • good
    • 0

申し訳ありません。


コーディングを試してみましたがレコード処理が全く通りません
新しい意欲が出てきましたが、ご期待しないで下さい。

CHRONOS_0様 頼りになります。

CHRONOS_0様 ご無理をお願いすることになりました。宜しく
    • good
    • 0
この回答へのお礼

ありがとうございます。

No.6の回答を使い、クエリで試したところ、
うまくいきましたよ。

感謝です。

途中の難しいくだりは
よくわからなかったでが・・・。
勉強不足です。

お礼日時:2006/10/19 18:28

ANo.5のコマンドの追加です


UPDATE

これから先永くなりそうですが続けますか?
よろしければお付き合いします。

CHRONOS_0様 よろしければこれからもご指導下さい
    • good
    • 0

趣旨は固定資産の年度毎の減価償却費の計算ですね



次のような流れで如何でしょうか

減価償却テーブル追加
固定資産台帳と減価資産テーブルより、償却クエリーを設計

償却フォーム作成…償却年度と実行コマンドボタン

減価償却tblより該当年度のデータ削除
減価償却tblに償却金額0のデータを追加

減価償却クエリにカーソル宣言
カーソルを開く
データ1件読み込み
ループ開始
減価償却計算
次のレコード読み込み
ループ終了
カーソルを閉じる
カーソルを開放する

減価償却tbl…INDEX,固定資産コード,償却年度,償却金額
償却クエリー…上記に加えて取得日、取得金額、耐用年数、償却率

ここで用いるコマンド
DELETE,insert,
DECLARE,OPEN,FETCH,WHILE-BEGIN-END,FOR-NEXT,CLOSE,DEALLOCATE
    • good
    • 0

CHRONOS氏の仰る通り、サンプルテーブルがあれば答えやすいのですが


クエリーは関連付けされた複数のテーブルから、必要な項目を抽出
するもので、計算には関係ありません

CHRONOS様shinkamiです。補足等宜しくお願いします。

的外れかも知れませんが、勝手に設計して見ましょう
1.Access起動→空のデータベース→ok→べき乗計算→作成
2.デザインビューでテーブル作成
---フィールド名 データ型----
---索引 オートナンバー型
---基数 数値型→十進整数 小数点以下1桁
---べき乗 数値型→バイト型
---答え 数値型→十進整数 小数点以下1桁

3.フォーム作成 データベースウィンドの左にあるフォームをクリックから
… →ウィザードを使用してフォームを作成→>>→次へ
… →データシート形式→次へ→次へ→完了
4.テーブル1をクリックしてデザイン(データベースウィンドウのメニュー)
…フォームウィンドウのべき乗をクリックしてAccessのツールバーのプロパティーをクリック
… イベントタグのフォーカス喪失時の右端の…クリックでVBAに入る
5.コーディング
Private Sub べき乗_Exit(Cancel As Integer)
Dim I As Integer
答え = 基数
For I = 1 To べき乗 - 1
答え = 答え * 基数
Next I
End Sub

以上で設計からコーディングまで終了
フォームウィンドウからテーブル1を開いてデータを入力してみてください

前回の回答と少し違いますね


数値形式を10進整数型に10進にしたのは、2進数を2進数をベースにした整数型は
切捨ての桁で微妙な誤差が考えられるため
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
テーブルをということでしたが、
クエリにしている理由がありまして、
各項目はそれぞれ単純な変数でなく、
レコード管理のため、わざとテーブルを正規化しているため、
どうしようもないものです。
それでもテーブルのサンプルでなければ駄目でしょうか。
まだよく飲み込めていません。すみません

お礼日時:2006/10/18 21:48

VBAを作って欲しいのであれば


完全な仕様を提示する必要があります
>このa,b,cをクエリのフィールド複数を用いてやる場合、
これじゃ作りようがないですね

どのようなテーブルなのかを提示してください
サンプルがあればもっといいですね
    • good
    • 0
この回答へのお礼

ありがとうございます。
サンプルも提示してみます。説明不足ですみませんでした。

使用クエリフィールドリスト(それぞれ、固定された数でなく変数です)
[評価額]:a [取得価格]:b [減価率]:c [年数]:d

1年目
評価額a=int(取得価格b*(1-減価率c/2))
2年目以降 d年目まで
評価額a=int(前年の評価額a*(1-減価率c))

例)
1年目
評価額=3000*(1-0.206/2)
   =2,691
2年目=2,691*(1-0.206)
   ≒2136


このような感じなんですが、なんとかうまくできる方法はありますか?

お礼日時:2006/10/18 21:03

どうして式ビルダにこだわるのですか


ANO1様の仰るとおりVBAでやられては

Private Sub a_Click()
Dim a,b,n As Integer
a = 1.1
b=int(a)
For n = 1 To 5
b= int(a * b)
Next n
    • good
    • 0
この回答へのお礼

素人でして、申し訳ありません。
式ビルダで安易にできないかなと思いまして。
VBAで式を書いてくださり、ありがとうございます。
上記の式を試してみたらうまく試算できました。
 ずうずうしくて申し訳ありませんが、
このa,b,cをクエリのフィールド複数を用いてやる
場合、どのように組んだらよいのでしょうか。
ためしに()の中に「」で1フィールドリストを
入れてやってみたらそれはうまくいきました。
それ以上というのは難しいのでしょうか。
なにぶん素人で申し訳ありません。
それとも一から指定してやるような
VBAを組む必要があるのでしょうか。

お礼日時:2006/10/18 18:39

式でやろうとすると


>int(int(X*Y)*Y)
この方式しかないのじゃないかな

ユーザー関数を作った方が簡単では
VBAならループで回せますよ
    • good
    • 0
この回答へのお礼

VBAですね。わかりました。できれば簡単な方法でと考えていたもので。
式ビルダでは無理ということがわかって
次のVBAに取り組めます。
ありがとうございます。

お礼日時:2006/10/18 18:33

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