- 締切済み
EXCELで表示しない列、行があるファイルを検索する方法
いつもお世話になっております。 現在、300ファイル近くのEXCELファイルの中から、表示しないを選択されている列、行がないかの確認をしております。 一括で確認ができる方法をご存知の方が折られましたらご教授いただけませんでしょうか。 以上、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
No1 merlionXXです。 No1の回答では可視セルのアドレスを比較して非表示行あるいは列を検知していましたが、可視セル数で比較した方がよいと考え直してきてみたらNo2さんからも可視セル数で比較するのが出ていましたね。 一応貼っておきます。 Sub TEST02() Dim wb As Workbook, mb As Workbook Dim myFdr As String, fname As String Dim w As Worksheet Dim n As Long, i As Long Dim myAr() Application.ScreenUpdating = False '画面更新停止 myFdr = ThisWorkbook.Path 'このブックのパス取得 fname = Dir(myFdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> ThisWorkbook.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myFdr & "\" & fname) 'そのブックを開きwbとする。 For Each w In wb.Worksheets 'wb各シートに If w.Cells.Count <> w.Cells.SpecialCells(xlCellTypeVisible).Count Then '可視セル数が違えば ReDim Preserve myAr(i) myAr(i) = wb.Name & " の " & w.Name 'BOOK&シート名を配列に保存 i = i + 1 '該当シート数カウント End If Next w '次のシートを繰り返し wb.Close (False) '保存しないで閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新停止解除 If i > 0 Then '該当シートがあれば MsgBox n & "件のブックをcheckし、" & Join(myAr, "/") & " に非表示行または列を発見しました。" Else 'なければ MsgBox n & "件のブックをcheckしましましたが非表示行または列はありません。" End If End Sub
- imogasi
- ベストアンサー率27% (4737/17070)
>をご存知の方が折られましたらご教授いただけませんでしょうか。 操作のことを言っているなら、そんな人いない。無いのだから。 エクセルでの課題解決はは (1)人間の操作 (2)関数 (3)VBA (2)は表示・非表示の確認に全く役立ちません。 (1)を繰り返して確認すれば、理論上出来ないことは無い。 一括1度の操作でやれるなんてありえない。 ーー ブック数が多い シート数は多いのか(質問に書くのが当たり間) などの理由から、VBAで繰り返しをやらないと他に方法はない。質問者はVBAの経験有るのか。無いようにおもう。VBAのVの記述も質問には無い。 そういう、情況ではコードを書いてくださいになって、このコーナーを下請け的に使うことになる。これがはやると、回答者はたまったもので無い。 質問者が勉強のこと。 ーー もうひとつ、300のファイルが1つのフォルダにでもまとまっているのか。まとまっているなら Googleで「フォルダ ファイル 取得 VBA」で照会したらコード例がたくさん出る。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html などが一例。 ーー 1つのブック(名)を捕まえたら、そのブックを開きその中の全シートを1つづつ捕まえる必要がある。 今のブックで、標準モジュール(コードを書く場所)に Sub test01() For Each sh In Worksheets MsgBox sh.Name Next End Sub を実行すると感じがわかる。 シートまで結いついたら、シートに>表示しないを選択されている列、行がないかのチェックを行う。 行の非表示をマクロの記録をとると Sub Macro1() Rows("4:4").Select Selection.EntireRow.Hidden = True End Sub だから、全行に渉って 行.EntireRow.Hidden = True かどうか聞く方法もある。 Sub test03() For Each sh In Worksheets For i = 1 To Rows.Count If sh.Cells(i, "a").EntireRow.Hidden = True Then MsgBox "シート" & sh.Name & "行" & i & "に非表示セル・非表示行や列あり" End If Next i Next End Sub これでは行だけだし、有効データ行に絞る必要が有る。 (最終行を捉えるとか、CurrentRegionを捕まえる。) ーーー また既回答などのように Sub test02() For Each Sh In Worksheets Set x = Sh.Cells.SpecialCells(xlCellTypeVisible) '可視セルを捕まえる a = x.Count 'セル数カウント b = Cells.Count '全セル数カウント If a < b Then MsgBox "シート" & Sh.Name & "非表示セル・非表示行や列あり" End If Next End Sub などを参考に。 ーー どれも繰り返しが多いので、300ブックでは処理時間が心配。
- merlionXX
- ベストアンサー率48% (1930/4007)
VBAでやるしかないですね。 以下の手順をおためしください。 まず、.このマクロを書くBOOKをかならず対象のBOOKがあるフォルダーに「保存」してください。パス取得のため「保存」は必須です。 1.AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。 2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピペします。 '********これより下********** Sub TEST01() Dim mb As Workbook Dim myFdr As String, fname As String Dim w As Worksheet Dim n As Long, i As Long Dim x As Range Dim myAr() Application.ScreenUpdating = False '画面更新停止 Set mb = ThisWorkbook 'このマクロがあるブックをmbとする。 myFdr = ThisWorkbook.Path 'このブックのパス取得 fname = Dir(myFdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myFdr & "\" & fname) 'そのブックを開きwbとする。 For Each w In wb.Worksheets 'wb各シートに Set x = w.Cells.SpecialCells(xlCellTypeVisible) '可視セル範囲 If x.Address <> "$1:$" & Rows.Count Then 'アドレスで確認 ReDim Preserve myAr(i) myAr(i) = wb.Name & "-" & w.Name 'BOOK&シート名保存 i = i + 1 End If Set x = Nothing Next w wb.Close (False) '閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新停止解除 If i > 0 Then 'あれば MsgBox n & "件のブックをcheckし、" & Join(myAr, "/") & "に非表示行または列を発見しました。" Else 'なければ MsgBox n & "件のブックをcheckしましましたが非表示行または列はありません。" End If End Sub '********これより上********** 3.Alt+F11キーでデータのあるワークシートへもどります. 4. Alt+F8キーで出てきたマクロ名(test01)を選択して実行します。