こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル VBA 飛ぶセルの自動連番のつけ方

エクセル VBA で添付画像のように1枚に30までの自動連番、
セルに1~150と入力すれば自動採番で5枚印刷できるような
VBAをご教示下さい。

番号は001のような3ケタの場合でお願いします。

投稿日時 - 2018-05-11 21:11:25

QNo.9497439

困ってます

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

さらにさらにごめんなさい。
先に示したコードでも動作しますが、
気がかりな記述になっているところがあるので、再掲示します。

Option Explicit

Sub sample3()

 Dim wkL As Integer
 Dim wkC As Integer
 Dim wkSH As Worksheet
 Dim wkNum As Integer
 
 Set wkSH = ThisWorkbook.Sheets(1)
 wkNum = wkSH.Cells(1, 3).Value
 
 Do
 
  For wkC = 1 To 3
   For wkL = 1 To 10
    With wkSH.Cells(wkL * 3, wkC * 3)
     .NumberFormatLocal = "@"
     .HorizontalAlignment = xlCenter
     .VerticalAlignment = xlCenter
     .Value = Format(wkNum, "000")
    End With
    wkNum = wkNum + 1
   Next wkL
  Next wkC
  
  wkSH.PrintOut
 
  If wkNum > wkSH.Cells(1, 5).Value Then Exit Do
 
 Loop

End Sub

投稿日時 - 2018-05-12 11:02:22

お礼

早々のご回答ありがとうございました。
ばっちり起動しました(^O^)

色々と勉強させて頂き大変感謝しております。!(^^)!

投稿日時 - 2018-05-12 21:18:20

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

ナンバーリングする部分を中央印字させているようなので
それを加味して再掲示します。

印刷範囲、行高、行幅、背景色、デザインなどの設定は済んでいて、
VBAでやりたいことはナンバーリングと印刷指示だという理解でいいですね?

また、番号の範囲(C1~E1:ナンバーリングする数)は
30の整数倍という条件で良ければ
次のようなコードとなりましょう。

Option Explicit

Sub sample2()

 Dim wkL As Integer
 Dim wkC As Integer
 Dim wkSH As Sheet1
 Dim wkNum As Integer
 
 Set wkSH = ThisWorkbook.Sheets(1)
 wkNum = wkSH.Cells(1, 3).Value
 
 Do
 
  For wkC = 1 To 3
   For wkL = 1 To 10
    With wkSH.Cells(wkL * 3, wkC * 3)
     .NumberFormatLocal = "@"
     .HorizontalAlignment = xlCenter
     .VerticalAlignment = xlCenter
     .Value = Format(wkNum, "000")
    End With
    wkNum = wkNum + 1
   Next wkL
  Next wkC
  
  wkSH.PrintOut
 
  If wkNum > wkSH.Cells(1, 5).Value Then Exit Do
 
 Loop

End Sub

投稿日時 - 2018-05-12 09:45:33

ANo.3

印刷範囲、行高、行幅、背景色、デザインなどの設定は済んでいて、
VBAでやりたいことはナンバーリングと印刷指示だという理解でいいですね?

また、番号の範囲(C1~E1:ナンバーリングする数)は
30の整数倍という条件で良ければ
次のようなコードとなりましょう。

Option Explicit

Sub sample1()

 Dim wkL As Integer
 Dim wkC As Integer
 Dim wkSH As Sheet1
 Dim wkNum As Integer
 
 Set wkSH = ThisWorkbook.Sheets(1)
 wkNum = wkSH.Cells(1, 3).Value
 
 Do
 
  For wkC = 1 To 3
   For wkL = 1 To 10
    wkSH.Cells(wkL * 3, wkC * 3).Value = "'" & Format(wkNum, "000")
    wkNum = wkNum + 1
   Next wkL
  Next wkC
  
  wkSH.PrintOut
 
  If wkNum > wkSH.Cells(1, 5).Value Then Exit Do
 
 Loop

End Sub

投稿日時 - 2018-05-12 09:26:20

ANo.2

これ、150枚分シートを作って、1ページ30枚になるように調整して、印刷の範囲指定だけをマクロでやったほうがよくないですか。
サイズ等は調整して下さい。
但し、範囲指定でやっているので、1~1を指定しても、1~3が出ます。
PrintOutのコメントを外せば、印刷もされます。

投稿日時 - 2018-05-12 04:39:01

ANo.1

割引券部分を
標準モジュールに
Sub test02()
Range("A2:A51") = "割引券"
Range("D2:D51") = "割引券"
Range("G2:G51") = "割引券"
End Sub
1ステートメントでもできるかもしれないが、テスト時間がないので。
ーーー
番号部分を標準モジュールに
Sub test01()
For j = 1 To 3
For i = 2 To 51
Cells(i, (j - 1) * 3 + 3) = (j - 1) * 50 + i - 1
Next i
Next j
End Sub
でやってみて、どうですか。A,B列のセル結合と中央揃えは、VBAでもできるが、手動でやってください。質問のメイン課題ではないだろうから。
ーー
Cells(i, (j - 1) * 3 + 3) = の(j - 1) * 3 + 3の部分は中学校で学ぶ、数列を代数式で表す訓練の結果です。これは3,6、9列を表したいためこうした。列レイアウトを変えるならこの式を考え直してください。

投稿日時 - 2018-05-11 22:22:07

あなたにオススメの質問