Excel VBAを用いて、以下のような顧客リストを使用し、同じ宛先(同じ通し番号)の人に対し、契約IDを1つの通知にまとめて記載した状態で、印刷をしたいです。
通知のフォーマットは、同じ宛先の人(通し番号)に対し、契約ID最大10個までを1つの通知に印刷できるような仕様になっています。
1列目を通し番号とし、同じ宛先の人は同じ通し番号になるようにしています。
1 契約ID Aさん 住所
1 契約ID Aさん 住所
2 契約ID Bさん 住所
3 契約ID Cさん 住所
3 契約ID Cさん 住所
3 契約ID Cさん 住所
※契約IDは、契約単位で異なるため、全て異なります。
複数人で分担して印刷するため、顧客リストのセルAZ3に印刷開始行、顧客リストのセルBA3に印刷終了行を手入力すると、印刷開始行から印刷終了行までの間の顧客リストを一括印刷する設定にしています。
通知のCells(2,36)に契約IDを転記し、通知の宛先部分に顧客リストからVLOOKUPで、Cells(2,36)の顧客を探し、住所を引っ張ってくる設定にしています。
If関数で通し番号が同一の場合は、Cells(2,36)の隣のセルに契約IDを転記する。この作業を最大10個の契約IDで繰り返す。異なる場合は、通知を印刷し、セルをクリアして次の顧客の通知を印刷する。という設定にしようと考えています。
しかし、ループ処理が上手くいかず、Aさんをひたすら印刷してしまいます。
どこを修正したら上手くループできるのか、Do While やDo Until等色々試しましたが分からないため、教えていただけるとありがたいです。
Sub 通知印刷() Dim i As Integer Dim Start_Point As Integer Dim End_Point As Integer Dim k As Integer Start_Point = Worksheets("顧客リスト").Range("AZ3").Value End_Point = Worksheets("顧客リスト").Range("BA3") For k = Start_Point To End_Point Step CStr(k) Worksheets("通知").Cells(2,36) = Worksheets("顧客リスト").Cells(CStr(k), 2) For i = 1 To 10 If Worksheets("顧客リスト").Cells(CStr(k), 1) = Worksheets("顧客リスト").Cells(CStr(k) + CStr(i), 1) Then Worksheets("通知").Cells(2, 36 + CStr(i)) = Worksheets("顧客リスト").Cells(CStr(k) + CStr(i), 2) Else Worksheets("通知").PrintOut Worksheets("通知").Range("AJ2:AS2").ClearContents End If Next i Next k End Sub
回答1件
あなたの回答
tips
プレビュー