• ベストアンサー

エクセル97連番伝票マクロを作りたい§^。^§

特定のセルに自動カウント(連番)をつくり通し番号 にして伝票にしたいのですが・・・ (1)元ファイルの番号に+1をする。 (2)そのシートを選択ごコピーする (3)新しいシートに貼り付ける (4)その番号で保存する (5)古い最初のシートをとじる (6)印刷設定を保持したまま追加編集し保存する。 以上の繰り返し操作を自動化したい・・・が 書式設定がA4サイズになってしまい いちいち設定の変更をしなければならず困っている。 よろしくお願いします。 ※以上質問内容にマクロを貼り付け複数に分けて質問したのですが=ルール違反でした(ーー;) 補足としての記載は、OK と言うことですので、よろしくおねがいします

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

>「やりたいことはマクロ内に全てあります。」私の疑問・補足要求には答えてもらえず、うーん、マクロを解読しなさいと言うことですね。マクロの意味は質問者は読めているのかな。 (雑感) (1)質問に「伝票」とあるので、コクヨの会計伝票などを想像したが、sizisho_030614_2.xlsの「指示書」と言う言葉からB4の相当大型の書類らしい。 (2)Orientation = xlPortrait となっているが、B4を縦型に書類作成する例は、個人的に 経験少ない。勿論あり得る。 (3)印刷用紙の設定はPaperSize = xlPaperB4 の個所だと思うが、プリンタはB4が印刷できるものでしょうね。 (3)PrintArea 第1行-第81行 書類80行 82行目空き 83-163   書類80行 164行目空き 165-245  書類80行 246行目空き 247-327  書類80行 328行目空き 329-409  書類80行 410行目空き 411-491  書類80行 をPageSetupしている。 しかしPrintOutメソッドはどこにも無い。 あとでまとめて保存したブックを印刷する? (4).PrintArea =""の""の中に,で区切って範囲を (3)のように記述したときは印刷エリアの宣言だけ?どう印刷時に影響が出るのかな。 (5)当然テンプレート的な内容をコピーしてきて、伝票 連番以外で、内容を変える(入力受け付けする)ことがあると思うが、それがVBAコードからでは見えない。どうなっているのだろう。 (6)印刷入力作業繰り返しの部分はどうなっているのだろう。 (7)data = Cells(80, 2) + 1 といきなり出てくるが、Cells(80,2)のあるブックを開くのは手動?

hiromi_i
質問者

補足

>マクロの意味は質問者は読めているのかな。 おっしゃるとおりです。 実は自動マクロで作成しました。 あまり良くわかっておりませんが必要に迫られています。 (1)(2)そのとおり・・・B4サイズ縦仕様です。 ※伝票と書きましたが工場が使う「作業指示書」の作成用書類です。デザイン画像を貼り付けて製作に使います。 (3)はい、印刷して各部署に配布します。 (4)用紙B4にプリントエリアのみ印刷します。 (5)テンプレート的な使い方でしたね(そうゆう概念がなかったのです・・・)後から9割位入力します。(各用紙は内容がちょっとずつ違います。) (6)シート内で自動コピーをしてます。 (7)手動です。 imogasiさんのおさっしのレベルですがお付き合いをよろしくおねがいします。

その他の回答 (4)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.5

#3です。 全て記録マクロの記述ではないので、ある程度の知識はあると思われるにも係わらず、こちらが提示したサンプルは無視して試しもせず「このマクロから読みとれ」という姿勢はどうでしょう? #3補足マクロを見る限り、こちらが提示したサンプルをほんの少し修正するだけで解決するように思いますが? #3補足マクロは、セル範囲を指定してコピー&ペーストし、新しいシートに後からページ設定 こちらの提示サンプルは、予めコピー元のシートはページ設定しておく。後はシート丸ごとコピーなのでページ設定不要。

hiromi_i
質問者

お礼

ごめんなさい!ご覧のようにimogasiさんにも指摘されました。反省しています。実は実用書を片手にやっていたのですが・・・ご提案のマクロを理解できずもう少し勉強してから再度お願いにあがります。

hiromi_i
質問者

補足

この時点でのポイント発行は失礼とは思いますが・・・ありがとうございました。(勉強します)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

#1です。 ちょっと読み直してみて、こう解釈しました。 《やりたいこと》 元ブックには伝票のテンプレート的なシートがある。(以下、伝票シート) 伝票シートは書式設定、ページ設定がされている。 伝票シートのどこかのセルに通し番号を付加する必要がある。 通し番号を付加した伝票シートをコピーして新ブックのシートに貼りつける。 (以下、新シート) 元ブックは保存して終了する。 新シートに必要事項を記入する。 新ブックを保存する。 《困っていること》 新シートはページ設定がデフォルトのままになってしまい直すのが手間である。 以下、修正版 元ブックのシート名やセル位置に合せてSheet1とA1をそれぞれ修正します。 コピーしたブックなど、テスト環境で試してみてください。 Sub BBB() Dim wb As Workbook, FName With ThisWorkbook.Worksheets("Sheet1")  .Range("A1") = .Range("A1") + 1  .Copy End With Set wb = ActiveWorkbook FName = Application. _ GetSaveAsFilename(fileFilter:="Excel (*.xls), *.xls") If FName <> False Then  wb.SaveAs FName  ThisWorkbook.Save  ThisWorkbook.Close End If End Sub

hiromi_i
質問者

補足

急用で返事が遅くなってしまいました。ごめんなさい。下記のマクロを使ってます。(ルール違反かな?) Sub autonum() Static data As Long data = Cells(80, 2) + 1 Cells(80, 2) = data Cells.Select Selection.Copy Workbooks.Add ActiveSheet.Paste ActiveWorkbook.SaveAs Filename:=data, FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False Range("B1:AX81,B83:AX163,B165:AX245,B247:AX327,B329:AX409,B411:AX491"). _ Select 'ActiveWindow.View = xlPageBreakPreview With ActiveSheet.PageSetup.PrintArea = "$B$1:$AX$81,$B$83:$AX$163,$B$165:$AX$245,$B$247:$AX$327,$B$329:$AX$409,$B$411:$AX$491" End With With ActiveSheet.PageSetup .PrintArea = "$B$1:$AX$81,$B$83:$AX$163,$B$165:$AX$245,$B$247:$AX$327,$B$329:$AX$409,$B$411:$AX$491" .LeftMargin = Application.InchesToPoints(0.787) .RightMargin = Application.InchesToPoints(0.787) .TopMargin = Application.InchesToPoints(0.984) .BottomMargin = Application.InchesToPoints(0.984) .HeaderMargin = Application.InchesToPoints(0.512) .FooterMargin = Application.InchesToPoints(0.512) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 300 .CenterHorizontally = True .CenterVertically = True .Orientation = xlPortrait .Draft = False .PaperSize = xlPaperB4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 95 End With Windows("sizisho_030614_2.xls").Activate ActiveWorkbook.Save ActiveWindow.Close End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

○質問内容 (1)>以上の繰り返し操作を「自動化」したい・ (2)>書式設定が「A4サイズになって」しまい いちいち設定の変更をしなければならず(サイズは 何にしたいのでしょう) (1)と(2)の両方の質問であって、別々の質問ですか。 または(1)と(2)が底で関連しているとお考えですか。(あり得ないと思いますが) ○やりたいこと (1)伝票に連番を振りたいらしい。 伝票を印刷したいらしい。 伝票をエクセルで保存したいらしい。 (2)伝票1枚の用紙サイズはB5、B6? (3)伝票の枠(罫線や見だし)以外の内容は手入力? 勿論伝票の枠見出しは、エクセルで作るのでね。 (4)印刷のキッカケは?ボタンでも押させる? (5)プリントエリアは1枚ずつ別か(下へ繋がるのか)、同じ範囲の内容を変えて1枚印刷か(そして繰り返すのか)。 (6)「シートに貼りつけ」たり、「保存」(ブックに対する言葉)、「閉じる」(ブックに対する言葉)なぜ必要なのでしょう。伝票1枚で1ブック(ファイル)にするのですか。あるいは1シートで一枚伝票にするのですか。(この辺はエクセルで、伝票作成は無理があると思う。) この辺の用語の使い方の疑問が#1のご回答の中にも出ているように思います。 コピーなどしなくても、シートブック間の値代入で済むケースかとも推定しますが。

hiromi_i
質問者

お礼

回答ありがとうございます。上記(NO3に対する補足)のようなマクロで最終的な保存時に印刷の設定がくずれてしまいます。やりたいことはマクロ内に全てあります。よろしくおねがいします。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

シートとブックを混同されてませんか? シート、ブック、セル等きちんと使い分けないと何をされたいのか伝わりにくいです。 意味が違うかも知れませんが、、 マクロを組んだブックのシート(Sheet1)のセル(A1)に+1して、そのSheet1を別のブックにそのままコピーします。 Sub AAA() Dim wb As Workbook, FName With ThisWorkbook.Worksheets("Sheet1")  .Range("A1") = .Range("A1") + 1  .Copy End With Set wb = ActiveWorkbook FName = Application. _ GetSaveAsFilename(fileFilter:="Excel (*.xls), *.xls") If FName <> False Then  wb.SaveAs FName  'wb.Close End If End Sub

hiromi_i
質問者

お礼

見る機会がないとは思いますが おかげさまでなんとか使えるようになりました。 大変感謝してます。 締め切り後のお礼になります。 papayukaさん今後もがんばってください。 また、よろしくお願いします。