専門家に聞いた!繰り返す痔の原因は!? >>

A4用紙に地域の金券(100円×20枚=2000円)をエクセルで作っていますが、1000円毎に通し番号の抽選券を付けようと思っています。印刷枚数が多いのでプリントアウト時に自動的に通し番号を付けようとVBEで試しましたが、パソコン初心者の為失敗します。
宜しければコマンドボタン配置からの流れを教え下さい、
抽選通し番号配置セルは、A1とA5です。よろしくお願いします。
尚、プリントアウト1枚目は、通し番号1と2、2枚目は通し番号3と4となり印刷枚数140枚の予定で最終通し番号は、280となります。

「教えてエクセル、VBE」の質問画像

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

  • 宜しければコードもお願いします。

      補足日時:2016/06/19 22:32

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんにちは。



>印刷範囲設定のエラーが出ます。
印刷範囲は、ここでの話の中では、A1:C8 までだったと思いますが、
ページレイアウト-印刷範囲は、これに関わらず、基本的なことですから、かならず入れるようにしてください。

失礼ですが、その後の説明しても、説明から実際に形づけるのは難しいと思いましたしので、ファイルをアップしました。そちらを御覧ください。

http://bit.ly/28Mw84l
16/06/21 08:46:28  7日 までです。

パスワードは、ここのアドレスの.htmlの前の7桁の番号です。
ダウンロードした後、右クリックして、プロパティで、「ブロック解除」して、「OK」を押してください。

ここの掲示板で書いた内容とは、違う部分があります。また、ここの掲示板で書かれた私のマクロは、重大なミスがありましたので、訂正版を載せておきます。返って、使わなくてよかったと思います。急遽作りなおしましたので、不備があるかもしれません。試験的に印刷してから試してください。

画像をみると、オートシェイプが置かれて、その中に数字を入れるようになっているようです。ただ、その書式は、分かりませんので、こちらの想像で作らせていただきました。なお、私自身、最初想定していたものよりも、難しい内容だと感じました。

余計な話ですが、このチケットにオリジナル画像やパターンをつけると、偽造防止になるのではないかと思いました。


'//
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub PrintMacro()
  Dim i As Long
  Dim iStart  As Long, iEnd As Long
  Const PREV As Boolean = False  'True =プレビュー
  iStart = 1 '最初の番号
  iEnd = 140 '最後のページ
  On Error GoTo ErrHandler
  Application.EnableCancelKey = xlErrorHandler
  With ActiveSheet
    If .PageSetup.PrintArea = "" Then
      MsgBox "このマクロは、印刷範囲を設定していないと、実行できません。", vbExclamation
      Exit Sub
    End If
    For i = iStart To iEnd
       Call NumberInShape(i)
      .PrintOut , , , PREV
      Sleep 500
      DoEvents 'この2行を割り込み中止を入れやすくさせるためです。
    Next i
  End With
  Application.EnableCancelKey = xlInterrupt
  Exit Sub
ErrHandler:
  MsgBox i & " :中途で止まりました。"
  Application.EnableCancelKey = xlInterrupt
End Sub

Sub NumberInShape(ByVal i As Long)
Dim shp As Shape
Dim t1 As String
Dim t2 As String
   t1 = CStr((i - 1) * 2 + 1)
   t2 = CStr(i * 2)
   For Each shp In ActiveSheet.Shapes
       If LCase(TypeName(shp.DrawingObject)) = "rectangle" Then
         If shp.TopLeftCell.Address(0, 0) = "A1" Then  'オートシェイプの位置 A1
            shp.DrawingObject.Text = t1
         ElseIf shp.TopLeftCell.Address(0, 0) = "A5" Then  'オートシェイプの位置 A5
            shp.DrawingObject.Text = t2
         End If
       End If
   Next shp
End Sub

'//
「教えてエクセル、VBE」の回答画像4
    • good
    • 0
この回答へのお礼

お手数お掛け致します。無事プリントアウト完了しました。完璧でした!デザインに関してですが、私も同感ですがオリジナル印鑑があるんで…。これから100円毎に印鑑押していきます、トホホ…。でも大変助かりました。本当にありがとうございました。

お礼日時:2016/06/21 21:05

こんなのはどうでしょう。


A1セルの抽選番号に印刷開始ページ、A5セルの抽選番号に印刷終了ページを入力して、下記のマクロを実行すると印刷開始ページ~終了ページまでが印字されます。
細かいエラーチェックはしていないので、正しいページを指定してくださいね。

Sub sample()
Dim P As Long
For P = Range("A1") To Range("A5") Step 2
Range("A1") = P
Range("A5") = P + 1
'ActiveSheet.PrintPreview
ActiveSheet.PrintOut
Next P
End Sub
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。皆さんのおかげで、プリントアウト完了しました!本当にありがとうございます。

お礼日時:2016/06/21 21:49

>プリントアウト1枚目は、通し番号1と2、2枚目は通し番号3と4となり印刷枚数>140枚の予定で最終通し番号は、280となります。



確かに、マクロは必要になるけれども、もう一つ大事なことは、140枚を通しでできれば、それに越したことがないけれど、こうしたマクロは、緊急避難用のコマンドは用意したほうがよいです。紙詰まりやら、紙のストックがきれたり、最後まで油断できません。ふつうは、マクロは最後までやりきってしまいます。それを、ESCキーで途中で止めるようにしました。すぐには止まりませんが、2~3枚遅れて命令が働きます。

  iStart = 1  '最初のページ  ←何枚目からか
  iEnd = 140  '最後のページ
  
  この初期値と最終値は、セル上でも可能です。

  MsgBox i & " :中途で止まりました。" 途中で止めた時ページが出てきます。中途からでしたら、iStart に適当な数字を入れてください。
  
  マクロの中の以下のセンテンスは、False で印刷します。Trueでプレビューになります。
  Const PREV As Boolean = False  'True =プレビュー

ボタンについては、コマンドボタンというよりも、フォームコントールから、フォーム・ボタンのほうが軽いのでよいと思います。

これ以上で分からないことがありましたら、再度、ここのスレにつけてください。
なお、コードの意味は、これは実務の中で出来上がったものであって、基本的なものとは違うので、マクロの勉強にはならないと思います。

'//新しい標準モジュールに貼り付けてください。(32bit 向けです)

Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub PrintMacro()
  Dim i As Long
  Dim iStart  As Long, iEnd As Long
  Const PREV As Boolean = False  'True =プレビュー
  iStart = 1 '最初の番号
  iEnd = 140 '最後のページ
  On Error GoTo ErrHandler
  Application.EnableCancelKey = xlErrorHandler
  With ActiveSheet
    If .PageSetup.PrintArea = "" Then
      MsgBox "このマクロは、印刷範囲を設定していないと、実行できません。", vbExclamation
      Exit Sub
    End If
    For i = iStart To iEnd
      .Range("A1").Value = (i - 1) * 2 + 1
      .Range("A5").Value = i * 2
      .PrintOut , , , PREV
      Sleep 500
      DoEvents 'この2行を割り込み中止を入れやすくさせるためです。
    Next i
  End With
  Application.EnableCancelKey = xlInterrupt
  Exit Sub
ErrHandler:
  MsgBox i & " :中途で止まりました。"
  Application.EnableCancelKey = xlInterrupt
End Sub
'//
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。コードを貼り付けマクロ実行しましたが、印刷範囲設定のエラーが出ます。初期値と最終値のセル上での設定が分かりません。それからコマンドボタンについてですが、フォームコントロールのボタン(フォームコントロール)の挿入でよろしいですか?A1セルとA5セル両方に挿入でしょうか?お手数お掛けしますが当方パソコン初心者です、宜しくお願い致します。

お礼日時:2016/06/20 22:15

その3列×8行が1ページとなり、140ページ分のデータがあるのではなく、データは1ページ分だけで、印刷の度に連番が増えるように…ということでよろしいですか。



変数を設け、1ページ印刷するごとに変数の値を増やしていけばよろしいのでは?
だとすると
https://oshiete.goo.ne.jp/qa/3191856.html #4
を変更して使えます。
>For idx = frmPage To toPage

For idx = frmPage To toPage Step 2
とします(お話しの流れから「Page]という名前は適切ではないかもしれませんが、動作はします。

>   Range("AW3").Value = idx

Range("A1").Value = idx
Range("A5").Value = idx +1
とすれば良いと思います。


Excelより、専用ソフトでシールのサイズをフリーとして作成した方が目的にかなったものができるような気もしますが。
https://oshiete.goo.ne.jp/qa/510594.html
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。チャレンジしてみます(^ ^)

お礼日時:2016/06/20 22:17

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング