1424951484 納品書出力のエクセルマクロをお願いいたします。


詳しくは画像をご確認ください。


シートは2つあります。


大きな流れでは、

出荷表(★)をもとにその情報を納品書にコピペします。

それを印刷。

次の顧客にうつって同様のことを繰り返します。

同じお客様がたくさんかわれたときのみ、少しややこしいですが、

あとはそうでもありません。

どうかよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2015/02/26 20:51:24
  • 終了:2015/02/27 18:57:05

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4548ベストアンサー獲得回数18972015/02/27 14:06:59

ポイント400pt

マクロを書いてみました。
process_slip を実行すると、「★」シートから「納品書」シートにデータをコピーして印刷します。

Const MAX_ROW = 10000           ' 突っ走るのが怖いので


Sub clear_slip()
    Set s_slip = Worksheets("納品書")
    s_slip.Range("B19:H35").ClearContents
End Sub

Sub make_slip(r1, r2)
    Set s_list = Worksheets("★")
    Set s_slip = Worksheets("納品書")

    s_slip.Cells(4, 2).Value = s_list.Cells(r1, 6).Value        ' 氏名 ← F列       ※ここを追加しました
    s_slip.Cells(6, 4).Value = s_list.Cells(r1, 8).Value        ' 〒 ← H列
    s_slip.Cells(7, 2).Value = s_list.Cells(r1, 9).Value        ' 住所 ← I列
    s_slip.Cells(13, 3).Value = s_list.Cells(r1, 10).Value      ' 電話番号 ← J列
    r_to = 19
    s1 = s2 = s3 = 0
    For r = r1 To r2
        s_slip.Cells(r_to, 2).Value = s_list.Cells(r, 1).Value      ' 商品名 ← A列
        s_slip.Cells(r_to, 8).Value = s_list.Cells(r, 3).Value      ' 金額 ← C列
        s1 = s1 + s_list.Cells(r, 3).Value      ' 金額 ← C列
        s2 = s2 + s_list.Cells(r, 4).Value      ' 送料 ← D列
        s3 = s3 + s_list.Cells(r, 5).Value      ' 合計 ← E列
        r_to = r_to + 1
    Next
    s_slip.Cells(36, 8).Value = s1
    s_slip.Cells(38, 8).Value = s2
    s_slip.Cells(39, 8).Value = s3
End Sub

Sub print_slip()
    Set s_slip = Worksheets("納品書")
    s_slip.PrintOut Preview:=False
End Sub

Sub process_slip()

    Set s_list = Worksheets("★")
    Set s_slip = Worksheets("納品書")

    r1 = 2
    r2 = 3

    Do While r2 < MAX_ROW
        If s_list.Cells(r1, 6).Value <> s_list.Cells(r2, 6).Value Then
            For r = r1 To r2 - 1 Step 17
                Call clear_slip
                rr = r + 16
                If rr > r2 - 1 Then
                    rr = r2 - 1
                End If
                Call make_slip(r, rr)
               Call print_slip
            Next
            r1 = r2
            If IsEmpty(s_list.Cells(r1, 6)) Or s_list.Cells(r1, 6).Value = "" Then
                Exit Do
            End If
        End If

        r2 = r2 + 1

    Loop

End Sub

以下のことを前提としてます。

  • 納品書シートの印刷レイアウトは、調整済み
  • 印刷先は、デフォルトのプリンタ
  • 消費税は、計算式で計算される(合計×0.08)…… 質問の画像だと数字があってない
  • 住所の欄は、セルが結合されている
  • 10000行まで処理すると中断します。それ以上のデータがあるなら、MAX_ROW の数値を書き換えてください。


で、質問の画像では文字がつぶれてたので、よく分からなかったところがあります。
意図通りになっていないところがあるかもしれません。
以下のように値を複写しています。

  • 一覧の「金額(参考)」は、「★」シートの C 列
  • 「合計」の金額は、「★」シートの C 列の合計 …… これがちょっと怪しい
  • 「送料(税込)」の金額は、「★」シートの D 列の合計
  • 「総額」の金額は、「★」シートの E 列の合計


因みに、氏名は一覧から複写しなくても良かったんでしょうか。
納品書だから、手書きにするということかな、という気もしてますが。



後、お金に絡むことなんで、一応、免責事項を書いておきます(ビビリです X-|
金額の確認は、人間の目でしっかりとお願いします。

(免責事項)
マクロの処理・計算の間違いによる損害が出ても、私は一切の責任を負担しません。
利用は、自己責任でお願いします。



追記です。
氏名も「★」シートから複写するようにマクロを修正しました。

他1件のコメントを見る
id:a-kuma3

納品書シートのB4に名前を黄色く塗るのを忘れていました。こちらもお願いできますでしょうか?

マクロを修正しました。
一行追加してます。

(免責の件当然です。こちらのすべて責任ですのでご安心くださいませ。そんなことするわけないです。もし何かあっても、恨みすらしません。)

チキンと笑っておくんなまし :-)

2015/02/27 17:55:24
id:naranara19

ありがとうございました!完璧でした。しかも、対応が素早くて助かります。免責の件ですが、私は上記のようにとりますが、クレーマー的な方はいくらでもいますので、a-kuma3さんの書き方はとてもいいと思います!本当にありがとうございました!(もし修正をお願いするときはまた別途依頼いたします。)

2015/02/27 18:56:32

その他の回答(1件)

id:ceramic-cups No.1

世良満久回答回数31ベストアンサー獲得回数72015/02/27 11:13:08

御自力で管理が大変なようでしたら無料のソフトの利用はどうでしょうか?
maxmaシステムズ 『 こりゃ楽だ 』
http://www002.upp.so-net.ne.jp/BeHapppy/welcom.html

ご参考まで。
世良満久

id:naranara19

ご指摘ありがとうございます!いまあるものを利用してやりたいものでして。

2015/02/27 15:45:02
id:a-kuma3 No.2

a-kuma3回答回数4548ベストアンサー獲得回数18972015/02/27 14:06:59ここでベストアンサー

ポイント400pt

マクロを書いてみました。
process_slip を実行すると、「★」シートから「納品書」シートにデータをコピーして印刷します。

Const MAX_ROW = 10000           ' 突っ走るのが怖いので


Sub clear_slip()
    Set s_slip = Worksheets("納品書")
    s_slip.Range("B19:H35").ClearContents
End Sub

Sub make_slip(r1, r2)
    Set s_list = Worksheets("★")
    Set s_slip = Worksheets("納品書")

    s_slip.Cells(4, 2).Value = s_list.Cells(r1, 6).Value        ' 氏名 ← F列       ※ここを追加しました
    s_slip.Cells(6, 4).Value = s_list.Cells(r1, 8).Value        ' 〒 ← H列
    s_slip.Cells(7, 2).Value = s_list.Cells(r1, 9).Value        ' 住所 ← I列
    s_slip.Cells(13, 3).Value = s_list.Cells(r1, 10).Value      ' 電話番号 ← J列
    r_to = 19
    s1 = s2 = s3 = 0
    For r = r1 To r2
        s_slip.Cells(r_to, 2).Value = s_list.Cells(r, 1).Value      ' 商品名 ← A列
        s_slip.Cells(r_to, 8).Value = s_list.Cells(r, 3).Value      ' 金額 ← C列
        s1 = s1 + s_list.Cells(r, 3).Value      ' 金額 ← C列
        s2 = s2 + s_list.Cells(r, 4).Value      ' 送料 ← D列
        s3 = s3 + s_list.Cells(r, 5).Value      ' 合計 ← E列
        r_to = r_to + 1
    Next
    s_slip.Cells(36, 8).Value = s1
    s_slip.Cells(38, 8).Value = s2
    s_slip.Cells(39, 8).Value = s3
End Sub

Sub print_slip()
    Set s_slip = Worksheets("納品書")
    s_slip.PrintOut Preview:=False
End Sub

Sub process_slip()

    Set s_list = Worksheets("★")
    Set s_slip = Worksheets("納品書")

    r1 = 2
    r2 = 3

    Do While r2 < MAX_ROW
        If s_list.Cells(r1, 6).Value <> s_list.Cells(r2, 6).Value Then
            For r = r1 To r2 - 1 Step 17
                Call clear_slip
                rr = r + 16
                If rr > r2 - 1 Then
                    rr = r2 - 1
                End If
                Call make_slip(r, rr)
               Call print_slip
            Next
            r1 = r2
            If IsEmpty(s_list.Cells(r1, 6)) Or s_list.Cells(r1, 6).Value = "" Then
                Exit Do
            End If
        End If

        r2 = r2 + 1

    Loop

End Sub

以下のことを前提としてます。

  • 納品書シートの印刷レイアウトは、調整済み
  • 印刷先は、デフォルトのプリンタ
  • 消費税は、計算式で計算される(合計×0.08)…… 質問の画像だと数字があってない
  • 住所の欄は、セルが結合されている
  • 10000行まで処理すると中断します。それ以上のデータがあるなら、MAX_ROW の数値を書き換えてください。


で、質問の画像では文字がつぶれてたので、よく分からなかったところがあります。
意図通りになっていないところがあるかもしれません。
以下のように値を複写しています。

  • 一覧の「金額(参考)」は、「★」シートの C 列
  • 「合計」の金額は、「★」シートの C 列の合計 …… これがちょっと怪しい
  • 「送料(税込)」の金額は、「★」シートの D 列の合計
  • 「総額」の金額は、「★」シートの E 列の合計


因みに、氏名は一覧から複写しなくても良かったんでしょうか。
納品書だから、手書きにするということかな、という気もしてますが。



後、お金に絡むことなんで、一応、免責事項を書いておきます(ビビリです X-|
金額の確認は、人間の目でしっかりとお願いします。

(免責事項)
マクロの処理・計算の間違いによる損害が出ても、私は一切の責任を負担しません。
利用は、自己責任でお願いします。



追記です。
氏名も「★」シートから複写するようにマクロを修正しました。

他1件のコメントを見る
id:a-kuma3

納品書シートのB4に名前を黄色く塗るのを忘れていました。こちらもお願いできますでしょうか?

マクロを修正しました。
一行追加してます。

(免責の件当然です。こちらのすべて責任ですのでご安心くださいませ。そんなことするわけないです。もし何かあっても、恨みすらしません。)

チキンと笑っておくんなまし :-)

2015/02/27 17:55:24
id:naranara19

ありがとうございました!完璧でした。しかも、対応が素早くて助かります。免責の件ですが、私は上記のようにとりますが、クレーマー的な方はいくらでもいますので、a-kuma3さんの書き方はとてもいいと思います!本当にありがとうございました!(もし修正をお願いするときはまた別途依頼いたします。)

2015/02/27 18:56:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません