質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2093閲覧

VBAのマクロ印刷について

mdaigo

総合スコア9

印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2020/03/23 09:40

自動印刷のため以下のようなマクロを書いてみました。

VBA

1Sub Printing() 2Dim print_start, print_end, counter As Integer 3print_start = InputBox("put the first page number") 4print_end = InputBox("put the last page number") 5For counter = print_start To print_end 6Cells(4, 2) = counter 7ActiveWindow.SelectedSheets.PrintOut Copies:=1 8Next 9End Sub

すると、下のようなエラーになります。
イメージ説明

どのように直せばいいのでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattuwan

2020/03/24 00:26

エラーが再現できません。が、回数分数字を変えて印刷でいいのですか? やりたいことも合わせて書いて下さい。
mdaigo

2020/03/24 00:34

どうもコメントありがとうございます。 はい、やりたいことは一人一人の個票を印刷していくものです。 エラーに関してなんですが、実行してみると上のようなエラーがでるときもあれば、デバックして For counter = print_start To print_end のところが黄色くなることもあります。 最近マクロの勉強を始めて、参考に先人のブログに貼り付けてあるコードをそのままコピペさせていただいたりするのですが、それでも結構エラーがでたりします(メモリが足りないやコンパイルエラーなど)。これはエクセルやパソコンに問題があるのかなと思ってしまいます。
mattuwan

2020/03/24 00:44

メモリが足りないのはパソコンではなくエクセルの問題ですね。 回避の方法があるとは思いますが、状況を再現できないと、 代わりに原因を突き止めるということは難しくなります。 一人一人の個票と言われても解りません。 業務の用語ではなく、エクセルのシート上の説明をお願いします。
mdaigo

2020/03/24 00:53

うー、初心者でどう説明していいかわからないのですが、エクセルで、vlook関数を使って、番号を打ち込むと、別シートのリストを参照して、その人のデータが表示されるものです。
mdaigo

2020/03/24 01:28

すいません、調べてみたところ、おそらくmacのエクセルであることが原因の可能性がたかそうです。 どうもありがとうございました。
mattuwan

2020/03/24 03:22

? 番号を打込むのは手動でやって、マクロの中でやってるのは、 始まりと終わりのページ番号のいみですか? あと、複数シートは手動で選択しているのですか? そちらが初心者かどうかで、僕の対応は変わりません。ただし、解決に向かうようアドバイスはしたいと思ってます。 まずは、エクセル君に仕事をしてもらうんじゃなくて、回答者に、 その仕事を手動でしてもらうつもりで、説明してください。
mdaigo

2020/03/25 03:32

エクセルくん、なるほど。そうやってちゃんと説明することが大事なんですね。 作りたいマクロは、初めの番号と最後の番号を手入力すれば、その範囲のシートを自動で印刷してくれるものです。Cells(4,2)のところに印刷している番号がでるようにしました。「あと、複数シートは手動で選択しているのですか?」ということでしたが、これに関してはよく理解できていません。上で番号を入れれば、自動で1つずつ1が足されていくのかなと思ったのですが、もしや1+=のようなものをどこかに入れなければいけないのでしょうか。 ネットで調べていたら、ActiveWindow.SelectedSheets.PrintOut Copies:=1は、Macの場合はThisWorkbook.ActiveSheet.PrintOutにしないといけないというのを見つけました。ただそうやっても上と同じエラーがでました。 お時間をとっていただき感謝です。
mattuwan

2020/03/25 03:45

>ActiveWindow.SelectedSheets アクティブなシートの選択されたシート群(1つの場合も含む)という意味です。 なので、マクロ実行前に意図するシートを複数選択してあると読みましたが、 そういう事ではないのですね。 印刷したいのは、特定の決まったシート1つ。 で、 Cells(4, 2) = counter とセルに数値を入力したら、 それによって、シート上の数式が再計算されて、 その結果を次々印刷したいといことですかね?
mdaigo

2020/03/25 03:57

はい、シートは1つです。手動でやれば、セルの番号を変えれば、vlookupで別のシートにあるデータをもってきれくれて表示してくれるので、それを印刷するのですが、いちいち番号を変えることを自動でできたらなと。Cells(4,2)には、印刷されるシートの番号が表示されるようにしたつもりでした。
guest

回答1

0

ベストアンサー

Worksheets("Sheet1").PrintOut

と、ちゃんと印刷したいシートを明示したらいかがでしょうか?

ExcelVBA

1Option Explicit 2 3Sub test() 4 Dim n As Variant 5 Dim s As String 6 Dim flg As Boolean 7 8 s = InputBox("番号入力" & vbLf & _ 9 "例)連番1-5、飛び番5,10,12、混合1-5,8,10-25") 10 If StrPtr(s) = 0 Then Exit Sub 11 12 If GetNumber(s) Then 13 For Each n In Split(s, ",") 14 flg = True 15 Worksheets("Sheet1").Cells(4, 2).Value = n 16 'Worksheets("Sheet1").PrintOut 17 Worksheets("Sheet1").PrintPreview 18 Next 19 End If 20 21 If flg = False Then 22 MsgBox "入力が不正です。" 23 End If 24End Sub 25 26'連番を生成する自作関数 27Private Function GetNumber(ByRef ss As String) As Boolean 28 Dim r As String 29 Dim v As Variant 30 Dim s As Variant 31 Dim n As Variant 32 Dim i As Long 33 34 r = ss 35 36 '不要なカンマを除去 37 If Right(r, 1) = "," Then r = Left(r, Len(r) - 1) 38 If Left(r, 2) = "," Then r = Mid(r, 2) 39 r = Replace(r, ",", " ") 40 r = WorksheetFunction.Trim(r) 41 r = Replace(r, " ", ",") 42 43 'ハイホンの文字列を連番に変換 44 For Each v In Split(r, ",") 45 If InStr(v, "-") Then 46 s = Split(v, "-") 47 For Each n In s 48 If Not IsNumeric(n) Then GoTo WayOut 49 Next 50 For i = s(0) To s(1) 51 n = n & "," & i 52 Next 53 r = Replace(r, v, Mid(n, 2)) 54 End If 55 Next 56 ss = r 57 GetNumber = True 58 Exit Function 59 60WayOut: 61End Function 62

投稿2020/03/25 19:18

mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mdaigo

2020/03/27 02:48

mattuwan様、これほど丁寧に書いていただいてありがとうございます。実行したら PrintPreviewのところでエラーがでてしまいましたので調べたら、macではPreviewできないというコメントを見つけました。そこを抜いて実行してみたら、何のエラーもなくなりました。 それにしても「不要なカンマを除去」のところと「ハイホンの文字列を連番に変換」のところはすごいですね。こんなの自分には到底かけそうもありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問