VBA初心者です。
仕事で、宛名シールを使って、商品が入っている箱に貼り付けるシールを作ることになり、
勉強を兼ねてVBAで試作中です。
【1枚目シート 明細】
メーカー 商品名 数量
トヨタ カローラ 1
ホンダ シビック 2
【2枚目シート 書式】
既製品の宛名シールに合うように、Excelでセルを調整済み
(縦3・横3で1件分のシール。これを縦7件・横2件、合計14件分を作成)
<やろうと思っていること>
(1)明細シート1行毎、書式シートの1件分のセルに転記(これはマクロの記録で出来ました)
(2)書式シート、14件分埋まったら、印刷をする。
(3)書式シートに転記済みのデータを全て消去(これは自力で出来そうです)
(4)15件目から同じことを繰り返す。
(5)明細シートのデータ最終行までいったら、転記終了。
※明細データ数は、毎回変わる。
(2)~(5)の流れを、どのようにコードにしたら良いか、見当がつきません。
Doで繰り返すのかなとも思ったのですが、途中で印刷とデータ消去を挟むとなると、
どうなるんだろう???と、止まってしまいました。
フリーソフトやラベル印刷ウィザードで対応することも考えましたが、
使う人のことを考えたら、VBAでボタン一つで終わるようにしたいと思っています。
文章での表現で、理解しずらいかもしれませんが、取っ掛かりとなるヒントでも
教えて頂きたいです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
考え方はいくつかあると思いますが、
ご自身の考え方を整理する、と言うのも含めて2通りの提案を。
ザックリで申し訳ないですが、ひとまずヒントにはなるかと。
一つ目は「カウンタ風のモノ」を入れる考え方。
DoでもForでも良いのですが、繰り返し処理開始前に初期化、
繰り返す度にカウンタに1を加算し、14まで行ったらリセット・・と言う考え方ですね。
具体的に例を挙げると、
Dim i As Integer, r As Integer
Dim RCount As Integer '変数の名前は適宜
RCount = 0 'まず初期化
'以下、1行目からA列の最終行まで繰り返し
For r = 1 To Cells(Rows.Count, 1).End(xlUp).Row
~~処理~~
RCount = RCount + 1 'カウンタに1加算 = 処理した件数
IF RCount = 14 Then 'カウンタが14に達したら = 14件処理したら
~~印刷の処理~~
~~消去の処理~~
RCount = 0 'カウンタをリセット
End IF
Next r
~~端数を印刷~~
・・・と言った感じでしょうか。
これで、14件終わったら印刷して消去、次の14件を目指す・・
と言う感じに処理が進みます。
もう一つは、もう気にせずに全件を処理してしまい、まとめて印刷する考え方です。
実際に手動でこのシートを作ろうとしたらどうしますでしょう?
14件打って印刷、消去して、また14件打って印刷・・とはしないと思います。
一気に打って、一気に印刷する方が理にかなっているような気がします。
マクロでも、この考えでいってみてはいかがでしょう?
つまり・・「横に2件分、縦は気にせずに羅列」と言う考え方です。
これであれば、余計なことを考えずに印刷も一回、消去も最初の一回だけでOKですから。
~~消去の処理~~
For r = 1 To Cells(Rows.Count, 1).End(xlUp).Row
~~処理~~
Next r
~~印刷の処理~~
これでスッキリ書けますね。
ただし、縦7件が終わったら改ページを挿入、と言うのは必要かもしれません。
その場合も、For ~ Nextの間に「何行目だったら改ページ」でも良いですし、
繰り返し処理を抜けた後に適宜改ページを入れる処理を書いても良いかもしれません。
ちょっぴり難しく考えるなら前者、簡単に考えるなら後者・・と言うところでしょうか。
少しでもヒントになれば。
No.3
- 回答日時:
ごめんなさい間違え発見しました。
if i = 14 then
ではなく、
if j = 14 then
です。
それと再度補足。
最終行を取得する時にA1を基準としていますが、ヘッダー(メーカー 商品名 数量)が入っているなら、
A2を基準とするか、A1を基準としたものから-1してください。
つまり、A1にヘッダーが含まれている場合、最終行がずれるということ。
A1からいきなり『トヨタ カローラ 1』と始まっているならそのままで問題ありません。
No.1
- 回答日時:
dim loopCnt as long ' 明細シートのデータ最終行
dim i as long ' ループカウンタ
dim j as long ' 14件判定用
j = 0
loopCnt = Worksheets("明細シート").Range("A1").End(xlDown).Row ' 明細シートのA1を基準に最終行を取得(データが入力されている分まで)
for i = 1 to loopCnt ' (5)に該当
(1)
j = j + 1
if i = 14 then ' (2)に該当
'印刷する確認ダイアログを出すならここに。
Worksheets("書式シート").PrintOut
j = 0 '(4)に該当
end if
(3)出来そうというので省略
next i
こんな感じでしょうか?
補足
思いついたのをそのままコード化にしたので、効率とかはいいとは言えないかも。。。
ただ、印刷したり、最終行取得だったりは正しいはず。
半角スペースやtabが全角スペースに置換されているので、そのままじゃエラーでます。
変数の型、定義、文法等小文字じゃだめなのがあるかもしれません。(書き方はあってるはず)
印刷に関するもっと詳しい記述が参照URLにかかれています。(確認ダイアログの出し方もかいてます。)
参考URL:http://officetanaka.net/excel/vba/sheet/sheet08. …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで不特定枚数印刷をしたいです。 4 2022/08/02 07:30
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- Excel(エクセル) Excel M365 データチェックの仕掛けを作りたい 2 2023/06/03 23:54
- Excel(エクセル) 特定のセルに数値が入っているシートのみ印刷する方法 2 2022/12/07 13:03
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
マクロで印刷→セルの値から部数...
-
エクセル印刷時 一枚の書類に...
-
エクセルの一部のセルの背景色...
-
エクセルのマクロで複数シート...
-
1ヶ月分の日付を一度に出す方法...
-
Excel 特定のシートを印刷不可...
-
エクセルの行タイトルを特定の...
-
エクセルでシートの色がグレー...
-
エクセルでのヘッダーをページ...
-
エクセルで行番号、列アルファ...
-
エクセルで複数のシートを同じ...
-
【Excel】複数シートがあるエク...
-
エクセルで複数のシートの1枚目...
-
Excel 2シートを1枚に印刷した...
-
EXCELで複数のシートを同時に印...
-
特定のシートのみ印刷できない...
-
Excelでシートを複数シート選択...
-
エクセルのページ設定を他のペ...
-
Excel等、同一の大きさでページ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
エクセルの一部のセルの背景色...
-
エクセル印刷時 一枚の書類に...
-
1ヶ月分の日付を一度に出す方法...
-
マクロで印刷→セルの値から部数...
-
エクセルの行タイトルを特定の...
-
エクセルのマクロで複数シート...
-
Excel 特定のシートを印刷不可...
-
エクセルで複数のシートの1枚目...
-
エクセルでのヘッダーをページ...
-
エクセルでシートの色がグレー...
-
エクセルで行番号、列アルファ...
-
条件によって印刷するシートを...
-
EXCELで複数のシートを同時に印...
-
エクセルのシート名を印刷した...
-
エクセルで複数のシートを同じ...
-
エクセルで、ヘッダーに他のシ...
-
EXCELで宛名だけ連続変更...
-
Excelであるシートだけ印刷でき...
-
エクセルの複数シートをNアップ...
おすすめ情報