Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1949 / 13645 ツリー ←次へ | 前へ→

【70886】マクロの実行速度(特定の文字のある行の非表示) はじん 12/1/12(木) 16:16 質問[未読]
【70888】Re:マクロの実行速度(特定の文字のある行... momo 12/1/12(木) 17:09 発言[未読]
【70889】Re:マクロの実行速度(特定の文字のある行... はじん 12/1/12(木) 17:11 お礼[未読]
【70890】Re:マクロの実行速度(特定の文字のある行... Jaka 12/1/12(木) 17:14 発言[未読]

【70886】マクロの実行速度(特定の文字のある行の...
質問  はじん  - 12/1/12(木) 16:16 -

引用なし
パスワード
   はじめまして
Excel2007を使用しております
当方初心者です
題名にあるように下記のマクロの実行速度を速くしたいのですが可能でしょうか
4つのシートでA列の4行目から1000行目に「none」と表示されていれば、その行を非表示にするというものです

マクロは勉強したてですので、相当回りくどいことをしていると思いますが
ご教授いただきますようお願いします


Sub RowHidden()
  
  Application.ScreenUpdating = False
  
  Dim rw As Long
 
  Sheets("AB").Select
    For rw = 4 To Range("A1000").End(xlUp).Row
    If Range("A" & rw).Value = "none" Then
      Rows(rw).Hidden = True
    End If
    Next
  Sheets("CD").Select
  For rw = 4 To Range("A1000").End(xlUp).Row
    If Range("A" & rw).Value = "none" Then
      Rows(rw).Hidden = True
    End If
    Next
  Sheets("EF").Select
  For rw = 4 To Range("A1000").End(xlUp).Row
    If Range("A" & rw).Value = "none" Then
      Rows(rw).Hidden = True
    End If
    Next
  Sheets("GH").Select
  For rw = 4 To Range("A1000").End(xlUp).Row
    If Range("A" & rw).Value = "none" Then
      Rows(rw).Hidden = True
    End If
    Next
    
   Application.ScreenUpdating = True
  
  End Sub
     

【70888】Re:マクロの実行速度(特定の文字のある...
発言  momo  - 12/1/12(木) 17:09 -

引用なし
パスワード
   ▼はじん さん:

別案で、ちょっと変わった方法です。

Sub RowHidden()
Dim ws As Worksheet
Dim myRng As Range

Application.ScreenUpdating = False
For Each ws In Worksheets(Array("AB", "CD", "EF", "GH"))
 With ws.Range("A4:A1000")
  .EntireRow.Hidden = False
  Set myRng = .Find("none", .Cells(1), xlValues, xlWhole)
  If Not myRng Is Nothing Then
   .EntireRow.Hidden = True
   .ColumnDifferences(myRng).EntireRow.Hidden = False
  End If
 End With
Next ws
Application.ScreenUpdating = False
End Sub

【70889】Re:マクロの実行速度(特定の文字のある...
お礼  はじん  - 12/1/12(木) 17:11 -

引用なし
パスワード
   一瞬でマクロがおわりました
無事うまくいきました

ありがとうございました
また宜しくお願いします

【70890】Re:マクロの実行速度(特定の文字のある...
発言  Jaka  - 12/1/12(木) 17:14 -

引用なし
パスワード
   こんな風な形にしてみてください。
ただし、noneの行が1シート3000行以上になるなら使うのはやめてください。
数が多くなるにつれて極端に遅くなってくるから。


Dim Sh As Variant, Rng As Range
For Each Sh In Array("Sheet1", "Sheet2", "Sheet3")
  With Sheets(Sh)
    For rw = 4 To .Range("A1000").End(xlUp).Row
      If .Range("A" & rw).Value = "none" Then
        If Rng Is Nothing Then
         Set Rng = .Rows(rw)
        Else
         Set Rng = Application.Union(Rng, .Rows(rw))
        End If
      End If
    Next
  End With
  If Not Rng Is Nothing Then
   Rng.EntireRow.Hidden = True
  End If
  Set Rng = Nothing
Next


もたもた削除して修正していたら、終わってた....。
ま、いっか。

1949 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free