Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

新着の投稿記事


タイトルRe^5: 前月フォームの値を 今月フォームに表示させたいです。
記事No42782   [関連記事]
投稿日: 2017/03/27(Mon) 15:51
投稿者あじせん
解決済: ON
色々試しましたが、結局うまくいかず、手動で入力しています。

そもそもテーブル設計も正しいのか分からないので、構造自体を見直しながら、勉強し直します。

お時間とらせました、ありがとうございました。

タイトルRe^4: 前月フォームの値を 今月フォームに表示させたいです。
記事No42781   [関連記事]
投稿日: 2017/03/17(Fri) 12:27
投稿者あじせん
解決済: ON
早速ありがとうございます。


> 会社名はテキスト型ですね。
>
> =DSum("入金額", "受注明細テーブル", "会社名='" & [会社名] & "' AND 出荷日 <#" & [月度] &
>

すみません、会社名は、顧客参照ID(数値型)を参照して、コンボボックスを置いていました。なので、

=DSum("入金額","受注明細テーブル","会社名='" & [コンボ会社名] & "' AND 出荷日 <#" & [月度] & "#")

と入力しました。エラーの点滅はなくなりましたが、反映はされません。
ただ、「前回請求額」に反映させたいのは、前月の「今回請求額」です。
なので、やはりDlookupになりますか?


>
> ただ、受注フォームに、今回請求額 というテキストボックスはありますが、
> そこには式が設定してあるのですよね。
> レコードソースの受注テーブルには、今回請求額 というフィールドはないですよね。

今回請求額 はテキストボックスだったのですが、フィールドがあった方が良いのかと思い、
受注テーブルに 今回請求額というフィールドを作りました。

>
> 受注テーブル、受注明細テーブル のフィールド名を列挙してもらえますか。

受注テーブル
 受注ID/オートナンバー
 顧客参照ID/数値型(別に住所録テーブルがあり、その中に 顧客ID があります。)
 月度/日付
 前回請求額/数値型
 今回請求額/数値型 →=Nz([前回ご請求額],0)-Nz([テキスト入金額],0)+Nz([テキスト税込合計],0)


受注明細テーブル
 受注明細ID/オートナンバー
 受注参照ID/数値型
 見積明細参照ID/数値型(別に見積テーブルあり)
 受注商品参照ID/数値型(別に商品テーブルあり)
 出荷日/日付
 数量/数値型
 入金額/数値型

これを受注明細クエリとして、
 小計: [数量]*[売値] (売値は、見積テーブルにあり)
 消費税: Int([小計]*0.08)
 税込合計: Int([小計]+[消費税])

を付けたし、サブフォームにしています。



受注フォームに置いたテキストボックスは、以下3つです。

「テキスト入金額」 =Nz([Forms]![受注フォーム].[受注明細フォーム]![税込合計],0) 

★すみません、もともと受注明細テーブルに入金額という項目があるので、これがエラーの原因になる可能性があると思い、「テキスト入金額」、と名前を変更してみました。
 
 ↑[テキスト62]は、受注明細フォームフッターで、Sum[入金額]をしたもの。



「テキスト税込合計」=Nz([Forms]![受注フォーム].[受注明細フォーム]![テキスト54],0)

 ↑[テキスト54]は、受注明細フォームフッターで、Sum[税込合計]をしたもの。



「繰越額」=Nz([前回請求額],0)-Nz([テキスト入金額],0)




式を入れた「今回請求額」を、次月の「前回請求額」に反映させたいです。


教えて頂いたDateAddを参考に式を入力してみましたが、うまくいきませんでした。

=DLookUp("今回請求額","受注テーブル","会社名='" & [会社名] & "' AND 月度 = & DateAdd("m"",-1,[月度]))


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

タイトルRe^3: 前月フォームの値を 今月フォームに表示させたいです。
記事No42780   [関連記事]
投稿日: 2017/03/17(Fri) 00:54
投稿者hatena
解決済: ON
> > =DSum("入金額", "受注明細テーブル", "会社名 =" & [会社名] & " AND 出荷日 <#" & [月度] & "#")
>
>
> 入力してみましたが、#エラーの点滅が続きます。

会社名はテキスト型ですね。

=DSum("入金額", "受注明細テーブル", "会社名='" & [会社名] & "' AND 出荷日 <#" & [月度] &

としたらどうでしょうか。

> 当月以前、との考え方、理解しました。
>
> ただ、今回は、前の月のみの金額を求めたいのですが、[月度]-1でいいいのでしょうか?
> 上記に書いた通り、2017/1/1のような入力をしています。

[月度]-1 だと1日前ということになります。
1か月前ということなので、
DateAdd("m", -1, [月度])
ですね。

ただ、受注フォームに、今回請求額 というテキストボックスはありますが、
そこには式が設定してあるのですよね。
レコードソースの受注テーブルには、今回請求額 というフィールドはないですよね。

受注テーブル、受注明細テーブル のフィールド名を列挙してもらえますか。

タイトルRe^2: 前月フォームの値を 今月フォームに表示させたいです。
記事No42779   [関連記事]
投稿日: 2017/03/16(Thu) 15:53
投稿者あじせん
解決済: ON
hatenaさん、ご返信本当にありがとうございます。

> なぜ、ここで突然VBAにしたのでしょうか。
> AfterUpdate は更新しないと発生しないので、ユーザーが入力しなと動作しません。
> 参照する値なのにユーザーが入力するというのもおかしな話ですよね。


複雑な式はVBAに入れなければ、と勝手に思い込んでいました。
たしかに、AfterUpdateに入力すること自体、間違いでした。



> コントロールソースに、下記の式でどうですか。
>
> =DSum("入金額", "受注明細テーブル", "会社名 =" & [会社名] & " AND 出荷日 <#" & [月度] & "#")


入力してみましたが、#エラーの点滅が続きます。

ちなみに、受注フォームは、

受注ID  会社名   月度
1     A社   2017年1月
2     A社   2017年2月
3     A社   2017年3月
4     B社   2017年1月
5     B社   2017年2月
6     C社   2017年2月・・・

という風に、会社毎の受注があるひと月に、ひとフォームといった具合です。

また、月度のフィールドには、2017/1/1 のように、毎月の1日を入力しており、
それが、2017年1月度の請求書になるようにしています。

この仕組みでいいのでしょうか。


> 考え方としては、サブフォームのレコードソースのテーブルから、当月以前の金額合計を求めればいいということです。

当月以前、との考え方、理解しました。

ただ、今回は、前の月のみの金額を求めたいのですが、[月度]-1でいいいのでしょうか?
上記に書いた通り、2017/1/1のような入力をしています。

長々とすみません。
よろしくお願い致します。

タイトルRe: 前月フォームの値を 今月フォームに表示させたいです。
記事No42778   [関連記事]
投稿日: 2017/03/16(Thu) 15:08
投稿者hatena
解決済: ON
> 受注フォームに入れた式
>
> 「入金額」には、
> =Nz([Forms]![受注フォーム].[受注明細フォーム]![入金],0) ←ここでの[入金]は、サブフォームの入金額の合計
>
> 「繰越額」には、
> =Nz([前回請求額],0)-Nz([入金額],0)
>
> 「今回請求額」には、
> =Nz([前回請求額],0)-Nz([入金額],0)+Nz([繰越額],0)

ここまでは、テキストボックスのコントロールソースに設定したのですよね。

> 「前回請求額」には、下記の式を入れましたができませんでした。
>
>
> Private Sub 前回請求額_AfterUpdate()
>
> 前回請求額 = DLookup("今回請求額", "受注テーブル", "会社名 =" & Me![会社名] _
> & " AND 月度 =#" & DMax("月度", "受注テーブル", "会社名 =" & Me![会社名] _
> & " AND 月度<#" & Me![月度] & "#") & "#")
>
> End Sub

なぜ、ここで突然VBAにしたのでしょうか。
AfterUpdate は更新しないと発生しないので、ユーザーが入力しなと動作しません。
参照する値なのにユーザーが入力するというのもおかしな話ですよね。

コントロールソースに、下記の式でどうですか。

=DSum("入金額", "受注明細テーブル", "会社名 =" & [会社名] & " AND 出荷日 <#" & [月度] & "#")



テーブル名、フィールド名、データ型など詳細が不明なのでそのへんは適当です。

考え方としては、サブフォームのレコードソースのテーブルから、当月以前の金額合計を求めればいいということです。

タイトル前月フォームの値を 今月フォームに表示させたいです。
記事No42777   [関連記事]
投稿日: 2017/03/15(Wed) 15:28
投稿者あじせん
解決済: ON
OS:windows7
Access Version:2010

前月のフィールド参照方法に、半年粘りましたが自力ではお手上げです。。。
どなたか教えて下さい。


今月の「前回請求額」のフィールドに、前月の「今回請求額」を表示させたいです。


受注フォーム
月度 会社名 前回請求額 入金額 繰越額 今回請求額 (このうち、入金額と繰越額は、テキストボックス)

受注明細フォーム(サブフォーム)
出荷日 品名 数量 単価 小計 入金額



受注フォームに入れた式

「入金額」には、
=Nz([Forms]![受注フォーム].[受注明細フォーム]![入金],0) ←ここでの[入金]は、サブフォームの入金額の合計

「繰越額」には、
=Nz([前回請求額],0)-Nz([入金額],0)

「今回請求額」には、
=Nz([前回請求額],0)-Nz([入金額],0)+Nz([繰越額],0)



「前回請求額」には、下記の式を入れましたができませんでした。


Private Sub 前回請求額_AfterUpdate()

前回請求額 = DLookup("今回請求額", "受注テーブル", "会社名 =" & Me![会社名] _
& " AND 月度 =#" & DMax("月度", "受注テーブル", "会社名 =" & Me![会社名] _
& " AND 月度<#" & Me![月度] & "#") & "#")

End Sub


そもそもこの方法では無理なのでしょうか?

よろしくお願いしますm(_ _)m

タイトルRe^4: クロス集計クエリをレポートに。
記事No42776   [関連記事]
投稿日: 2017/02/03(Fri) 09:05
投稿者さくら
解決済: ON
>mayuさま

レス通知メールが迷惑メールに振り分けられていて
気づくのが遅れました!
お返事くださっていたのに申し訳ありません。

教えてくださった式でばっちり動きました!!!
VBEでの確認の仕方も教えてくださって、ありがとうございます。

また一つ、Accessのことが少し分かりました。

でもまだまだ初心者。
コツコツ勉強を続けます。

本当にありがとうございます。

タイトルaccess2016を社内で共有する方法
記事No42775   [関連記事]
投稿日: 2017/01/31(Tue) 14:22
投稿者あいりん
OS:Win8
Access Version:2016

こんにちは。
いつもお世話になっています。
同じ質問を初級者向けの方でさせていただいたのですが、
宣伝のような書き込みが多く、ご回答をいただけなかったので、こちらで質問させていただきます。

access初心者ですが、会社の指示で顧客データベースをつくっています。
こちらで勉強させていただき、何とかデータベースが出来上がってきました。
そこで、今悩んでいるのが、社内でデータベースを共有する方法です。

ネットで調べてはみたのですが、昔の情報と新しい情報が錯綜していて、
一体どうすればいいのか余計わからなくなってきました。

会社の状況は、下記の通りです。

・社員10名ほど
・access2016がインストールされているのは、私のパソコン1台のみ
・他の社員のパソコンにはオフィス2013や2007、2003などそれぞれ違うバージョンのオフィスが入っている
・なるべく経費は使わずに共有したい(でもどうしても必要なら出せないこともない)
・サーバーは会社で所有・管理している

最初は、データをサーバーに置き、他の社員にaccess2016のランタイムを配ればいいと思ったのですが、みんなそれぞれ違うバージョンのオフィスが入っているので、難しいと思いました。

だったら、SharePointというものがいいのかと思ったのですが、ネットにデータを置くことになるので、セキュリティやの問題やランニングコストなどが気になります。

他にいい方法はないでしょうか?
実際に社内でデータベースを使用されている方や詳しい方がいらっしゃいましたら
アドバイスをいただけないでしょうか。

タイトルRe^3: クロス集計クエリをレポートに。
記事No42774   [関連記事]
投稿日: 2017/01/30(Mon) 23:21
投稿者mayu
解決済: ON
解決したようで何よりでした。
本題は解決済みですので、以下参考までに。

> 「サブクエリに非固定列のクロス集計を使用することはできません」
> のエラーが出てしまいました。

私のミスです、ごめんなさい。(´;ω;`)

フォームやレポートのレコードソースに クロス集計クエリを指定する場合、
【 クエリ列見出し 】プロパティ
つまり、SQL文でのIN句 を固定する必要がありました。

'-------------------------------------------------------------------------------------------------
'/*
' ***********************************************************
' *
' *  クロス集計のSQL文を生成します
' *
' *   引数1:  年
' *   引数2:  月
' *   引数3:  日
' *   引数4:  締日( 月末は 0 を指定 )
' *   引数5:  引数 1,2,3 で指定した年月日の直近Xヶ月
' *         ※ 遡る場合は負の数
' *         ※ 延ばす場合は正の数
' *
' ***********************************************************
'*/
Public Function get_sql(ByVal iYear As Long _
           , ByVal iMonth As Long _
           , ByVal iDay As Long _
           , ByVal iClose As Long _
           , ByVal iCompare As Long) As String
  Dim dtBase  As Date
  Dim dtTemp  As Date
  Dim dtStart As Date
  Dim dtEnd   As Date
  Dim i       As Long
  ReDim sPvIn(Abs(iCompare)) As String
  
  dtBase = DateSerial(iYear, iMonth, iDay)
  dtStart = DateSerial(Year(dtBase - iClose), Month(dtBase - iClose) + 2, 0)
  dtEnd = DateSerial(Year(dtBase - iClose), Month(dtBase - iClose) + 2 + iCompare, 0)
  
  If (dtStart > dtEnd) Then
    dtTemp = dtEnd
    dtEnd = dtStart
    dtStart = dtTemp
  End If
  
  For i = 0 To Abs(iCompare)
    sPvIn(i) = Format$(DateSerial(Year(dtStart), Month(dtStart) + 1 + i, 0) _
             , "'yyyy\/mm月度'")
  Next i
  
  get_sql = "TRANSFORM CLng( Nz( Sum( y.出庫数 ), 0 ) ) "              & vbNewLine _
      & "SELECT x.製品名 "                           & vbNewLine _
      & "FROM        T製品マスタ   x "                     & vbNewLine _
      & "INNER JOIN  T入出庫データ y "                     & vbNewLine _
      & "        ON x.製品ID = y.製品ID "                    & vbNewLine _
      & "WHERE DateSerial( Year( y.入出庫日 - " & CStr(iClose) & " ) "     & vbNewLine _
      & "                , Month( y.入出庫日 - " & CStr(iClose) & " ) + 2 "   & vbNewLine _
      & "                , 0 "                         & vbNewLine _
      & "      ) "                               & vbNewLine _
      & "          Between " & Format$(dtStart, "\#yyyy/mm/dd\#")        & vbNewLine _
      & "              And " & Format$(dtEnd, "\#yyyy/mm/dd\#")         & vbNewLine _
      & "GROUP BY x.製品名 "                          & vbNewLine _
      & "ORDER BY x.製品名 "                          & vbNewLine _
      & "PIVOT Format$( "                            & vbNewLine _
      & "          DateSerial( Year( y.入出庫日 - " & CStr(iClose) & " ) "   & vbNewLine _
      & "                    , Month( y.入出庫日 - " & CStr(iClose) & " ) + 2 " & vbNewLine _
      & "                    , 0 "                       & vbNewLine _
      & "          ) "                             & vbNewLine _
      & "        , 'yyyy\/mm月度' "                       & vbNewLine _
      & "      ) "                               & vbNewLine _
      & "   IN ( " & Join(sPvIn, ",") & " ) ;"
End Function
'-------------------------------------------------------------------------------------------------


関数を標準モジュール上に登録した後、
VBE( Visual Basic Editor )上で Ctlキーを押しながら + Gキーを押し、
表示された イミディエイトウィンドウ上で

?get_sql(2017, 1, 22, 20, -6)

と引数を入力して、エンターキーを押すと
関数によって生成された SQL文 が表示されますので

クエリを新規作成し、TRANSFORM... 以下を
SQLビューに貼り付けてみると
どのようなデータが表示されるか 確認いただけると思います。
( 関数の結果を フォームやレポートの RecordSource にも指定できます )

  では ☆

タイトルRe^2: クロス集計クエリをレポートに。
記事No42773   [関連記事]
投稿日: 2017/01/30(Mon) 09:57
投稿者さくら
解決済: ON
>mayuさま
>hatenaさま

お返事が遅くなってしまい、申し訳ありません。
ご丁寧な回答、本当にありがとうございます。

mayuさまの1つ目、hatenaさまのご提案分、両方とも思う通りの結果が出ました。
まだまだ分かっていない部分も多く勉強不足でした。
Accessは、一つの答えを出すために本当に色々な方法があるんですね!

mayuさまの2つ目のご提案分も、運用面を考えれば
とても良い方法だと思うので是非使ってみたいところなのですが

「サブクエリに非固定列のクロス集計を使用することはできません」
のエラーが出てしまいました。
正直、SQL文生成のモジュールがあまり理解できておらず
(クエリ作成もデザインビューばかり使ってSQL文を理解してない部分が大きいです)
もうちょっと勉強してみます。
保存済みクエリを使わずにレポートって作れるんだ!
と、初心者丸出しでびっくりした私でした。

ページの先頭へ 前ページへ戻る