25
1 見積書請求書作成 V2.0 メニュー(表紙) このメニューにあるボタンのマクロはシートへの移動マクロです。 このファイルを」利用する場合には、シートの保護を解除しないでください。 データの削除や移動はしないでください。ファイルが壊れます。 見積請求作成 平成 25 7 作業の流れは 1 見積書の作成 「見積書」ボタンを押し、必要な項目を入力し、印刷、「新規登録」ボタン。 data 読込」ボタンで作成済みデータを読みこめます。 登録修正番号の数値の「DATA 見積」のデータです。 「次」「前」ボタンでも、直接数字を打ち込んでも良いです。 読み込んだデータを修正して保存する場合は「修正登録」ボタン。

メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

1

見積書請求書作成 V2.0

メニュー(表紙)

このメニューにあるボタンのマクロはシートへの移動マクロです。

このファイルを」利用する場合には、シートの保護を解除しないでください。

データの削除や移動はしないでください。ファイルが壊れます。

見積請求作成 平成 25 年 7 月

作業の流れは

1 見積書の作成

「見積書」ボタンを押し、必要な項目を入力し、印刷、「新規登録」ボタン。

「data 読込」ボタンで作成済みデータを読みこめます。

登録修正番号の数値の「DATA 見積」のデータです。

「次」「前」ボタンでも、直接数字を打ち込んでも良いです。

読み込んだデータを修正して保存する場合は「修正登録」ボタン。

Page 2: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

2

再利用して保存する場合は「新規登録」ボタン。

1000 件まで登録できます。

読み込んだ見積もりデータを、請求書に送るときは「請求へ複写」ボタン。

2 請求書の作成

「請求書」ボタンを押し、必要な項目を入力し、印刷、「新規登録」ボタン。

「data 読込」ボタンで作成済みデータを読みこめます。

登録修正番号の数値の「DATA 請求」のデータです。

「次」「前」ボタンでも、直接数字を打ち込んでも良いです。

読み込んだデータを修正して保存する場合は「修正登録」ボタン。

再利用して保存する場合は「新規登録」ボタン。

1000 件まで登録できます。

3 書類作成画面ではクリアは 2 種類あります。

全内容をクリアするものと工事名称金額等をクリアするもの。

セル B3 G5 C7 B14

お客様名 年月日 工事名 摘要の一行目

最低限 上記セルに 入力がなければ 保存はしません。

一度、登録したデータの削除はできません。

年度別に利用した場合の集計のために、間違ったデータを計算させないため

一部消去のマクロは準備しています。

小計と合計

小計 が必要な場合は、空白行を設け、その摘要欄に金額等を入力します。

金額欄には入力・表示はできません。

このファイルのデータは 1000 件まで登録保存できますが、年単位で利用するほうが良いでしょう。

古いものはそのまま残しておいて、新規に名前をつけて保存します。2 本の同じファイルができます。

新しい名前のファイルの、シート「DATA 見積」とシート「DATA 請求」の全データを消去してから利用します。

集計台帳は請求書の発行一覧表を作成するものです。

転記と集計のあと、必要に応じて印刷します。その後、解除とクリアをします。

データが 1 件でもあれば、実行できます。(意味はないですね)

月別の集計ですので、数ヶ月間データが蓄積されると意味が出てきます。

ここでの作業の前にファイル保存をしてください。

ここでの作業でファイルがおかしくなったら上書き保存はしないこと。

そのファイルは保存しないで終了、前のファイルを再度読み込みましょう。

集計は2度はしないこと

解除をしないうちにクリアをしないこと

最初はメニューのマクロから

Page 3: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

3

このファイルのシートは 6 枚で非表示のシートはありません。

Private Sub CommandButton1_Click()

Sheets("集計表").Select

End Sub

請求データを一覧集計します

Private Sub CommandButton2_Click()

Sheets("DATA 見積").Select

End Sub

見積のデータを保存します

Private Sub CommandButton3_Click()

Sheets("見積書").Select

End Sub 見積書です

Private Sub CommandButton6_Click()

Sheets("請求書").Select

End Sub 請求書です

Private Sub CommandButton7_Click()

Sheets("DATA 請求").Select

End Sub 請求データを保存します

Private Sub CommandButton9_Click()

Sheets("説明書").Select

End Sub 説明書です

Page 4: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

4

見積書について

Page 5: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

5

セルの黄色が入力できるところ、新規登録や修正登録で保存できるデータです。

セルB3 お得意先名(敬称まで入力のこと)

セルG5 年月日

セルG11 消費税率(これは保存しません)。

摘要欄は 20 行で、金額欄には計算式があります。

セルG14からセルG33まで、数量*単価の式

ここでのデータは「DATA見積」に保存します。

Sub 書込見積新規()

' データ転記まえに必要最低限の入力があるかどうかチェック

Range("G1").Select

ActiveCell.FormulaR1C1 = "=DATA 見積!R[1]C[-6]+1"

Range("G2").Select

If MsgBox(prompt:="印刷はしましたか。登録したらデータは消えますよ。いいですか(^。^)。", _

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

Application.ScreenUpdating = False

Dim message As String

'チェック

If Range("B3").Value = "" Then

message = MsgBox("お得意先名が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("G5").Value = "" Then

message = MsgBox("日付が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("C7").Value = "" Then

message = MsgBox("工事名が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("B14").Value = "" Then

message = MsgBox("摘要が入力されていません", vbYes, "入力確認")

Exit Sub

End If

'すべて入力されていれば登録します。確認。

If MsgBox(prompt:="データの書き込みです。いいですか(^。^)。", _

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

Page 6: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

6

End If

'見積書の新規保存です シート DATA 見積 の9行目以下に保存します。

Application.ScreenUpdating = False

Sheets("DATA 見積").Unprotect

Dim 位置 As Integer

位置 = Sheets("見積書").Cells(1, 7).Value + 8 'セル C1 書込行の位置決定

If MsgBox(prompt:="DATA 見積への " & 位置 - 8 & " 行目への保存です。メモをお勧めします。(^。^)。", _

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

' Application.ScreenUpdating = False

Sheets("DATA 見積").Activate '作業シート アクテイブに

Range("B2:DE2").Select '登録データ範囲を指定

Selection.Copy

Range("B" & 位置).Select '値のみ貼り付け

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Range("A7").Select

Application.CutCopyMode = False

Sheets("DATA 見積").Protect

Application.ScreenUpdating = True

MsgBox "転記終了"

Sheets("見積書").Select

クリア全部

Range("A2").Select

End Sub

' 詳細な説明は次のページから。

見積データの登録について

「見積書」のデータのセルの黄色の入力部分は「データ見積」の2行目に入るように式を設定しています。

1 行目と2行目と 8 行目は非表示にしています。

1 行目と 8 行目は分かりやすいように項目名と番号を、実際のデータはセルB2からセルDE2まで。

Page 7: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

7

「見積書」のセルG1に表示される数字がデータの登録整理番号となります。

「DATA見積」に「見積書」のデータは 9 行目から順番に登録するように設定しています。

新規登録の位置は 次のマクロでセルG1には =DATA 見積!A2+1 という式が入力されます。

DATA 見積!A2 には =COUNT(B9:B1008) の式があるので、いまあるデータの次の番号になります。

Range("G1").Select

ActiveCell.FormulaR1C1 = "=DATA 見積!R[1]C[-6]+1"

Range("G2").Select

データの保存のマクロです。

2 行目のデータをすでにあるデータの次の行に値のみ貼付けをします。

Dim 位置 As Integer

位置 = Sheets("見積書").Cells(1, 7).Value + 8 'セル C1 書込行の位置決定

セルG1の数字に8を加算した数値が登録される行になります。

Sheets("DATA 見積").Activate '作業シート アクテイブに

Range("B2:DE2").Select '登録データ範囲を指定

Selection.Copy

Range("B" & 位置).Select '値のみ貼り付け

Page 8: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

8

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Range("A7").Select

Application.CutCopyMode = False

全体のマクロは次のとおりです。

元々のマクロは黒文字で、それに追加した説明は青色とします。

マクロの中で、頭に ' がある行は注釈文字列になり、マクロの実行には影響しません。

Sub 書込見積新規()

' データ転記まえに必要最低限の入力があるかどうかチェック

Range("G1").Select

ActiveCell.FormulaR1C1 = "=DATA 見積!R[1]C[-6]+1"

Range("G2").Select

If MsgBox(prompt:="印刷はしましたか。登録したらデータは消えますよ。いいですか(^。^)。", _

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

ここのIFからEnd IF は最初の確認です。

キャンセルすれば、以下の作業を実行しないでこのマクロは終了です。

Application.ScreenUpdating = False

画面の変化を表示をさせないようにします。

Dim message As String

変数の宣言です

'チェック

該当セルが空白ならば、作業は終了です。

If Range("B3").Value = "" Then

message = MsgBox("お得意先名が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("G5").Value = "" Then

message = MsgBox("日付が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("C7").Value = "" Then

message = MsgBox("工事名が入力されていません", vbYes, "入力確認")

Exit Sub

End If

Page 9: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

9

If Range("B14").Value = "" Then

message = MsgBox("摘要が入力されていません", vbYes, "入力確認")

Exit Sub

End If

'すべて入力されていれば登録します。確認。

セル B3 G5 C7 B14

お客様名 年月日 工事名 摘要の一行目

最低限 上記セルに 入力がなければ 保存はしません。以下の作業はしません。

If MsgBox(prompt:="データの書き込みです。いいですか(^。^)。", _

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

ここのIFからEnd IF は 2 度目の確認です。

キャンセルすれば、以下の作業を実行しないでこのマクロは終了です。

2 度の確認作業を通過したらデータの保存です。

''見積書の新規保存です シート DATA 見積 の9行目以下に保存します。

Application.ScreenUpdating = False

画面表示の変化を表示させない

Sheets("DATA 見積").Unprotect

シートの保護を解除する

Dim 位置 As Integer

変数の宣言です

位置 = Sheets("見積書").Cells(1, 7).Value + 8 'セル C1 書込行の位置決定

If MsgBox(prompt:="DATA 見積への " & 位置 - 8 & " 行目への保存です。メモをお勧めします。(^。^)。

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

ここのIFからEnd IF は3度目のの確認です。

キャンセルすれば、以下の作業を実行しないでこのマクロは終了です。

くどいですが、2度ではなく 3 度目の確認作業を通過したらデータの保存です。

Application.ScreenUpdating = False

Sheets("DATA 見積").Activate '作業シート アクテイブに

Range("B2:DE2").Select '登録データ範囲を指定

Selection.Copy

Range("B" & 位置).Select '値のみ貼り付け

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

: =False, Transpose:=False

Range("A7").Select

データが下の行に貼付けられました。

Application.CutCopyMode = False

Page 10: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

10

Sheets("DATA 見積").Protect

シートの保護をする

Application.ScreenUpdating = True

MsgBox "転記終了"

Sheets("見積書").Select

クリア全部

サブマクロの実行になります

Range("A2").Select

End Sub

次は{クリア全部}の説明になります

見積データのクリアについて

元々のマクロは黒文字で、それに追加した説明は青色とします。

マクロの中で、頭に ' がある行は注釈文字列になり、マクロの実行には影響しません。

Sub クリア全部()

'' データを消去する'

Application.ScreenUpdating = False

Range("A2").Select

次からの 5 行は今は利用していません。

'Dim ans As String

'ans = MsgBox("本当に消去していいですか?", vbOKCancel, "消去の確認")

'If ans = vbCancel Then

'Exit Sub

'End If

ActiveSheet.Unprotect

シート保護の解除

入力した黄色のセルの部分をクリアするマクロです。修正登録番号はクリアせずに残します。

'修正登録番号

' Range("G1").Select

' Selection.ClearContents

Page 11: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

11

'年月日

Range("G5").Select

Selection.ClearContents

'得意先

Range("B3").Select

Selection.ClearContents

'取引方法 有効期限

Range("C8:C9").Select

Selection.ClearContents

'工事名

Range("C7:D7").Select

Selection.ClearContents

'摘要

Range("B14:F33").Select

Selection.ClearContents

'備考

Range("H14:H33").Select

Selection.ClearContents

'端数調整

Range("H12").Select

Selection.ClearContents

Range("A2").Select

ActiveSheet.Protect

End Sub

'ついでに次のマクロまで。得意先などは残して工事内容金額をクリアするマクロです。

Sub クリア工事()

'' データを消去する

Application.ScreenUpdating = False

Range("A2").Select

ActiveSheet.Unprotect

シートの保護解除

'工事名

Range("C7:D7").Select

Selection.ClearContents

'摘要

Range("B14:F33").Select

Selection.ClearContents

'備考

Page 12: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

12

Range("H14:H33").Select

Selection.ClearContents

'端数調整

Range("H12").Select

Selection.ClearContents

Range("A2").Select

ActiveSheet.Protect

シートの保護設定

End Sub

新規登録は整理番号を新しく採番しますが、修正登録は セルG1 の数字をそのまま利用して登録します。

マクロの内容は新規登録と全く同じになります。

Sub 書込見積修正()

' データ転記まえに必要最低限の入力があるかどうかチェック

If MsgBox(prompt:="印刷はしましたか。登録したらデータは消えますよ。いいですか(^。^)。", _

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

Application.ScreenUpdating = False

Dim message As String

'チェック

If Range("B3").Value = "" Then

message = MsgBox("お得意先名が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("G5").Value = "" Then

message = MsgBox("日付が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("C7").Value = "" Then

message = MsgBox("工事名が入力されていません", vbYes, "入力確認")

Exit Sub

End If

If Range("B14").Value = "" Then

message = MsgBox("摘要が入力されていません", vbYes, "入力確認")

Exit Sub

End If

'すべて入力されていれば登録します。確認。

If MsgBox(prompt:="データの書き込みです。いいですか(^。^)。", _

Page 13: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

13

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

''見積書の修正保存です シート DATA 見積 の9行目以下に保存します。

' Application.ScreenUpdating = False

Sheets("DATA 見積").Unprotect

Dim 位置 As Integer

位置 = Sheets("見積書").Cells(1, 7).Value + 8 'セル C1 書込行の位置決定

If MsgBox(prompt:="DATA 見積への " & 位置 - 8 & " 行目への保存です。メモをお勧めします。(^。^)。", _

Title:="間違いないですか。(^。^)", Buttons:=vbOKCancel) = vbCancel Then

Exit Sub

End If

' Application.ScreenUpdating = False

Sheets("DATA 見積").Activate '作業シート アクテイブに

Range("B2:DE2").Select '登録データ範囲を指定

Selection.Copy

Range("B" & 位置).Select '値のみ貼り付け

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

: =False, Transpose:=False

Range("A7").Select

Application.CutCopyMode = False

Sheets("DATA 見積").Protect

Application.ScreenUpdating = True

MsgBox "転記終了"

Sheets("見積書").Select

クリア全部

Range("A2").Select

End Sub

次はその他のマクロの説明になります

見積データの読込について

Page 14: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

14

元々のマクロは黒文字で、それに追加した説明は青色とします。

マクロの中で、頭に ' がある行は注釈文字列になり、マクロの実行には影響しません。

保存してあるデータを画面上に読み込みます。

Sub 読込見積()

ActiveSheet.Unprotect

Dim 位置 As Integer

Dim I As Integer

位置 = Sheets("見積書").Cells(1, 7).Value + 8 'セル G1 読込行の位置決定

読み込むデータは セルG1の修正登録番号 に 8 を加算した行のデータになります。

整理番号 得意先 年月日 工事名 取引方法 有効期限 金額 端数調整

B列 C列 D列 E列 F列 G列 H列 I列

2 3 4 5 6 7 8 9

Sheets("見積書").Cells(3, 2).Value = Sheets("DATA 見積").Cells(位置, 3).Value

Sheets("見積書").Cells(5, 7).Value = Sheets("DATA 見積").Cells(位置, 4).Value

Sheets("見積書").Cells(7, 3).Value = Sheets("DATA 見積").Cells(位置, 5).Value

Sheets("見積書").Cells(8, 3).Value = Sheets("DATA 見積").Cells(位置, 6).Value

Sheets("見積書").Cells(9, 3).Value = Sheets("DATA 見積").Cells(位置, 7).Value

Sheets("見積書").Cells(12, 8).Value = Sheets("DATA 見積").Cells(位置, 9).Value

摘要欄は 20 行分あり、B列、D列、E列、F列分が「DATA見積」のJ列から 4 個分づつCK列までの 80 個のセル

に格納されているので、それを順次、「見積書」に戻します。

内 訳1 数 量 単位 単 価

J列 K列 L列 M列

10 11 12 13

内 訳2 数 量 単位 単 価

N列 O列 P列 Q列

14 15 16 17

Page 15: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

15

内 訳 20 数 量 単位 単 価

CH列 CI列 CJ列 CK列

86 87 88 89

For I = 1 To 20 '摘要 20 行分

Sheets("見積書").Cells(14 + (I - 1), 2).Value = Sheets("DATA 見積").Cells(位置, 10 + (I - 1) * 4).Value

Sheets("見積書").Cells(14 + (I - 1), 4).Value = Sheets("DATA 見積").Cells(位置, 11 + (I - 1) * 4).Value

Sheets("見積書").Cells(14 + (I - 1), 5).Value = Sheets("DATA 見積").Cells(位置, 12 + (I - 1) * 4).Value

Sheets("見積書").Cells(14 + (I - 1), 6).Value = Sheets("DATA 見積").Cells(位置, 13 + (I - 1) * 4).Value

'CL 列の後に追加した備考欄の分

Sheets("見積書").Cells(14 + (I - 1), 8).Value = Sheets("DATA 見積").Cells(位置, 89 + I).Value

Next I

CL列からから 20 個分には「見積書「のH列のデータが入っています。これは、このファイルを作成する

前のバージョンの{ 見積請求管理 v1.1}を改変して、このファイルを作成したからで、若干整合性には欠けます

が、「DATA見積」の 1 行目、2 行目のシート変更を簡単にするための方便です。

CL 列の後に追加した備考欄の分として、最後の一行分のマクロが前の部分と違います。

ActiveSheet.Protect

Range("A2").Select

Sheets("見積書").Select

End Sub

次のマクロはデータを次々に読み込むマクロです。

{ 見積請求管理 v1.1}では、読込にも一々確認を必要としました。

今回にはありません。

セルG1に応じたデータが呼び込まれます。

''修正登録番号 G1 に 1 を加算し データを読み込む

'Sub 表示_次 data 見積()

Range("G1").Value = Range("G1").Value + 1

読込見積

End Sub

'修正登録番号 G1 が 1 ならば前はない

'修正登録番号 G1 に 1 を減算し データを読み込む

Sub 表示_前 data 見積()

If Range("G1").Value = 1 Then

Exit Sub

End If

Range("G1").Value = Range("G1").Value - 1

Page 16: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

16

読込見積

End Sub

画面の 1 枚印刷するマクロです。

'印刷用マクロ

Sub 印刷_表示頁()

'選択画面のシートを 1 枚印刷する

Application.ScreenUpdating = False

ActiveWindow.SelectedSheets.PrintOut Copies:=1

Range("A4").Select

End Sub

見積書のデータを利用して請求書を作成する。

このファイルを作成の目的が、このマクロになります。

「見積書」のデータを「請求書」に転記(送る)ものです。

データのの位置関係すべて同じです。

Sub 複写()

Dim I As Integer

Sheets("請求書").Cells(3, 2).Value = Sheets("見積書").Cells(3, 2).Value セルB3 得意先様

Sheets("請求書").Cells(5, 7).Value = Sheets("見積書").Cells(5, 7).Value セルG5 年月日

Sheets("請求書").Cells(7, 3).Value = Sheets("見積書").Cells(7, 3).Value セルC7 工事名称

Sheets("請求書").Cells(8, 3).Value = Sheets("見積書").Cells(8, 3).Value セルC8 取引方法

Sheets("請求書").Cells(9, 3).Value = Sheets("見積書").Cells(9, 3).Value セルC9 有効期限

Sheets("請求書").Cells(12, 8).Value = Sheets("見積書").Cells(12, 8).Value セルH12 端数調整

For I = 1 To 20 '摘要 20 行分

Sheets("請求書").Cells(14 + (I - 1), 2).Value = Sheets("見積書").Cells(14 + (I - 1), 2).Value B列摘要

Sheets("請求書").Cells(14 + (I - 1), 4).Value = Sheets("見積書").Cells(14 + (I - 1), 4).Value D列数量

Sheets("請求書").Cells(14 + (I - 1), 5).Value = Sheets("見積書").Cells(14 + (I - 1), 5).Value E列単位

Sheets("請求書").Cells(14 + (I - 1), 6).Value = Sheets("見積書").Cells(14 + (I - 1), 6).Value F列単価

Sheets("請求書").Cells(14 + (I - 1), 8).Value = Sheets("見積書").Cells(14 + (I - 1), 8).Value G列備考

Next I

Sheets("請求書").Select

End Sub

次は請求書の説明になります

請求書について

Page 17: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

17

見積書と請求書はデータ関係は全て同じ位置で

いくつかの文言が変わっているだけです。

「見積書」のデータは「DATA見積」に登録保存されます

「請求書」のデータは「DATA請求」に登録保存されます

Page 18: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

18

「請求書」のマクロは「見積書」のマクロとほぼ同じです。

見積 という部分を 請求 と変えることでそのまま利用できますので、説明は省略します。

ここではシートの説明。

黄色のセルの部分は自由に入力できる部分で、このデータは登録保存できるものです。

青色のセルも入力可能です。事業所名称等を入力します。

入力した金額の合計はセルG24になります。セルG24の式 =SUM(G14:G33)

消費税の額はセル11になります。 セルH11の式 =(G34*G11) 消費税の額

税率はセルG11の表示形式は下のとおり。税率がアップしてもここを変更すれば使えます。

実際には少数があることになります。

税込請求金額はセルC11になります。セルC11の式 =(G34+H11+H12)

セルH12 に調整額の欄、値引きの欄を設けました。マイナスで入力することで値引き額を表示できま

す。

次は DATA 見積・DATA 請求の説明になります

DATA見積、DATA請求のマクロについて

Page 19: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

19

「DATA 見積」

元々のマクロは黒文字で、それに追加した説明は青色とします。

マクロの中で、頭に ' がある行は注釈文字列になり、マクロの実行には影響しません。

Private Sub CommandButton3_Click()

クリア一行 1

End Sub

Private Sub CommandButton2_Click()

クリア DATA

End Sub

元々のマクロは黒文字で、それに追加した説明は青色とします。

マクロの中で、頭に ' がある行は注釈文字列になり、マクロの実行には影響しません。

Sub クリア DATA()

'' Macro1 Macro

Application.ScreenUpdating = False

Dim ans As String

MsgBox "全部のデータの消去です。よく考えて実行しましょう。"

ans = MsgBox("すべてのデータを本当に消去していいですか?", vbOKCancel, "消去の確認")

If ans = vbCancel Then

Exit Sub

End If

ActiveSheet.Unprotect

Range("B9:CK1008").Select

Selection.ClearContents

Range("A4").Select

Page 20: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

20

ActiveSheet.Protect

End Sub

'「DATA見積」用

Sub クリア一行 1()

'カーソルのある行のデータを消去します。

Application.ScreenUpdating = False

Dim R1 As Integer

Dim C1 As Integer

Dim Sn As String

R1 = ActiveCell.Row '現在のセルの位置の行番号

C1 = ActiveCell.Column '現在のセルの位置の列番号

Sn = ActiveSheet.Name '現在のシートの名前

下の5行はプログラム作成時点で、変数の確認するためのチェック用のもの。

完成後は削除しても良いのですが、削除しないで注釈文字列にしています。

' MsgBox R1

' MsgBox "B" & R1

' MsgBox "D" & R1 & ":I" & R1

' MsgBox Sn

' Stop

注意のメッセージの表示

MsgBox "データの消去には、十分注意が必要です。"

IF EndIf が 2 重になっています。

If R1 < 9 Or Sn <> "DATA 見積" Then '8 行以下やシート名のチェック

MsgBox "この行のデータは消去できません", 0 + 48, "確認"

Else

MsgBox R1 - 8 & " 番目のデータの消去です。"

Dim ans As String

ans = MsgBox("本当に消去していいですか?", vbOKCancel, "消去の確認")

If ans = vbOK Then

ActiveSheet.Unprotect 'F 列から

Range("F" & R1 & ":CK" & R1) = ""

ActiveSheet.Protect

Cells(R1, 1).Select 'カーソルを A 列に設置

End If

End If

End Sub

「DATA請求」用

Sub クリア一行 2()

'カーソルのある行のデータを消去します。

Dim R1 As Integer

Page 21: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

21

Dim C1 As Integer

Dim Sn As String

R1 = ActiveCell.Row '現在のセルの位置の行番号

C1 = ActiveCell.Column '現在のセルの位置の列番号

Sn = ActiveSheet.Name '現在のシートの名前

下の5行はプログラム作成時点で、変数の確認するためのチェック用のもの。

完成後は削除しても良いのですが、削除しないで注釈文字列にしています。

' MsgBox R1

' MsgBox "B" & R1

' MsgBox "D" & R1 & ":I" & R1

' MsgBox Sn

' Stop

MsgBox "データの消去には、十分注意が必要です。"

If R1 < 9 Or Sn <> "DATA 請求" Then '8 行以下やシート名のチェック

MsgBox "この行のデータは消去できません", 0 + 48, "確認"

Else

MsgBox R1 - 8 & " 番目のデータの消去です。"

Dim ans As String

ans = MsgBox("本当に消去していいですか?", vbOKCancel, "消去の確認")

If ans = vbOK Then

ActiveSheet.Unprotect 'F 列から

Range("F" & R1 & ":CK" & R1) = ""

ActiveSheet.Protect

Cells(R1, 1).Select 'カーソルを A 列に設置

End If

End If

End Sub

次は請求金額一覧の集計の説明になります

Page 22: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

22

請求金額一覧集計について

NO9

元々のマクロは黒文字で、それに追加した説明は青色とします。

マクロの中で、頭に ' がある行は注釈文字列になり、マクロの実行には影響しません。

左側のボタンから順次、実行します。

集計台帳は請求書の発行一覧表を作成するものです。

転記と集計のあと、必要に応じて印刷します。その後、解除とクリアをします。

データが 1 件でもあれば、実行できます。(意味はないですね)

月別の集計ですので、数ヶ月間データが蓄積されると意味が出てきます。

ここでの作業の前にファイル保存をしてください。

ここでの作業でファイルがおかしくなったら上書き保存はしないこと。

そのファイルは保存しないで終了、前のファイルを再度読み込みましょう。

集計は2度はしないこと

解除をしないうちにクリアをしないこと

ファイルが壊れる確率は高いですぞ。!(^^)!

'年間一覧表のマクロ

'Sub 年間転記()

' データの有無を確認

請求書のデータの有無を確認します。

「DATA請求」の セルB9 に数値があれば 1 行はデータがあることになります。

If Sheets("DATA 請求").Cells(9, 2).Value = 0 Then

MsgBox "データがありません。"

Exit Sub

Page 23: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

23

End If

データがあれば作業が続きます。無い場合は以上で作業は終了です。

Application.ScreenUpdating = False

'DATA 請求から 年月日、伝票№ 、得意先、 金額、工事名を転記

ActiveSheet.Unprotect

作業の前にシートの保護を解除します。シート「集計表」ですね。

Sheets("DATA 請求").Select

Range("B9:E1008").Select B列・整理番号 C列・得意先 D列・年月日 E列・工事名

Selection.Copy 選択範囲をコピー

Sheets("集計表").Select

Range("C6").Select セルC6を先頭にして、値のみを貼り付ける(C列からF列までに)

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

: =False, Transpose:=False

Application.CutCopyMode = False コピーモードの解除

Sheets("DATA 請求").Select

Range("H9:H1008").Select H列・工事金額

Selection.Copy 選択範囲をコピー

Sheets("集計表").Select

Range("G6").Select セルG6を先頭にして、値のみを貼り付ける(G列)

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

: =False, Transpose:=False

Application.CutCopyMode = False コピーモードの解除

Range("A5").Select

Sheets("DATA 請求").Select

Range("A5").Select

'念のため並べ替え 年月日

Sheets("集計表").Select

Range("C5:G1005").Select

Selection.Sort Key1:=Range("E6"), Order1:=xlAscending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _

: =xlPinYin, DataOption1:=xlSortNormal

この並べ替えはエクセル2003で作成のものです。

'B6の式をデータ分だけコピー =MONTH(E6)

B列にE列の年月日から月のみを取り出します。

Dim su As Integer

変数宣言

su = Range("B2").Value 'セルB2にデータ数のカウント式設置 =COUNTA(E:E)

データの数だけオートフィルコピーするためです

Range("B6").Select

Selection.Copy

Page 24: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

24

Range("B7:B" & su + 4).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Range("A2").Select

ActiveSheet.Protect

End Sub

'

'Sub 年間集計()

' データが無い場合には作業が終了します。

If Cells(6, 3).Value = 0 Then

MsgBox "データがありません。"

Exit Sub

End If

データが有る場合には、カーソルをB5において ここを基準にして 6 列目の金額の月別小計を計算します

ActiveSheet.Unprotect

Range("B5").Select

Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(6), _

Replace:=True, PageBreaks:=False, SummaryBelowData:=True

Range("A2").Select

ActiveSheet.Protect

End Sub

'小計の設定画面です

'

小計の設定画面の中のすべて削除を実行すると、下のマクロになります。

Page 25: メニュー 表紙skkobayan.main.jp/JON/syosai/seikyu/seikyuv20.pdfSheets("DATA 見積").Activate '作業シート アクテイブに Range("B2:DE2").Select '登録データ範囲を指定

25

Sub 年間解除()

' If Cells(6, 4).Value = 0 Then

MsgBox "データがありません。"

Exit Sub

End If

ActiveSheet.Unprotect

Range("B5").Select

Selection.RemoveSubtotal

Range("A2").Select

ActiveSheet.Protect

End Sub

セルB6にはコピー元の式があります。ここを残して

B6からI1005までの範囲をクリアするものです。

Sub 年間クリア()

' If Cells(6, 3).Value = 0 Then

MsgBox "データがありません。"

Exit Sub

End If

ActiveSheet.Unprotect

Range("B7:I1005").Select

Selection.ClearContents

Range("C6:G6").Select

Selection.ClearContents

Range("A2").Select

ActiveSheet.Protect

End Sub

B6の式をコピー方式ではない別の方法でやれば、ここは1回で済みます。

Range("B6:I1005").Select

Selection.ClearContents

ここだけに限らず、同じ作業をするいくつかの方法があります。したがってマクロも色々な記述方法があります。

このファイルの例で言えば、

6 ページの請求へ複写のマクロは式で入力していますが、昔の私ならば、セルをコピーして値のみ貼り付けで

データの数だけ実行して下のようになっていたと思います。

以上でファイルの説明は終了です。

どんな形の見積書や請求書でもこの応用で作成できるのではないでしょうか