アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルの受注表をいつも、オートフィルタで選択しては、印刷して・・・
とこれを200枚~300枚印刷してるのですが絶対に、抜けていたりダブっていたりして
もう、マクロで一括操作したいです。

オートフィルタした、A列のリストを順番に印刷したいのですが以下の条件でマクロ作れる方いらっしゃいますか?
(A列は受注番号になりますので、受注番号順にしたいことが絶対です)

1 :A~G列(7列)のうち、E,F列は非表示にする。
2 :15~16行くらいまではA4横向き印刷(1シートを1ページ設定)
3 :16行超えた場合は縦向き印刷(1シートを1ページ設定)

もし、印刷設定をマクロではできない場合は「 1 」のみでも大丈夫です。


解決できると大変うれしいです。

質問者からの補足コメント

  • どう思う?

    回答頂い方の為に補足させていただきます。
    (ありがとうございます!)

    シートは分かれていません。
    1シート に受注番号順になってはおらず、全部ランダムに入力されています。
    例えば
    A列に受注番号 B列に商品名 C列に数量 D列に単価 E列~F列は不要データ G列に合計価格
    となっています。
    1000~2000行くらいあります。

    ネットで検索したらそれに近いマクロがありましたので、URLをのせておきます。
    http://rmoon3.seesaa.net/article/353151419.html
    さらに、印刷設定も加えることができたらうれしいです。ということと
    どこをどう名前を入れ替えていけばいいのか微妙にわからずなのです。
    なにもないデータだけ印刷されてしまいます( ^ω^)・・・

    ちなみにシート1は、「オーダーシート」という名前です。シート2、シート3とあるのですが、空です。

      補足日時:2016/11/24 22:37
  • どう思う?

    あとさらに補足ですが、印刷設定はその通りです。

    少ない行(14行までとします)A4サイズ横向き印刷

    それ以上の行(15行目以降とします)は、A4サイズ縦向き印刷

    両方とも1シート1枚に印刷する設定です。
    出荷漏れを防ぐため、必ず1枚印刷しています。

    ランダムのため、実際A列をソートしないと、受注量(行数)がわからないので
    今は手動で印刷時に縦横判断していますが、大体は15行前後で切り替えています。

    長文で失礼いたしました。

      補足日時:2016/11/24 22:46

A 回答 (4件)

こんな感じで、どうでしょう。


ちなみに、下記のマクロからは、さらにMacro1、Macro2を呼んでいます。
Macro1、Macro2は、横方向印刷と縦方向印刷をマクロの自動記録を使って作成してください。

Sub オートフィルター連続印刷() 'この行から
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("オーダーシート")
Set ws2 = Worksheets("sheet2")
ws2.Cells.Clear
For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(Range(ws1.Cells(2, 1), ws1.Cells(i, 1)), ws1.Cells(i, 1)) = 1 Then
ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws1.Cells(i, 1)
End If
Next i
j = ws1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
Range(ws1.Cells(1, 1), ws1.Cells(j, 1)).AutoFilter field:=1, Criteria1:=ws2.Cells(i, 1)
If WorksheetFunction.Subtotal(103, Range("A:A")) < 14 Then
Call Macro1
Else
Call Macro2
End If
Next i
End Sub 'この行まで
    • good
    • 0
この回答へのお礼

お早うございます。
他の回答者様の意見もあって、かなり無理な事をお願いしていたのかと反省していました・・・
休日悩みながらマクロをいじっていたのですけど
私の知識が足りず苦戦しておりました!

マクロの記録で何度か失敗してやりなおして・・・とやって
思うようにできました!

ありがとうございました><

お礼日時:2016/11/28 12:02

以下は、もし下らない、そんなことは必要がないとお思いになりましたら、無視なさって一向に構いません。



私の考えすぎかもしれませんが、このご質問は、私にとっては、ネットで作成依頼では、ちょっと荷が重すぎます。本当は、経費的には掛かりますが、プログラマーの人を読んで作ってもらったほうが良いような気がします。参考サイトの内容は、簡易型ですから、もし、ここで進めるなら新たに考えたほうが良さそうな気がします。

そして、できれば、今手作業でやっていることをどこまで、マクロで反映できるか、そういうアプローチのほうが良いような気がしています。

私はいくつかの問題点は想像できます。ネットの参考サイトとは比にならないのではないでしょうか。もちろん、1~3までまったく問題はありません。そういう問題ではないような気がするのです。


>1シート に受注番号順になってはおらず、全部ランダムに入力されています。

受注番号がランダムになっているとしても、ネットの参考サイトは、同じ名前で検索するように、この受注番号も同じ番号があって、それを印刷するというのでしょうけれども、元のリストは順番自体はある絶対的なものがあるのかな、と思います。

ふつうなら、最初に、ソートを掛けてしまうはずです。
それをしないのは、ここには書かれていない時系列が存在しているのかと思いました。

>受注番号順にしたいことが絶対です

ランダムな番号があり、そこから一意にものを取り出して、並べ替えをする、という基本的な作業がありますね。しかし、たぶん、「オーダーシート」の並べ替えは、アンタッチャブルのような気がしています。


おそらく手作業ですることをマクロに写し込むにしても、

>絶対に、抜けていたりダブっていたりして、もう、マクロで一括操作したいです。
抜けていたり、ダブったりとは、数値のことでしょうか。

その問題はどうして起きるのでしょうか。人間がやって失敗することは、マクロでも同じ失敗する可能性があります。

ひとつの注文に対して、「200枚~300枚」とは半端な数ではありませんから、たぶん、マクロで、今、どこを印刷しているかという、ページのカウントの機能と中止命令の際の記録を付けてあげないといけないような気がするのです。

>2 :15~16行くらいまではA4横向き印刷(1シートを1ページ設定)
>3 :16行超えた場合は縦向き印刷(1シートを1ページ設定)
これ自体は、1枚ですね。同じものを何百枚ということでしょうね。
この前、同じようにプリントの質問があった時に、必ず1枚に納まるという前提条件がありました。印刷のルールには、縮小をしないこと、という暗黙のルールがあるらしいし、現に私は、今も絶対的に守っています。

もし、私の想像が全部当てはまるようなら、難易度はかなり高いと思います。
マクロでもミスすることはあると思うのですが、そのマクロのミスをきちんと記録するような方法を考えて、その後でも、修復して印刷できるようにしたらと考えています。それをメインテする側の負担は少し多くなるかもしれませんが、マクロなしでやっていた時代よりは、はるかにマシになると思います。

なお、一応原案は、こちらでも作りましたが、私は、発表してしまうと、その後の制作意欲が下がってしまうので、少し確認を取りたいと思いました。もちろん、他の方のもので良いものがあれば、それに越したことはありません。

いくつかのエラーに対するものとして、
・印刷ページにはカウントを振る。(何枚プリントしたか記録する。)
・トナー切れ/紙きれの対策
・上記に合わせて、マクロの中途からの印刷の開始
・印刷が始まってからの緊急停止命令(ESCで印刷を止める)
・1ページに納まらない時の処置は、印刷内容を縮小するか?
など、思いつくものがあります。
これらのテクニックは、昔からあるものです。

p.s.現実に注文番号があるのにも関わらず、何もないもののに印刷されてしまうものについては、そんなことはあるのでしょうか?
    • good
    • 1

「なにもないデータだけ印刷されてしまう」そうですが、そのマクロを補足にアップすることはできますか?それをベースにした方が、理解しやすいと思うのですが…。

    • good
    • 0
この回答へのお礼

申し訳ありません、文字数制限の関係で、省略してしまいました。
以下のマクロが惜しいものになります。

Sub オートフィルター連続印刷() 'この行から
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("sheet1") '←Sheet名は実際のSheet名に!
Set ws2 = Worksheets("sheet2")
ws2.Cells.Clear
For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(Range(ws1.Cells(2, 4), ws1.Cells(i, 4)), ws1.Cells(i, 4)) = 1 Then
ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws1.Cells(i, 4) '←データは2行目1列目から始めること!
End If
Next i
j = ws1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
Range(ws1.Cells(1, 1), ws1.Cells(j, 4)).AutoFilter field:=4, Criteria1:=ws2.Cells(i, 1)'AutoFilter field:=○には左から何列目のデータをフィルタ Cells(i, 1)iは1ずつ増えていくのでセルの行が下方向へ進む。
ws1.PrintOut
Next i
End Sub 'この行まで


宜しくお願い致します><

お礼日時:2016/11/25 09:51

ご要望の内容は下記の通りであってますか?



1枚の受注一覧シートと数百枚の受注明細シートがあり、各受注明細シート名は受注番号となっている。
受注一覧のA列には今回印刷したい受注番号が入力されていて、その受注番号に該当する受注明細シートを次々に印刷したい。
印刷の際は、行数の少ない受注明細シートはA4横。行数の多いシートはA4縦で、1シート1枚で印刷する。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
補足させていただきました!

印刷設定は、受注番号ごとの印刷をしたあとに40~50代の方が使う用紙となるため
合わせてなるべく小さい文字にならないように配慮するためです。
また、2枚にしないのにはこちらの業務の一環ではありますが、出荷漏れを防ぐためです。

よろしくお願いいたします。

お礼日時:2016/11/24 22:49

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

このQ&Aを見た人はこんなQ&Aも見ています