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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

解決済

2回答

1087閲覧

同じ作業を繰り返したい

mi07

総合スコア20

VBA

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

0グッド

0クリップ

投稿2019/11/15 04:55

編集2019/11/15 04:59

VBA

1Sub 印刷() 2' 3' 印刷 Macro 4' 5 6 Dim rc As Long 7 rc = MsgBox("sheet2の帳簿を印刷しますか?", vbYesNo + vbQuestion) 8 9 If rc = vbYes Then 10 11 Sheets("sheet2").Select 12 ActiveWindow.SelectedSheets.PrintOut 13 Sheets("sheet1").Select 14 Range("C2:F3").Select 15 16 Else 17 End If 18 19End Sub

VBA初心者で、本とネットで勉強しながら、上記を作成しました。

上記の式をsheet2-8で繰り返し行いたいです。
sheet2~8まで、それぞれのシートの印刷が必要かどうか問い、
必要であれば印刷、
不要であれば次のシートが必要か問う
という形を作成したいです。

この式のシート名を変えて、下に数珠すなぎに繰り返せばいいと思うのですが、
他に方法があるように思い…しかし、たどり着けません。

sheet名は日本語表記に変更しています。

ご教授いただけると助かります。

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

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

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

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

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

guest

回答2

0

ベストアンサー

シート名が日本語名でも対応できるように修正した版です。
shs配列に印刷対象にしたシート名を記入してください。
動作は未検証です。

VBA

1Sub 印刷() 2' 3' 印刷 Macro 4' 5 Dim rc As Long 6 Dim i As Long 7 Dim shs() As Variant 8 Dim sh As String 9 10 shs = Array("sheet2", "sheet3", "sheet4", "sheet5", "sheet6", "sheet7", "sheet8") 11 12 For Each sh In shs 13 rc = MsgBox(sh & "の帳簿を印刷しますか?", vbYesNo + vbQuestion) 14 If rc = vbYes Then 15 Sheets(sh).Select 16 ActiveWindow.SelectedSheets.PrintOut 17 End If 18 Next 19 Sheets("sheet1").Select 20 Range("C2:F3").Select 21 22End Sub

修正前版

やりかたは色々ありますが、この場合ですとForループを使うと修正量も少ないかと。
単純に書き換えるとこんな感じです(動作未検証)。

VBA

1Sub 印刷() 2' 3' 印刷 Macro 4' 5 Dim rc As Long 6 Dim i As Long 7 Dim sn As String 8 9 For i = 2 To 8 10 sn = "sheet" & i; 11 rc = MsgBox(sn & "の帳簿を印刷しますか?", vbYesNo + vbQuestion) 12 If rc = vbYes Then 13 Sheets(sn).Select 14 ActiveWindow.SelectedSheets.PrintOut 15 End If 16 Next 17 Sheets("sheet1").Select 18 Range("C2:F3").Select 19 20End Sub 21

投稿2019/11/15 05:09

編集2019/11/15 05:17
ttyp03

総合スコア16998

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

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

ttyp03

2019/11/15 05:10

> sheet名は日本語表記に変更しています。 見逃してました。 このコードだとダメだ。
ttyp03

2019/11/15 05:18

修正版をアップしました。
mi07

2019/11/15 05:19

早々にありがとうございます! やってみます!
mi07

2019/11/15 09:28

For Each sh In shs shのぶぶんで、エラーとなり、for eachを配列で使用する場合は、バリアント型の配列でというエラーとなりました。ちょっとよくわからないので(笑)勉強してみます! ありがとうございました!
ttyp03

2019/11/15 09:34

エラーの通りshをバリアント型にしないといけないようでした。 Dim sh As Variant やはり動作確認しないとダメですね。
mi07

2019/11/15 09:45

ちょうどその回答に行きつきました!ありがとうございました!
guest

0

WorkSheets を For Each で回しても良いと思います。
シート名が「sheet1」以外を対象にしています。

※印刷したくないシートが複数の場合は、ttyp03さんの方が良いと思います。

動作は未検証です。

VBA

1Sub 印刷() 2' 3' 印刷 Macro 4' 5 Dim rc As Long 6 Dim sheetTarget as WorkSheet 7 Dim sn As String 8 9 For Each sheetTarget in ActiveWorkBook.Worksheets 10 If sheetTarget.name <> "sheet1" Then 11 12 rc = MsgBox(sheetTarget.name & "の帳簿を印刷しますか?", vbYesNo + vbQuestion) 13 If rc = vbYes Then 14 sheetTarget.Select 15 ActiveWindow.SelectedSheets.PrintOut 16 End If 17 18 End If 19 Next 20 Sheets("sheet1").Select 21 Range("C2:F3").Select 22 23End Sub

投稿2019/11/15 05:58

trick

総合スコア366

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

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

mi07

2019/11/15 09:29

ありがとうございます!今回は印刷しないシートが複数あるので、使用できないのですが、こんな方法があるとは知らなかったので、大変勉強になりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問