旅行好きのおしりトラブル対策グッズ3選

請求書をメインフォームとサブフォームで作っています。
サブフォームは、「商品ID」「商品名」「課税区分」「単価」「金額」からなり、受注明細を入力しています。
商品は2つに分類され(A・B)、それぞれの合計金額を計算したいのですが、どうやったらいいのか分からないので、ご回答をお願いします。
分類の仕方ですが
A⇒「商品ID」 0001~0100
B⇒「商品ID」 0101~0200 です。

そしてもう1つ、消費税の計算もうまくできません。
「課税区分」には
課税 ⇒1
非課税⇒2 と入力してあります。
どなたかご回答をお願い致します。

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

A 回答 (1件)

最初に、サブフォームに使っている「商品ID」「商品名」等は


テーブルを元にしているんですよね?
ここでは「商品テーブル」というテーブルがあるとしておきます。

まず合計ですが、DSum関数を使ってはどうでしょうか?
合計金額を格納する変数、lngTotalA,lngTotalBがあるとします。

lngTotalA = DSum("金額","商品テーブル","商品ID >= '0001' AND 商品ID <= '0100')
lngTotalB = DSum("金額","商品テーブル","商品ID >= '0101' AND 商品ID <= '0200')
これでそれぞれの合計が変数に格納されるはずです。
最後の引数が対象を絞る条件になっているので、ここを変更すれば例えばCという分類ができても対応できると思います。

次に消費税ですが、以下の通りでできると思います。
IIf(Nz([課税区分],0) = 1,Nz([金額],0) * 0.05,0)

課税区分が 1 であれば、金額に0.05をかけて消費税を算出、
それ以外であれば、0 を返すようにしています。
    • good
    • 0
この回答へのお礼

お返事が遅くなりましたが、無事解決しました。
ありがとうございました。

お礼日時:2003/01/28 12:21

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

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

関連するカテゴリからQ&Aを探す

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

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

Qaccessでの条件付き集計

初歩的なことなのですが、分からないのでお願いします。アクセス2000を使っています。テーブルのデータをレポートで表示したいのですが、レポートフッターでデータの個数を表示したいと思っています。総数はcountを使って出来たのですが、条件を付けた時の集計はできないのでしょうか?たとえばAで始まる物の個数とかを集計したいと思っています。

Aベストアンサー

少々不恰好ですが・・・、

レポートフッターに(ページフッターではだめです。)

コントロールソースを

=Sum(IIf([フィールド名]>="A",1,0))

とするテキストボックスを作れば、できます。

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

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

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

Aベストアンサー

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

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

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

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

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

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

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

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

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

Aベストアンサー

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

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

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

Qアクセス IIfとSum関数を同時に使いたい場合

受注管理システムを作っています。
受注一覧Rの最後に、完成高と未成工事高の合計をそれぞれ出したいのです。
フィールドに「工事完了日」というのがあります。
[工事完了日]が入力済みなら、完成高合計。未入力なら未成工事高合計。としたいのです。

未成工事合計の場合   IIF(IsNull[工事完了日],[テキスト42]=Sum([受注金額],"")  

だと演算子エラーになります。

アクセスは初心者です。ご回答お願いいたします。

Aベストアンサー

未成工事合計のコントロールソース   
=Sum(IIf(IsNull([工事完了日]),[受注金額],0))

完成高合計のコントロールソース   
=Sum(IIf(IsNull([工事完了日]),0,[受注金額]))

直書き、間違っていたら御免。

Qサブフォームに対してGoToRecordするには?

フォームに対してRequeryすると先頭のレコードへ移動してしまうので
Requeryする前のレコードの番号を取得して
Requery後にそのレコード番号へ移動したいのですが

Sub test()
i = Forms("Form").Controls("SubForm").Form.CurrentRecord
Forms("Form").Controls("SubForm").Requery
DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i
End Sub

これをすると、実行時エラー2498
指定した式は、いずれかの引数とデータ型が対応していません。
になりますが、
どこがおかしいのでしょうか?

Aベストアンサー

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現状・例2>
  Forms("Form").Requery
 <現状・例3>
  Forms("Form").Controls("SubForm").Form.Requery
 <代替策>
  Forms("Form").Controls("SubForm").Requery
  ※「現状・例3」との違い(→途中の「.Form」の有無)に注意。


【詳細】
> 実行時エラー2498

このエラーの直接の原因は、GotoRecordメソッドの第2引数に指定している
「Forms("Form").Controls("Subform")」の部分です。

ここに指定するのはオブジェクト名になりますが、そのデータ型は文字列型です。
一方、「~.Controls(~)」の形で指定した場合、取得できるのは
 a)オブジェクトそのもの
 b)そのオブジェクトのデフォルトプロパティ
のどちらかです(→状況によって変化します)。
(例えばテキストボックスなら、TextBoxオブジェクトまたはValueプロパティの値)

サブフォームのデフォルトプロパティは調べていませんが(汗)、少なくとも文字列
型のプロパティではないため、「型が一致しない」とのエラーとなります。
サブフォームのコントロール名を取得する場合は、
  Forms("Form").Controls("SubForm").Name
というように、Nameプロパティを明示的に指定する必要があります。

ただ、「サブフォームのレコード移動」の場合、明示的に「Name」プロパティを
指定しても解決には至りません(汗)
これは、GotoRecordメソッドの第2引数には、直接開いているオブジェクトの
名前のみが有効なためで、サブフォームを直接的に指定することはできない、
ということです。
(注:Microsoftの資料を探したわけではなく、経験則から記述していますので、
 私の勘違いでしたらご容赦願います(汗))

サブフォームのレコード移動には、冒頭に記述したとおり、「フォーカスの移動」と
「一部の引数を省略したGotoRecord」を使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

なお、これも冒頭に書きましたが、サブフォームのRequeryの仕方には幾つか
方法がありますが、Requeryの対象を「コントロールとしてのサブフォーム」にすれば、
レコード移動が発生しませんので、GotoRecord自体が不要になります。
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmHowToRequeryAndReturn.html

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現...続きを読む

QACCESSでの異なる条件での抽出と合計について

ACCESS2000にて現在、元となる勤怠データから社員別日別に訪問時間や移動時間、業務時間等を算出していております。その中でテーブルからそれぞれ異なる条件で抽出したフィールドの合計値の表示させ方をお教え願います。
具体的には下記に元データと作成したいデータのレイアウト図を記載します。

(元データ)

社員コード| 日付 |区分|勤務時間|移動時間|合計時間|業務のカウント|訪問のカウント|開始時間
===============================================================================
|1111111 |2013/10/01 |業務| 400 | 120 | 520 | 1 | 0 | 08:00
|1111111 |2013/10/01 |訪問| 400 | 100 | 500 | 0 | 1 | 09:00
|1111111 |2013/10/02 |訪問| 300 | 200 | 500 | 0 | 1 | 09:00
|1111111 |2013/10/03 |業務| 200 | 200 | 400 | 1 | 0 | 08:00

(作成したいデータ)

社員コード| 日付 |勤務時間|移動時間|合計時間|業務のカウント|訪問のカウント|開始時間
===============================================================================
|1111111 |2013/10/01 | 800 | 220 | 1020 | 1 | 1 | 08:00
|1111111 |2013/10/02 | 300 | 200 | 500 | 0 | 1 | 09:00
|1111111 |2013/10/03 | 200 | 200 | 400 | 1 | 0 | 08:00

ちなみに ”開始時間” は 「区分」フィールドの値が ”業務”の時の開始時間と ”訪問”の時の開始時間を比べて時間が早い方を表示させます。
上記でネックなのは 日によって 「区分」フィールドが ”訪問” の場合のみも有り、尚且つ ”業務”
の場合のみも有り、更に ”訪問”、”業務”両方が入っている場合もあり、ただ単純に
”業務”のみ と ”訪問”のみのデータをクエリで分けて 結合させると言う訳には行かないところです。

お手数ですが何卒よろしくお願い致します。


|

ACCESS2000にて現在、元となる勤怠データから社員別日別に訪問時間や移動時間、業務時間等を算出していております。その中でテーブルからそれぞれ異なる条件で抽出したフィールドの合計値の表示させ方をお教え願います。
具体的には下記に元データと作成したいデータのレイアウト図を記載します。

(元データ)

社員コード| 日付 |区分|勤務時間|移動時間|合計時間|業務のカウント|訪問のカウント|開始時間
===============================================================================
|1111111 |2013/1...続きを読む

Aベストアンサー

まず、「元データ」から「区分」以外のフィールドの選択クエリを作ります。
ツールバーの「Σ」ボタンをクリックし、集計行を表示します。

「社員コード」「日付」を グループ化。
「勤務時間」から「訪問のカウント」までは 合計。
「開始時間」を 最小。

必要なら、フィールド名を変更。

以上です。

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社 ○○地区 1000
B社 ○○地区 2000 
C社 ○○地区 3000
D社 ○○地区 4000
E社 ○○地区 5000

という感じなんですが
どこかのセル(アクセスでもセルと呼ぶのでしょうか^_^;?)に売上の合計(ここでは15000です)が出るようにしたいのですが・・・。

Aベストアンサー

地区ごとの合計を出したいのなら、
クエリを作成し、該当するテーブルを選び
「地区」、「売り上げ」を選択して
右クリックして「集計」をクリックし
「地区」の集計を「グループ化」
「売り上げ」の集計を「合計」にする。

SQLビューで見ると

SELECT 地区名, Sum(売り上げ) AS 合計 FROM テーブル名 GROUP BY 地区名;

といった感じかな。

QAccessのレポート機能でソート&抽出条件を指定したい

accessでレポート機能について、質問です。
エクセルでいうフィルタ機能みたいなものはあるのでしょうか。

例えば、以下の場合、職位="B"だけレポートで表示したい場合、
どうすればよいのでしょう?
CD 職位 所属
01  A  東京
02  B  東京 → このデータだけを表示
03  A  大阪

1)クエリを作って、レポートで表示するしかないのでしょうか?
2)レポートのデザインで条件指定ができるのでしょうか?

ソートの条件も変えたいのですが、どの項目をソートするかは、
どこで指定できるのでしょうか?

要はレポートの形式は1つで、様々な抽出条件とソート条件で
レポート表示したいのです。

Aベストアンサー

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示したいのです。
1つレポートの雛形を作って、フィルタと並べ替えのプロパティと並べ替え/グループ化の設定を変えて保存し、複数のレポートを用意する。
入力した値によって変えたい場合は、フォーム上のテキストボックスの値や特定テーブルのレコードの値にを参照するクエリを作り、レポートのレコードソースにする。
またはVBAで処理する。

p.s.
レポートの表示をボタンで起動する場合、VBAやマクロを呼び出します。
VBAやマクロでレポートを開く時に、フィルタやWhere条件式を設定できます。

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示した...続きを読む


人気Q&Aランキング

おすすめ情報