[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『請求コードごとの請求書作成方法について』(たはたは)
会社の請求書発行部門で業務をしている者です。
社内のシステム変更が行われることになり、色々請求書発行方法も変わるので、エクセルで作成出来ないか検討しています。
今困っているのが、請求コードごとの請求書作成方法について、です。
1件のお客様、納品場所ごとに請求書を分けてほしいとご要望の為、納品場所ごとに請求コードを登録しています。
請求コードごとに、品名、規格、数量、単価、金額、備考、月の合計納品金額
を毎月発行しています。
今までは上記の請求書発行を自動で出来るシステムがあり、ボタンひとつ押せば請求コードごとの請求書が発行出来ていました(請求コードは全部で15個ほど
)
それが会社の経費削減でシステムが使えなくなり、代わりの方法を模索しています。
月の納品履歴の基データはCSVで出せるのですが、請求コードを軸にピポットテーブルのように「請求コードごとに、品名、規格、数量、単価、金額、備考、月の合計納品金額」を集計して、
請求コードごとに請求書を、出来たら差し込み印刷のように瞬時に出来る方法を探していました。
自分なりにネットで探しましたが、
・ピポットテーブルの「レポートフィルターページの表示」で請求先コードごとに抽出する→これだと用意した請求書フォーマットでなく新規のエクセルページに反映してしまう。結果を請求書フォーマットにコピペすればいいのかもしれませんが時間がかかる。。
・FILTER関数を用いて、請求書フォーマットに請求コードを入力して1枚ずつ印刷する
https://www.youtube.com/watch?v=UZ9_CxNwDs0
上記のyoutubeを参考にと思いましたが、出来たら1枚ずつ印刷でなく、一度印刷ボタンを押したらすべての請求コードごとに一斉印刷できる仕組みが良い
上記の方法が可能になる対応策を、ご教示いただけますと幸いです。
宜しくお願いいたします。
< 使用 Excel:Excel2021、使用 OS:Windows11 >
たたき台としては、こんな感じでしょうか 請求書シートの請求コードを入力するセルには、名前定義("請求コード")
Sub test() Dim t As ListObject Dim wsPrint As Worksheet Dim e
Set t = Worksheets("Data").ListObjects(1) Set wsPrint = Worksheets("請求書")
For Each e In WorksheetFunction.Unique(Range(t.Name & "[請求コード]")) wsPrint.Range("請求コード").Value = e wsPrint.PrintOut preview:=True Next
End Sub (マナ) 2023/10/23(月) 00:03:02
Option Explicit Sub main() Dim kAry(), dAry() zwSDelete srccsv_dummydata_make file_read kAry, dAry printws_pageset mprint kAry, dAry zwSDelete Erase kAry, dAry End Sub Private Sub zwSDelete() Dim i As Long If Not Evaluate("=ISREF(Sheet1!A1)") Then Sheets.Add.Name = "Sheet1" Application.DisplayAlerts = False For i = Worksheets.Count To 1 Step -1 If Worksheets(i).Name <> "Sheet1" Then Worksheets(i).Delete End If Next Application.DisplayAlerts = True End Sub Private Sub mprint(k(), w()) Dim i&, j&, a&, n&, y&, x&, mi(), old, inv_flg As Boolean Dim g#, ag#, p&, cnt&, s&, acnt& mi = Application.Index(w, 1, 0) With Worksheets("請求書") .Activate .UsedRange.Clear .Cells(1, 4) = "請 求 書" old = k(0) y = 5: x = 1: p = 1 For i = 0 To UBound(k) If k(i) <> old Then y = 5 If .Rows(y).Cells(1) <> "" Then .Cells(2, 9) = p With .UsedRange.SpecialCells(xlLastCell) .Offset(2, 0) = g .Offset(2, -1) = "総合計" End With .UsedRange.Columns.AutoFit .PrintPreview Intersect(.UsedRange, .Range(.Rows(y), .Rows(.Rows.Count))).Clear End If cnt = 0 p = 1 g = 0 End If For j = 2 To UBound(w, 1) If k(i) = w(j, 4) Then cnt = cnt + 1 acnt = acnt + 1 If cnt = 1 Then .Cells(2, 9) = p .Cells(2, 2) = w(j, 3) & " 様" .Cells(2, 5) = w(j, 5) & " 御中" .Cells(4, 1).Resize(, UBound(mi)) = mi 'w → 1,6-11 End If .Cells(y, x) = w(j, 1) g = g + w(j, 10) ag = ag + w(j, 10) For n = 1 To 11 .Cells(y, x + n - 1) = w(j, n) Next y = y + 1 If y > 22 Then s = j + 1 For a = s To UBound(w, 1) If k(i) = w(a, 4) Then inv_flg = True Exit For End If Next If Not inv_flg Then With .UsedRange.SpecialCells(xlLastCell) .Offset(2, 0) = g .Offset(2, -1) = "総合計" End With End If inv_flg = False .Cells(2, 9) = p p = p + 1 .UsedRange.Columns.AutoFit .PrintPreview y = 5 Intersect(.UsedRange, .Range(.Rows(y), .Rows(.Rows.Count))).Clear End If old = w(j, 4) End If Next Next .UsedRange.Clear End With Erase mi MsgBox "総額 = " & Format(ag, "#,#") & Chr(13) & "処理件数 = " & acnt End Sub Private Sub printws_pageset() '11*25 If Not Evaluate("=ISREF(請求書!A1)") Then Sheets.Add.Name = "請求書" With Worksheets("請求書").PageSetup .PaperSize = xlPaperA4 .Orientation = xlLandscape .PrintArea = "A1:K24" .Zoom = False .FitToPagesTall = False .FitToPagesWide = 1 End With End Sub Sub file_read(tkey() As Variant, w() As Variant) Dim i&, j&, ps$, fnm$, buf$, mi$, v, idx() Dim zA ps = ThisWorkbook.Path & "\" fnm = "DummyForTest.csv" Open ps & fnm For Input As #1 '見出し1件、読み飛ばし Line Input #1, mi v = Split(mi, ",") ReDim Preserve idx(i) idx(i) = v i = i + 1 Erase v Do If EOF(1) Then Exit Do Line Input #1, buf If CDbl(CDate(Left(buf, 10))) >= DateSerial(2023, 9, 1) And _ CDbl(CDate(Left(buf, 10))) <= DateSerial(2023, 9, 30) Then v = Split(buf, ",") ReDim Preserve idx(i) idx(i) = v Erase v i = i + 1 If i Mod 1280 = 0 Then DoEvents End If Loop Close Kill ps & fnm w = Application.Index(idx, 0, 0) Set zA = CreateObject("System.Collections.ArrayList") For i = 1 To UBound(w, 1) If Not zA.Contains(w(i, 4)) Then zA.Add w(i, 4) Next zA.Sort tkey = zA.toarray() Erase idx zA.Clear If Not Evaluate("=ISREF(data!A1)") Then Sheets.Add.Name = "data" With Worksheets("data") .UsedRange.Clear .Cells(1).Resize(UBound(w, 1), UBound(w, 2)) = w End With End Sub Private Sub srccsv_dummydata_make() Rnd -7 Dim x&, iMax&, i&, j&, mi(), idx(), w(), zd, tx$, ps$, fnm$ Dim sm(), tm(), rn& mi = Array("日付", "得意先コード", "得意先名", "請求コード", "請求先名", _ "品名", "規格", "数量", "単価", "金額", "備考") iMax = 2000 x = Int(iMax / 30) + 1 zd = DateSerial(2023, 8, 21) ps = ThisWorkbook.Path & "\" fnm = "DummyForTest.csv" Open ps & fnm For Output As #1 Print #1, Join(mi, ",") ReDim sm(1 To 25, 1 To 4) sm(1, 1) = "商品コード": sm(1, 2) = "商品名": sm(1, 3) = "単価": sm(1, 4) = "規格" sm(2, 1) = "A10001": sm(2, 2) = "かけうどん": sm(2, 3) = "300": sm(2, 4) = "和食" sm(3, 1) = "A10002": sm(3, 2) = "ハイカラうどん": sm(3, 3) = "500": sm(3, 4) = "和食" sm(4, 1) = "A10003": sm(4, 2) = "冷やしうどん": sm(4, 3) = "550": sm(4, 4) = "和食" sm(5, 1) = "A10004": sm(5, 2) = "かけそば": sm(5, 3) = "350": sm(5, 4) = "和食" sm(6, 1) = "A10005": sm(6, 2) = "ハイカラそば": sm(6, 3) = "450": sm(6, 4) = "和食" sm(7, 1) = "10006": sm(7, 2) = "ザルそば": sm(7, 3) = "900": sm(7, 4) = "和食" sm(8, 1) = "A10007": sm(8, 2) = "玉子丼": sm(8, 3) = "500": sm(8, 4) = "和食" sm(9, 1) = "A10008": sm(9, 2) = "天丼": sm(9, 3) = "1000": sm(9, 4) = "和食" sm(10, 1) = "A10009": sm(10, 2) = "木の葉丼": sm(10, 3) = "700": sm(10, 4) = "和食" sm(11, 1) = "A10010": sm(11, 2) = "おにぎり定食": sm(11, 3) = "600": sm(11, 4) = "和食" sm(12, 1) = "A10011": sm(12, 2) = "ラーメン": sm(12, 3) = "500": sm(12, 4) = "中華" sm(13, 1) = "A10012": sm(13, 2) = "ラーメン定食": sm(13, 3) = "800": sm(13, 4) = "中華" sm(14, 1) = "A10013": sm(14, 2) = "味噌ラーメン": sm(14, 3) = "600": sm(14, 4) = "中華" sm(15, 1) = "A10014": sm(15, 2) = "餃子": sm(15, 3) = "300": sm(15, 4) = "中華" sm(16, 1) = "A10015": sm(16, 2) = "カレーライス": sm(16, 3) = "500": sm(16, 4) = "洋食" sm(17, 1) = "A10016": sm(17, 2) = "カツカレー": sm(17, 3) = "800": sm(17, 4) = "洋食" sm(18, 1) = "A10017": sm(18, 2) = "ハンバーグ": sm(18, 3) = "600": sm(18, 4) = "洋食" sm(19, 1) = "A10018": sm(19, 2) = "ハムエッグ": sm(19, 3) = "450": sm(19, 4) = "洋食" sm(20, 1) = "A10019": sm(20, 2) = "日替わり定食": sm(20, 3) = "500": sm(20, 4) = "D" sm(21, 1) = "A10020": sm(21, 2) = "洋食定食": sm(21, 3) = "900": sm(21, 4) = "洋食" sm(22, 1) = "A10021": sm(22, 2) = "中華定食": sm(22, 3) = "800": sm(22, 4) = "中華" sm(23, 1) = "A10022": sm(23, 2) = "和定食": sm(23, 3) = "1000": sm(23, 4) = "和食" sm(24, 1) = "A10023": sm(24, 2) = "サンマ定食": sm(24, 3) = "600": sm(24, 4) = "和食" sm(25, 1) = "A10024": sm(25, 2) = "出汁まき定食": sm(25, 3) = "500": sm(25, 4) = "和食" '* ReDim tm(1 To 20, 1 To 4) tm(1, 1) = "顧客コード": tm(1, 2) = "顧客名": tm(1, 3) = "請求コード": tm(1, 4) = "請求先名" tm(2, 1) = "10001": tm(2, 2) = "X病院": tm(2, 3) = "50001": tm(2, 4) = "x精神科" tm(3, 1) = "10001": tm(3, 2) = "X病院": tm(3, 3) = "50002": tm(3, 4) = "x外科" tm(4, 1) = "10002": tm(4, 2) = "八百屋": tm(4, 3) = "50003": tm(4, 4) = "しぶやスーパ" tm(5, 1) = "10002": tm(5, 2) = "八百屋": tm(5, 3) = "50004": tm(5, 4) = "メグロや" tm(6, 1) = "10002": tm(6, 2) = "八百屋": tm(6, 3) = "50005": tm(6, 4) = "歌舞伎店" tm(7, 1) = "10002": tm(7, 2) = "八百屋": tm(7, 3) = "50006": tm(7, 4) = "本所支店" tm(8, 1) = "10003": tm(8, 2) = "床屋": tm(8, 3) = "50007": tm(8, 4) = "床屋" tm(9, 1) = "10004": tm(9, 2) = "寝具屋": tm(9, 3) = "50008": tm(9, 4) = "ふとんや" tm(10, 1) = "10004": tm(10, 2) = "寝具屋": tm(10, 3) = "50009": tm(10, 4) = "べっど" tm(11, 1) = "10004": tm(11, 2) = "寝具屋": tm(11, 3) = "50010": tm(11, 4) = "まくら" tm(12, 1) = "10004": tm(12, 2) = "寝具屋": tm(12, 3) = "50011": tm(12, 4) = "もうふ" tm(13, 1) = "10005": tm(13, 2) = "電気屋本社": tm(13, 3) = "50012": tm(13, 4) = "第1支社" tm(14, 1) = "10005": tm(14, 2) = "電気屋本社": tm(14, 3) = "50013": tm(14, 4) = "第2支社" tm(15, 1) = "10005": tm(15, 2) = "電気屋本社": tm(15, 3) = "50014": tm(15, 4) = "第3支社" tm(16, 1) = "10005": tm(16, 2) = "電気屋本社": tm(16, 3) = "50015": tm(16, 4) = "第4支社" tm(17, 1) = "10005": tm(17, 2) = "電気屋本社": tm(17, 3) = "50016": tm(17, 4) = "第5支社" tm(18, 1) = "10005": tm(18, 2) = "電気屋本社": tm(18, 3) = "50017": tm(18, 4) = "第6支社" tm(19, 1) = "10005": tm(19, 2) = "電気屋本社": tm(19, 3) = "50018": tm(19, 4) = "第7支社" tm(20, 1) = "10005": tm(20, 2) = "電気屋本社": tm(20, 3) = "50019": tm(20, 4) = "第8支社" Do For j = 1 To Int((x - 1 + 1) * Rnd + 1) i = i + 1 If i Mod 1280 = 0 Then DoEvents
If i > iMax Then Exit Do ReDim w(1 To UBound(mi) + 1) rn = Int((UBound(tm) - 2 + 1) * Rnd + 2) w(1) = zd w(2) = tm(rn, 1) w(3) = tm(rn, 2) w(4) = tm(rn, 3) w(5) = tm(rn, 4) rn = Int((UBound(sm) - 2 + 1) * Rnd + 2) w(6) = sm(rn, 2) w(7) = sm(rn, 4) w(8) = CStr(sm(rn, 3)) w(9) = CStr(Int((10 - 1 + 1) * Rnd + 1)) w(10) = CStr(CLng(w(8)) * CLng(w(9))) w(11) = Empty Print #1, Join(w, ",") Next zd = zd + 1 Loop Close Erase mi, idx, w, sm, tm End Sub
(隠居Z) 2023/11/12(日) 08:40:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.