Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
シートの移動
投稿日時: 17/12/04 10:21:06
投稿者: nob1122

よろしくお願いします。
  
複数シートがあるため、マクロで移動したいと思います。
  
行いたいこと
  
@まず、左から何番目(例えば、5番目)のシートに移動したい。
A(ある条件に沿って印刷後)右隣のシートに移動したい。
B一番右のシート(例えば、「終」シートと記名する)になったら、移動終了
  
以上です。

回答
投稿日時: 17/12/04 11:48:36
投稿者: sk

引用:
シートの移動

引用:
複数シートがあるため、マクロで移動したいと思います。

ここでの「移動」が「任意のシートの位置の移動(変更)」ではなく
「任意のシートのフォーカスの移動(シートのアクティブ化)」という
意味であるとして、
 
引用:
@まず、左から何番目(例えば、5番目)のシートに移動したい。
A(ある条件に沿って印刷後)右隣のシートに移動したい。
B一番右のシート(例えば、「終」シートと記名する)になったら、移動終了

「複数のシートの印刷」が主目的であるならば、
印刷対象となるシートをいちいちアクティブ化する
必要はないでしょう。
 
----------------------------------------------------------------------
Private Sub subTest()
 
    Dim xlsSheets As Excel.Sheets
 
    '1番目と3番目のシートの参照
    Set xlsSheets = ThisWorkbook.Sheets(Array(1, 3))
    '印刷プレビュー
    xlsSheets.PrintPreview
    Set xlsSheets = Nothing
 
End Sub
----------------------------------------------------------------------

投稿日時: 17/12/04 12:11:30
投稿者: nob1122

sk 様、早速の回答に感謝いたします。
 
「シートの移動」では、説明不足でした。おっしゃる通り、「シートのアクティブ化」です。
 
ご指摘の通り、条件に合うシートを選択する方法もあるのですね。勉強になります。
 
それで、
 
各シートの、指定セルを参照し、印刷する、しないをしたかったのですが、
 
例えば、A1セルの数値が、0(ゼロ)以外ならば印刷する。という具合にしたいのですが…

回答
投稿日時: 17/12/04 13:36:24
投稿者: sk

引用:
各シートの、指定セルを参照し、印刷する、しないをしたかったのですが、
  
例えば、A1セルの数値が、0(ゼロ)以外ならば印刷する。という具合にしたいのですが…

-------------------------------------------------------------
Private Sub subTest()
     
    '変数の宣言
    Dim xlsWorkbook As Excel.Workbook
    Dim xlsSheets As Excel.Sheets
    Dim xlsWorksheet As Excel.Worksheet
    Dim lngCount As Long
    Dim aryIndexes() As Variant
     
    'このブックの参照
    Set xlsWorkbook = ThisWorkbook
     
    'シートカウンタの初期化
    lngCount = -1
    '参照中のブックの全てのワークシートを順次参照
    For Each xlsWorksheet In xlsWorkbook.Worksheets
        '参照中のワークシート A1 セルの値が 0 ではない場合
        If xlsWorksheet.Cells(1, 1).Value <> 0 Then
            '参照中のワークシートのインデックス番号を配列に追加
            lngCount = lngCount + 1
            ReDim Preserve aryIndexes(lngCount)
            aryIndexes(lngCount) = xlsWorksheet.Index
        End If
    Next
     
    '印刷条件に該当するワークシートが 1 つもない場合
    If lngCount < 0 Then
        Set xlsWorksheet = Nothing
        Set xlsWorkbook = Nothing
        'プロシージャを抜ける
        Exit Sub
    End If
     
    '印刷条件に該当する全てのシートの参照
    Set xlsSheets = xlsWorkbook.Sheets(aryIndexes)
    '印刷プレビュー
    xlsSheets.PrintPreview
    '(プレビューせずに)直接プリンタに出力する場合
    'xlsSheets.PrintOut
     
    Set xlsWorksheet = Nothing
    Set xlsSheets = Nothing
    Set xlsWorkbook = Nothing
  
End Sub
-------------------------------------------------------------
 
以上のような感じでしょうか。

回答
投稿日時: 17/12/04 13:49:39
投稿者: もこな2

すでにskさんが回答されておられますが、一応、テンプレ的なところから。
「Q&A 掲示板ご利用上のお願い」の「禁止事項」に以下のようにあります。
コード制作依頼
「●●●を実行するようなマクロを作りたいのですが」「●●●をする方法を教えてください」といった、コード制作依頼ともとれるような質問はおやめください。
 
ですので、マクロの記録をちょっと手直しした程度でも、コードの提示があるとないとでは、アドバイスのしやすさが変わってきますので、今後ご質問される際にはご留意いただければ幸いです。
 

引用:
各シートの、指定セルを参照し、印刷する、しないをしたかったのですが、
例えば、A1セルの数値が、0(ゼロ)以外ならば印刷する。という具合にしたいのですが…

こちらも、skさんが回答されておられますが、別アプローチとしてこんなやり方もあろうかと思われます。
Sub sample01()
Dim WS As Worksheet

 'マクロが保存されているブックの全ワークシートを順番に処理
For Each WS In ThisWorkbook.Worksheets
    'ワークシートの「A1」セルの値が0でなければ印刷を実行
    If WS.Range("A1").Value <> 0 Then WS.PrintOut
Next WS

End Sub

投稿日時: 17/12/04 14:21:02
投稿者: nob1122

sk様
もこな2様
 
ご示唆、ありがとうございました。