
顧客の売上データ(テーブル)があるのですが、
同じ顧客名で、複数のレコードがあります。
売上を1ヶ月毎に、顧客毎に利用分をまとめて請求書を
作成しています。
下記のように、10月分には、すでに請求書番号(連番)が
入っています。
11月分の売上データの空欄の請求番号のところに、
顧客毎に、自動的に連番(2523~)で請求番号を振る方法がありましたら、
教えてください。どうぞよろしくお願いいたします。
(売上テーブル)
売上日 顧客名 金額 請求書番号
12/10/08 C社 \2000 2511
12/10/09 C社 \5000 2511
12/10/10 C社 \3000 2511
12/10/01 D社 \1000 2522
12/11/01 A社 \2000
12/11/06 A社 \1000
12/11/01 B社 \1000
12/11/08 C社 \2000
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>実は、1ヶ月毎の請求から、四半期毎(3ヶ月毎)の請求に
>変更になりました。
>いまのままですと、3ヶ月分の売上データに請求番号をつけると、
>当然のことながら、同一会社の請求書が3通できてしまいます。
>1通になるようなよい方法を教えていただければ幸いです。
上記については回答を手直しすればできるとは思いますが、問題は
下記の、
>さらに、できれば教えていただきたいのですが、たとえば、
>4~6月分の請求書を発行する時に、早期発行希望の会社には、
>6月中に請求書を発行し、その他は、7月に入ってから
>請求書を発行している関係から、会社情報というテーブルの
>早期発行希望にyesチェックの入っている会社の売上データ
>だけに請求番号を振る機能もつけられたら、助かります。
以下のところで、
>4~6月分の請求書を発行する時に、早期発行希望の会社には、
>6月中に請求書を発行し、
この場合、6月中に請求書を発行した場合、発行後に6月中
に売上が発生することがないのか、もしそのような場合が
起こりえるならば、どのような対応をするのかを明確に
しておかないと当然ながら請求漏れが起こります。
たとえば、毎月の請求の場合、25日締めで、以降同じ月の
月末までの売上は翌月請求にするということはありますが。
このあたりはどのようになっていますか。
条件が複雑になると同じような手法でできるかどうかは
わかりませんが。
No.4
- 回答日時:
少し手順を省略できることに気が付かなかったので
No2を手直しします。
No2において、
(1)はそのままです。
(2)は必要ありません。
(3)を一部手直しします。
Sub test()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim lnMax As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("売上テーブル", dbOpenDynaset)
Set rs2 = db.OpenRecordset("Q請求月")
lnMax = DMax("請求書番号", "売上テーブル")
rs2.MoveFirst
Do Until rs2.EOF
lnMax = lnMax + 1
rs1.MoveFirst
Do Until rs1.EOF
If IsNull(rs2!請求書番号) Then
If Format(rs1!売上日, "yyyy/mm") = rs2!売上月 And rs1!顧客名 = rs2!顧客名 Then
rs1.Edit
rs1!請求書番号 = lnMax
rs1.Update
End If
Else
lnMax = lnMax - 1
Exit Do
End If
rs1.MoveNext
Loop
rs2.MoveNext
Loop
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
クエリで最大値を求めてそれを参照するという方法ではなく、
DMax関数を用いて求めます。No2のコードの中の
lnMax = DLookup("請求書番号の最大", "Q請求番号")
を、
lnMax = DMax("請求書番号", "売上テーブル")
にしました。他はほとんど変更していません。
以上です。
この回答への補足
ご回答ありがとうございます。教えていただいた方法でうまくいきました!感謝いたします。
大変恐縮なのですが、追加で教えていただきたいことがあります。
実は、1ヶ月毎の請求から、四半期毎(3ヶ月毎)の請求に変更になりました。
いまのままですと、3ヶ月分の売上データに請求番号をつけると、当然のことながら、同一会社の請求書が3通できてしまいます。1通になるようなよい方法を教えていただければ幸いです。
さらに、できれば教えていただきたいのですが、たとえば、4~6月分の請求書を発行する時に、早期発行希望の会社には、6月中に請求書を発行し、その他は、7月に入ってから請求書を発行している関係から、会社情報というテーブルの早期発行希望にyesチェックの入っている会社の売上データだけに請求番号を振る機能もつけられたら、助かります。
いろいろお願いしてしまいましたが、よい方法があれば、ご教授お願いいたします。
No.3
- 回答日時:
No2です。
不要なものを残していました。Sub test()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim rs3 As DAO.Recordset
Dim lnMax As Long
のところで
Dim rs3 As DAO.Recordset
は使用していないので、取り除いてください。
あっても問題はないのですが、念のために。
失礼しました。
No.2
- 回答日時:
少し準備が必要ですが、以下のように。
(1)
以下のSQL文を新規のクエリのSQLビューに貼り付け、
「Q売上月」という名前で登録します。
SELECT Format([売上日],"yyyy/mm") AS 売上月, 売上テーブル.顧客名, 売上テーブル.請求書番号
FROM 売上テーブル
GROUP BY Format([売上日],"yyyy/mm"), 売上テーブル.顧客名, 売上テーブル.請求書番号
ORDER BY Format([売上日],"yyyy/mm"), 売上テーブル.顧客名;
(2)
新しいクエリのデザインビューに「売上テーブル」を表示し、
フィールドに「売上日」のみを表示し、ツールバーで集計ボタンを
押し、集計で「最大」を選択します。このまま「Q請求番号」
という名前で保存してください。
SQL文は以下のようになっていると思いますが、集計ボタンを
押して一旦グループ化しています。確認をしてください。
SELECT Max(売上テーブル.請求書番号) AS 請求書番号の最大
FROM 売上テーブル;
(3)
以下を標準モジュールに貼り付けるか、ボタンクリックで呼び出すか、
あるいはイミディエイトウィンドウでtestを実行するか、あるいは
Sub test()
End Sub
の中身をボタンクリックのイベントに入れるかのどれかで
実行してください。
なお、DAOを使っているのでコード表のツール→参照設定から
Microsoft DAO xx Object Library にチェックをいれてください。
xxは3.6のような数字です。
Sub test()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim rs3 As DAO.Recordset
Dim lnMax As Long
Set db = CurrentDb
Set rs1 = db.OpenRecordset("売上テーブル", dbOpenDynaset)
Set rs2 = db.OpenRecordset("Q請求月")
lnMax = DLookup("請求書番号の最大", "Q請求番号")
rs2.MoveFirst
Do Until rs2.EOF
lnMax = lnMax + 1
rs1.MoveFirst
Do Until rs1.EOF
If IsNull(rs2!請求書番号) Then
If Format(rs1!売上日, "yyyy/mm") = rs2!売上月 And rs1!顧客名 = rs2!顧客名 Then
rs1.Edit
rs1!請求書番号 = lnMax
rs1.Update
End If
Else
lnMax = lnMax - 1
Exit Do
End If
rs1.MoveNext
Loop
rs2.MoveNext
Loop
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
以上です。分からないところがあれば補足してください。
No.1
- 回答日時:
>>顧客毎に、自動的に連番(2523~)で請求番号を振る方法がありましたら、
教えてください。どうぞよろしくお願いいたします。
顧客ごとに請求書番号を請求書番号テーブルを作成して、プログラムで請求書発行するごとに+1すればいいのではないですか?
プログラミングは必要ですが、それを作れば自動的に処理されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
- Visual Basic(VBA) 複数ページあるPDFファイル内の文字列等の情報をキーにPDFをグループ分け分割したい。 2 2022/06/25 09:51
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- 政治 日本で訴訟件数が少ないのは、自民党とビッグモーターが詐欺組織だからですか? 2 2023/07/27 11:30
- 事務・総務 事務の方教えてください。未経験なのですが、補助の仕事って難しいですか? やはり責任重大ですか? 仕事 2 2023/08/20 13:38
- Java リレーションエンティティクラスとは何ですか? 2 2023/02/10 00:02
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- 財務・会計・経理 事業復活支援金の事前確認について 2 2022/04/11 16:07
- その他(お金・保険・資産運用) 事業復活支援金 事前確認の必要書類について 1 2022/05/07 21:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実績累計の求め方と意味を教え...
-
弥生販売08 得意先分類1の...
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
Oracleでの文字列連結サイズの上限
-
最新の日付とその金額をクエリ...
-
アクセス クエリ-で空白以外の...
-
SELECTで1件のみ取得するには?
-
SQLの問題です。
-
oracleの分割delete
-
差し込み印刷のレコード数について
-
ACCESSで大量の更新を行うと「...
-
unionでマージした副問合せを結合
-
MERGE文を単体テーブルに対して...
-
Update文の書き方について
-
Accessで別テーブルの値をフォ...
-
使うべきでない文字。
-
SQL文の記述について
-
2つのSQL(Access)の結果[時刻,...
-
レコードセット(ADO.Recordset)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実績累計の求め方と意味を教え...
-
エクセルの指定したシートにエ...
-
弥生販売08 得意先分類1の...
-
ACCESS2000 コンボボックス絞込み
-
売上データに会社毎に請求番号...
-
バーコード利用する方法を教え...
-
エクセルのピボットテーブルの...
-
ACCESS SQL 括弧について
-
ACCESS で、存在しないデータも...
-
Access レポートの集計
-
Accessで月間売り上げ目標達成...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
OracleのSQL*PLUSで、デー...
-
SELECTで1件のみ取得するには?
-
Accessで別テーブルの値をフォ...
-
レコードが存在しなかった場合
-
select insertで複数テーブルか...
-
Excelでセルの書式設定を使用し...
-
select句副問い合わせ 値の個...
おすすめ情報