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

エクセルでは[=A2-A1]といった上下の計算はすぐに出来ますが、アクセスでも出来るでしょうか?
フィールド名で指定をすると、同じフィールド名同士で引き算をする形になってしまうのですが!

A 回答 (4件)

エクセルとアクセスの設計面からのニーズや仕組みの違いを鋭く突いた質問と思います。

エクセルでは、全セルに番地が振られ、クリックで1つの番地を指定できてそこにデータをセットできて、セルデータをA2のような表現指定を使った演算が出来て演算結果を望みのセルにセットできます。
しかしアクセスではテーブルの行単位に当たるレコード単位のデータ保持になっており、それに番号(フィールドとしての番号とは別)やアドレスを振られた仕組みではありません。そのレコードの中を構成する、フィールド(項目)も簡単に番号で指定して掴まえられません。例えば第3レコードの左より4番目のフィールドを思い描いても、F(3,4)のような、指定は(ソフトを組めば別ですが)させてくれません。
そもそもアクセスのテーブルは、他のレコードや自分のレコードの他のフィールド間の演算で計算されるフィールドは、テーブルに保持しない思想です。(出来るだけ「素の」データだけを保持する考え。)
同一レコードのフィールド間の計算で出るフィールド(項目)はまだアクセスでやや簡単にできて良いですが、前後のレコードとなるとアクセスでは苦労します。
1方法としてModuleに下記を張りつけ、実行すると、「
前日比」が出ます。(SQLのUPDATEでもできるかも知れない)
「前日比」のフィールドは、前もって追加しておきます。
下記では、mに現在のレコードのフィールド「数量」の値を保持して、次レコードを読んだ時に使うと言う風に、「1レコードづらして」使用するという、工夫(常套手段)をしています。
Sub test05()
Dim dbs As Database
Dim rs As DAO.Recordset
Set dbs = CurrentDb
Set tdf = dbs.CreateTableDef("会員名簿T")
Set rs = dbs.OpenRecordset("会員名簿T", dbOpenTable)
m = 0
rs.MoveFirst
'----
While Not rs.EOF
n = rs.Fields("数量")
' MsgBox n
rs.Edit
rs.Fields("前日比") = n - m
rs.Update
m = n
rs.MoveNext
Wend
'-----
MsgBox "終り"
rs.Close
dbs.Close
End Sub
番号姓名名前カナ名住所数量前日比
00001山田三郎ヤマダ サブロウ京都市2323
00002上田ニ郎ウエダ ジロウ大津市3411
00003川田太郎カワタ タロウ膳所市5420
00004村田幸雄ムラタ ユキオ彦根市8228
00005町田初男マチダ ハツオ長浜市9311
1レコードづつ掴まえて、処理して、フィールドの内容を
変えるプログラムですが、各行で何をやっているかを知り、自分の問題の場合の、変え方(少しの変更です)を知れば、応用が広いと思います。
    • good
    • 0
この回答へのお礼

御礼が遅れてしまいすみません。色々な方法があるものだと感心しています。今後も色々とアドバイスお願いします。

お礼日時:2004/04/28 13:41

アクセスでエクセルのようにデータシートビューが表示されますが、これはレコードの一覧に過ぎず、各レコードは独立していると考えて良いとお思います。

よって、データシートビューで上のレコードの値を合計して入力するとことはできません。

集計を行うには、選択クエリを使用します。
ここで、集計の項目で、各フィールドに ”合計”や”グループ”、”選択”等の条件を設定します。

使い方の詳細については、アクセスにサンプルデータベースが付属していますのでインストールして確認してください。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

お礼日時:2004/04/19 00:13

>エクセルで行っている、前日分-本日分(1回目:B2=A2-A1,2回目B3=A3-A2)というようなやり方をアクセスで


>行うにはどのようにすればよろしいでしょうか?

いまいちイメージが掴めませんがたぶん1日から末日
までのデータ等だと思いますが発想を変えた方が
良いかと思います。
データベースの考え方に合わせるとこの場合は、
縦での計算ではなく横での計算を行えるように
データ構造を変えた方が良いかと思います。
    • good
    • 0
この回答へのお礼

お礼遅れました。色々試してデータベースを理解していきたいと思います。

お礼日時:2004/05/06 22:47

できないです。


というか、行という考えがないのかな?

特定のフィールドの値によって、レコードを特定させる必要がありますね。

この回答への補足

書くところを間違えました。
ありがとうございます。
っということはエクセルで行っている、前日分-本日分(1回目:B2=A2-A1,2回目B3=A3-A2)というようなやり方をアクセスで行うにはどのようにすればよろしいでしょうか?
もしかして根本的に不可能?

補足日時:2004/04/10 01:05
    • good
    • 0
この回答へのお礼

ありがとうございます。
っということはエクセルで行っている、前日分-本日分(1回目:B2=A2-A1,2回目B3=A3-A2)というようなやり方をアクセスで行うにはどのようにすればよろしいでしょうか?
もしかして根本的に不可能?

お礼日時:2004/04/10 00:20

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

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