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

vbaについての質問です。
画像の様な1枚の用紙に5ラベル印刷できるシートと、ラベルに項目を差し込む為のマスターシートがあります。
リストに入力した項目を指定のラベル枚数、印刷をしたいです。

仮に印刷欄に8ラベルの指定があった場合、その項目を5ラベルに差し込み、一度印刷、次に残りの3ラベル差し込み、印刷。といったプログラムを組みたいのですが、よくわかりません。
ご教授願いたいです。宜しくお願いします。

「vbaについての質問です。 画像の様な1」の質問画像

A 回答 (2件)

#1です


結合セルですね。。そのままだと、エラーが出てしまうかと、、すみません
Set rg = .Range("B3,B5:B6,B11,B13:B14,B19,B21:B23,B27,B29:B30,B35,B37:B38")

Set rg = .Range("B3:C9,B11:C17,B19:C25,B27:C33,B35:C41")
にしてください。
出力に関しては、MergeArea(1, 1)なのでそのままでも実行できますが、
気になれば、(コードを見て結合セルに対してと把握する為)
.Cells(3 + n, 2).MergeArea(1, 1).Value = .Cells(i, 6).Value
などとしておいた方が良いかも知れません。

また、I列の値が文字だと型エラーが発生すると思います。
IsNumeric関数 IsNumeric(値)などで実行前にチェックするのが良いと思います。
ついでに nの値は、出力先が8行づつ移行する変数です。
    • good
    • 0

こんばんは、


どの様に回答すれば良いのかわかりませんが、
掲示の表において、なさりたい事を条件分岐で考えると下記のような流れになると思います。(一例です)
多分このままでも処理できると思いますが、ステップ実行などで処理の流れを確認してください。基本的にベタ書きなので分かると思います。
3行だけなので.value=.valueですが、offsetなどに書き替えても良いかも知れません。
.PrintPreview としていますので即プリントする場合は.PrintOutなどとして場合によっては、他の制御を加えた方が良いかも知れません。
表示のシートで実行されます。With ActiveSheet シートは明示した方が良いと思います。。

Sub a()
Dim i As Long, ii As Long
Dim n As Long: n = 0
Dim rg As Range
 With ActiveSheet
  Set rg = .Range("B3,B5:B6,B11,B13:B14,B19,B21:B23,B27,B29:B30,B35,B37:B38")
  rg.ClearContents
  For i = 4 To 6
   If .Cells(i, 9).Value <> "" And .Cells(i, 9).Value > 0 Then
    For ii = 1 To .Cells(i, 9).Value
     If .Cells(3 + n, 2).Value <> "" Or n > 32 Then
      .PrintPreview
'      .PrintOut
      rg.ClearContents
      n = 0
      .Cells(3 + n, 2).Value = .Cells(i, 6).Value
      .Cells(5 + n, 2).Value = .Cells(i, 7).Value
      .Cells(6 + n, 2).Value = .Cells(i, 8).Value
     Else
      .Cells(3 + n, 2).Value = .Cells(i, 6).Value
      .Cells(5 + n, 2).Value = .Cells(i, 7).Value
      .Cells(6 + n, 2).Value = .Cells(i, 8).Value
     End If
     If ii < .Cells(i, 9).Value Then n = n + 8
    Next
   End If
   If n <= 32 Then
    n = n + 8
   Else
    n = 0
   End If
  Next
  .PrintPreview
'  .PrintOut
 End With
End Sub
    • good
    • 1

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