[[20160621125001]] 『複数ブックの複数シートを非表示にしたい』(ななこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数ブックの複数シートを非表示にしたい』(ななこ)

いつも参考にさせております。VBA初心者です。

複数ブック(同じフォルダに保存)に存在する
同じ名前の複数シートを非表示にするにはどうしたらいいでしょうか?

<例>
ブック名:北海道、青森、宮城・・・沖縄

すべて同じシート名が存在する
『フォーム』『売上』『粗利』『本数』シート

この、『フォーム』シート以外(『売上』『粗利』『本数』シート)を
どのファイルも非表示にしたいのですが、うまくいきません。。

ご教示いただけませんでしょうか。
よろしくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


うまくいかない、ということは、そこまでコーディングしたものがあるはずです。まずはそれを見せてください。コードが見れないと、何に困っているのかさっぱり判りませんよ。
(???) 2016/06/21(火) 13:02

 念のためなんですが VBS ですね? VBA じゃなく。

(β) 2016/06/21(火) 13:09


失礼しました。
うまくいかない、というより、できないと言った方が正しかったです。。
本当に初心者で、下記のように作業中のファイルにて非表示にすることはできます。
ただこれを、同じフォルダ内のファイルすべてに・・・という方法がわかりません。

Sub 複数シートを非表示()
Dim SName As String
'表示対象シート

SName = "フォーム"
Sheets(Array("売上", "粗利", "台数")).Select
ActiveWindow.SelectedSheets.Visible = False
End Sub
(ななこ) 2016/06/21(火) 13:18


暇だったので作ってみました。

Sub フォームシート以外非表示()

    Dim Wb As Workbook
    Dim Ws As Worksheet
    Dim myfdr As String, fName As String
    Dim dlg As FileDialog

    Application.ScreenUpdating = False

    MsgBox "ファイルが格納されているフォルダを選択してください"

    Set dlg = Application.FileDialog(msoFileDialogFolderPicker) 'フォルダ選択

    'キャンセルボタンクリック時にマクロを終了
    If dlg.Show = False Then Exit Sub

    'フォルダーのフルパスを変数に格納
    myfdr = dlg.SelectedItems(1)

    fName = Dir(myfdr & "\*.xls")  'フォルダ内のエクセルファイルを検索

    Do Until fName = Empty '全エクセルファイル検索
        Set Wb = Workbooks.Open(myfdr & "\" & fName)
        For Each Ws In Wb.Sheets 'ブック内の全シートで
            If Ws.Name <> "フォーム" Then   'シート名が「フォーム」以外なら全て非表示
                Ws.Visible = False
            End If
        Next Ws '次のシートへ
        Wb.Close SaveChanges:=True '上書き保存して閉じる
        fName = Dir 'フォルダ内の次のExcelブックを検索
    Loop

    MsgBox "完了しました"

End Sub

(通ります) 2016/06/21(火) 13:33


どうやら、VBSではなく、VBAですね?

対象のブックには、必ず非表示対象の3つのシートが含まれる、という条件ならば、以下のように簡単に書けたりします。
(マクロの入った、自分自身のブックは除外するようにしてます)

 Sub test()
    Dim cPath As String
    Dim cFile As String

    cPath = ActiveWorkbook.Path & "\"
    cFile = Dir(cPath & "*.xls*")
    While cFile <> ""
        If LCase(cFile) <> LCase(ActiveWorkbook.Name) Then
            With Workbooks.Open(cPath & cFile)
                .Sheets(Array("売上", "粗利", "台数")).Visible = False
                .Save
                .Close
            End With
        End If
        cFile = Dir
    Wend
 End Sub
(???) 2016/06/21(火) 14:25

通ります様
ありがとございます!無事処理ができました・・・本当にありがとうございます。
一つひとつの作業に何をしているかのコメントがあり、すごくわかりやすいです。
作業完了後、どの指示が何をしているのかを復習しようと思います。ありがとうございました。

???様
ありがとうございます!ただ、なぜかエラーになってしまいました。。
今回は表示するシートが一つだけですが、逆に複数表示で一つだけ非表示にしたい場合も
あると思いますので、何が悪いのか自分なりに検証してみようと思います。

(ななこ) 2016/06/21(火) 15:00


私のほうのコードでエラーになりそうなのは、非表示にしたい3シート全てが「必ず存在する」必要がある点です。元の非表示ロジックを活かした書き方にして判りやすくしたのですが、まぁ使いにくいでしょうね。シートがあれば消す、という書き方に直せば、汎用性が出るでしょう。

通りますさんの方は逆に、隠したくないシート以外全てを隠すので、対象が無くてもエラーにならない訳です。
コードが長くなりますが、実用的な考え方です。
(???) 2016/06/21(火) 15:15


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.