プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっています。

現在、顧客向けの帯封を作成するため、エクセルでデータを作成して、ワードで差し込み印刷をしています。この帯封はB4用紙1枚に4枚住所氏名を印字したあと裁断し顧客ひとりひとりの帯封を作成しています。顧客には1からの通しナンバー付番しています。

ところが現在は顧客が100名とした場合

1枚目の用紙  顧客001 顧客002 顧客003 顧客004
2枚目の用紙  顧客005 顧客006 顧客007 顧客008
3枚目の用紙  顧客009 顧客010 顧客011 顧客012
      ~
25枚目の用紙 顧客097 顧客098 顧客099 顧客100

となり、裁断した際には順番が1番目、5番目、9番目となってしまって大変不便です。ですので、裁断した段階で山で、顧客が正しく順番に並べ替えたいのです。同じようにデータ100件だとすると

1枚目の用紙  顧客001 顧客025 顧客051 顧客075
2枚目の用紙  顧客002 顧客026 顧客052 顧客076
3枚目の用紙  顧客003 顧客027 顧客053 顧客077
      ~
25枚目の用紙 顧客024 顧客050 顧客074 顧客100

というようにしたいのです。

顧客コード(1番から付番されてある)とデータ総数からこのように並べられるようにソートキーを顧客単位にあらたにふればよいと考え、いろいろ試行錯誤しているのですがわかりません。ぜひご教示いただきますようお願い申し上げます。

A 回答 (3件)

現在


顧客001
顧客002
顧客003
・・・
と並んでいるデータを
顧客001
顧客0026
顧客0051
顧客0076
顧客002
顧客0027
・・・
と並び替えれば良いと云う事でしょうか。
一例ですが
空いている列に



・・・
99
と連番を入れる
その隣に
=MOD(Z1,25)*100+Z1
と入れて下までコピー
並び替えで、関数を入れた列で並び替えては如何でしょうか。
    • good
    • 0
この回答へのお礼

早速のご教示感謝します。

MODと1枚に出力する4件、そして総件数を使えばなんとかなるだろうとは
思っていたのですが、ちょっと難しく考えすぎていました。

これで、いままでの苦労がなんとか解消されそうです。
ありがとうございました。

お礼日時:2015/06/22 08:56

要するに、25 行ごとに抜き出した形に並べ替える方法が分かればいいわけですね。

マクロを使わなくても、Excel の基本的な操作だけでできますよ。

添付図のように、「通しナンバー」の昇順で並んでいるときに、「グループナンバー」として、C 列の最初の 25 行に 1, 2, ..., 25 と記入。C2:C26 のセル範囲をコピーして、その下の行に貼り付け。最後に、「グループナンバー」の昇順で表全体を並べ替えれば、お望みの順番になります。「通しナンバー」で並べ替えれば、元の順序に戻ります。
「エクセルのソートキーの作成方法がわかりま」の回答画像3
    • good
    • 0
この回答へのお礼

早速のご教示感謝します。

たしかにこれをやれば良いというのはわかっているのですが、実際の顧客件数は約2000件
ですので、手作業でいれるというのは難しいですね…

ありがとうござました。

お礼日時:2015/06/22 08:51

お望みの形か分かりませんがVBAを使用してみました。


なお、並び替えた後の結果で示されている、
>1枚目の用紙  顧客001 顧客025 顧客051 顧客075
>25枚目の用紙 顧客024 顧客050 顧客074 顧客100
は、
1枚目の用紙  顧客001 顧客026 顧客051 顧客076
25枚目の用紙  顧客025 顧客050 顧客075 顧客100
の書き間違いと理解して進めます。

データはバックアップしたうえで試行ください。
元のデータがA1:D25に入っているとして、並び替えた結果がF1:I25に展開される
ようにしました。


1.Excel画面上で、Alt+F11 でVBE画面を開く
2.Alt+I、M で新規モジュールを開く(真っ白な画面が開きます)
3.そこに以下のコードをコピペ。
'------------------------------------------------
Sub aaaaaa()
Dim r As Integer, c As Integer
Dim j As Integer
Dim Kyak(99) As Variant
j = 0

For r = 1 To 25
For c = 1 To 4
Kyak(j) = Cells(r, c).Value
j = j + 1
Next c
Next r

j = 0
For c = 6 To 9
For r = 1 To 25
Cells(r, c).Value = Kyak(j)
j = j + 1
Next r
Next c


End Sub

'------------------------------------------------
4.エクセル画面に戻り、ALt+F8、「aaaaaa」を選択して実行。
    • good
    • 0
この回答へのお礼

早速のご教示、感謝します。

短時間にもかかわらずマクロのコードを書いて頂きありがとうございます。
お書き頂いた、マクロのコードについてどのルーチンがどのような働きをするのか
勉強させて頂きます。

ありがとうございました。

お礼日時:2015/06/22 08:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!