カテゴリー別アーカイブ: AccessVBA

明細に集計行を追加する③

小計まで出したら、追加で消費税と税込金額も明細に追加することができます。
こんな感じで。

やることは、小計行の数字に0.1掛けた金額を追加クエリで追加します。

基本は前回の小計を追加するクエリをコピペして、編集します。
変わる点は、小計にのみ税率をかけるので、単位のフィールドに抽出条件として
“小計”のみ計算対象にします。

追加クエリを実行すると印刷用のテーブルは下の通りになります。

同じ要領で次に小計と消費税をたして税込金額のレコードを追加します。

次は集計対象を”小計”と”消費税”で抽出し、Sum関数で合計します。

追加クエリの実行結果です。

あとはこのテーブルを印刷するのですが、印刷を押したときのコマンドボタンのコードに
今回の追加した二つのクエリを実行する分も追加します。

Private Sub コマンド49_Click()
DoCmd.OpenQuery “Q見積明細印刷用削除”
DoCmd.OpenQuery “Q明細追加”
DoCmd.OpenQuery “見積印刷小計追加”
DoCmd.OpenQuery “見積印刷消費税追加”
DoCmd.OpenQuery “見積印刷税込追加”

DoCmd.OpenReport “見積書”, acViewPreview, , “見積書NO=” & Me!見積書NO & “”
End Sub

こんな感じです。クエリの順番は必ずこの順番になります。

このやり方であれば、テーブルにないレコードを印刷しようとしたときに、必要なレコードを
作成し、追加クエリで追加すれば、自由に設定をすることができます。

====================================
昨日は長女の大学入試の共通テストでした。
自己採点の結果は、実力は発揮できたかなと思います。
この先1か月、私立の受験も始まり本格的な受験シーズンに
突入します。
高校受験と違った緊張感が我が家では漂っています。

本日も最後までお読みいただきありがとうございます。

明細毎に原価と粗利を計算する②

明細毎に複数の原価を集計するために、まずはデータを入れるテーブルを作成します。

最初にメインフォームとなるテーブル。

とりあえず見積明細の見積明細NOが入れるだけです。

次に原価明細を入れるテーブル。

これは必要に応じて項目を作ってください。必要になるのはメインフォームと
サブフォームの関係にしたいので、見積明細NOは必須のフィールドです。

この二つのテーブルを基にフォームを二つ作り、原価明細の方をサブフォームで
とします。連結するのは見積明細NOです。

あとは見積書フォームを開いて、見積明細のコマンドボタンのプロパティの
イベントタブのクリック時に次のVBAコードを入れます。

Private Sub コマンド7_Click()
Me.Refresh
DoCmd.OpenForm “F見積接続”
Forms!F見積接続!見積明細NO = Forms!F見積書.F見積明細!見積明細ID
End Sub

コマンドボタンをクリックしたタイミングでT見積接続に現在参照している
見積明細NOがレコードとして入ります。

あとは明細をひたすら打っていきます。

とりあえずこれで見積明細とその原価明細が繋がりました。

========================================
人生初のダイエット(糖質制限)が3週間経ちました。
その間、米、パン、麺類はほぼほぼ食べず、主食は豆腐と化しました。
コンビニ行っても買えるものは、コーヒーとゆで卵とナッツだけ。。
世の中糖質で溢れてますね。というか糖質しかない!!
食事が面倒です泣

本日も最後までお読みいただきありがとうございます。

明細に集計行を追加する①

請求書の小計・消費税・合計金額の出し方は大きく分けて二通りあります。

①一番下の行に表示させる場合

②明細行の一番下に表示させる場合

どちらにするかは使う方の好みの問題ですが、私が現場で選択をする場合
やはり経営者の好みに合わせて使い分けています。

実際に動作の設定は、①よりも②の方が圧倒的に面倒です(笑)

①の設定で面倒なのは、枠の行数を固定することで、データの出力自体は
特に設定は不要です。

②の設定は、出力する項目をいったん違うテーブルにデータを掃き出して
それを元にレポートで印刷します。
集計項目もクエリで計算してテーブルのレコードにしてしまいます。
そうすることで自由に設定ができるようになります。

一度出力したレコードは次の印刷時にすべて削除して、新しいレコードに
差し替えます。

流れ的には
追加クエリでレコードを追加し、
削除クエリでレコードを削除し、新たに追加クエリで追加する
こんな感じです。

これをマクロでするのか、VBAでやるのかです。マクロでも十分できます。

==========================================
最近業務改善の仕事をいくつか頂けるようになりました。
いくら書籍等で学んでも、現場で学べることには敵わないと感じます。
これからもまだまだ知識を増やして、お役に立てる情報を発信していきます!

本日も最後までお読みいただきありがとうございます。

行間にレコードを追加するときの注意点

行間に追加したときは、次の注意点があります。

①レコードの並び方を指定しておきます。


折角順番を付けているので、並び替えは順番を選択します。

これでVBAでクエリを実行したときに、順番通りに並べ替えられます。
何も設定しないと、オートナンバーで表示されるので、順番通りになりません。
注意してください。

②絶対にレコードを入れなければいけないフィールドがある場合

クエリはリレーションシップで、商品明細の商品CDを商品テーブルの商品CDと関連付けをした場合、
商品CDにデータがない状態ではレコードの追加ができません。

そんなときは、VBAコードを次のように変更します。
rs.AddNew
rs!順番1 = a
rs!商品CD = 1
rs!納品書NO = Forms!納品書!納品書NO
rs.Update
仮の商品CDを入れる必要があります。

当然後から正しい商品CDをいれないといけません。
それ以外にテーブルの設定で「値要求」が「はい」になっているレコードについても
仮で何か値を入れる必要があります。

注意点はこれくらいです。

納品書等を作る場合、やはり行間にレコードを追加できるようにしておく必要があると
思います。こんな感じで参考にしてもらえればと思います。

サンプルファイルを上げておきますので、必要であればダウンロードしてください。

======================================
コロナワクチン1回目打ってきました。
1回目は特に副反応はありません。(今のところ)
問題は2回目だな。
家族に走ることを止められて、それがストレスです。。

本日も最後までお読みいただきありがとうございます。

レコードを行間に追加する

前回はレコードを削除した場合の行番号を整えました。

今回は、行と行の間にレコードを追加する場合のやり方です。

Accessを使っていてなんでこれが簡単にできないんだろうというものの一つが
行の挿入です。Excelでは簡単ですよね。右クリックで行の挿入、これで終わりです。

AccessではVBAを使わないとできません。

下の画面の1と2の間と2と3の間にレコードを挿入します。

コマンドボタンを作って、そこに以下のVBAコードを入れます。

Private Sub コマンド13_Click()
Dim a As Integer

Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset

rs.Open “納品明細”, cnn, adOpenKeyset, adLockOptimistic

a = Me!順番1

rs.MoveFirst

Do Until rs.EOF
If rs!納品書NO = Forms!納品書!納品書NO Then
If rs!順番1 >= a Then
rs!順番1 = rs!順番1 + 1
rs.Update
End If
End If
rs.MoveNext
Loop

rs.AddNew
rs!順番1 = a
rs!納品書NO = Forms!納品書!納品書NO

rs.Update

rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing

Forms!納品書!納品明細.Form.Requery
End Sub

このプログラムを実行すると、下記のようになります。

無事レコードを挿入して、番号もそろえることができました。
データベースの構造上、常に一番下にレコードが追加されていくので、これの入力順を
変更することは不可能です。ですので順番というフィールドを作って、これで操作して
いきます。

テーブルを見るとこんな感じですね。

ちなみにIDはオートナンバー型です。

Excelばかりつかっているとこの考え方を理解するのに手間取るかもしれませんが、
大事な考え方なので、是非分かってあげてください。

=======================================
9月になりました。
やっと明後日にワクチン1回目です。
いろいろ不安はありますし、打たなくてよければ打ちませんが、仕方がありません。
副反応が少なければいいなあ。。

本日も最後までお読みいただきありがとうございます。