2016-07-08 20 views
0

特定のセルの特定の列の値が存在しないすべての行を非表示にするマクロを作成しました。データの最後の行で終了する終了行指定

私はこのコードを持っている:瞬間とendRow = 6で

を、これが最後の行のためのマクロの6行目までアップしかし、私Infactは、それが何をしたいですが実行されていることは、データの最後の行であることを停止してください。

ループ機能を使用してループを実行するかどうかはわかりません。

アイデア?

Sub Hidemacro() 
BeginRow = 1 
EndRow = 6 
ChkCol = 5 

For RowCnt = BeginRow To EndRow 
    If Cells(RowCnt, ChkCol).Value = "" Then 
     Cells(RowCnt, ChkCol).EntireRow.Hidden = True 
    Else 
     Cells(RowCnt, ChkCol).EntireRow.Hidden = False 
    End If 
Next RowCnt 
End Sub 
+0

使用 'とendRow =細胞(sht.Rows.Countを、 "A")終了(xlUp).Row'、より良いあなたはまた、シートの参照 –

+0

Iを持っている場合この行にオブジェクトが必要であることを示すエラーが表示されました – George

+0

投稿にエラーがあります。列にデータがある場合は、 'EndRow = Cells(Rows.Count、" A ")End(xlUp).Row'を試してください。 A –

答えて

0

代わりにこれを試してみてください:

Sub Hidemacro() 

    'set a reference to active sheet 
    Dim sht As Worksheet 
    Set sht = Application.ActiveSheet 

    'set macro variables 
    Dim BeginRow As Long 
    Dim EndRow As Long 
    Dim ChkCol As Long 

    'set up variables 
    BeginRow = 1 
    EndRow = sht.Cells(Rows.Count, "A").End(xlUp).Row 
    Debug.Print EndRow 
    ChkCol = 5 

    'do the hiding of rows - your original code plus sht reference 
    For RowCnt = BeginRow To EndRow 
     If sht.Cells(RowCnt, ChkCol).Value = "" Then 
      sht.Cells(RowCnt, ChkCol).EntireRow.Hidden = True 
     Else 
      sht.Cells(RowCnt, ChkCol).EntireRow.Hidden = False 
     End If 
    Next RowCnt 

End Sub 
0

私は気分であったため、ここでは(ChkColここでCOL 1を空のセルを持つすべての行を非表示にします「ワンライナー」があります、しかし、あなたは明らかにそれを変更することができます)

Option Explicit 
Sub Hidemacro() 
    Const ChkCol As Long = 1 
Range(Cells(1, ChkCol), Cells.Find("*", Cells(1, ChkCol), xlFormulas, , xlByRows, xlPrevious)).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 
End Sub 

ChkCol内のセルのいずれかである空またはnull文字列が含まれている行を非表示にするマクロで使用するには、この概念を拡大します。マクロを実行しているワークシートを明示的に定義することは、通常は良いことです(以下のマクロでは、実際にその機能を望む場合は明示的にSet WS = ActiveSheetとすることができます)。あなたは多くの行があれば高速に実行可能性があります。

Option Explicit 
Sub Hidemacro() 
    Const ChkCol As Long = 1 
    Const BeginRow As Long = 1 
    Dim WS As Worksheet 
    Dim myRange As Range, R As Range 

Set WS = Worksheets("sheet1") 

Application.ScreenUpdating = False 

With WS 

.Cells.EntireRow.Hidden = False 

With Range(.Cells(BeginRow, ChkCol), .Columns(ChkCol).Find(_ 
    what:="*", _ 
    after:=.Cells(BeginRow, ChkCol), _ 
    LookIn:=xlFormulas, _ 
    searchorder:=xlByRows, _ 
    searchdirection:=xlPrevious)) 

    .SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 

    For Each R In .SpecialCells(xlCellTypeVisible).Cells 
     If Len(R.Text) = 0 Then R.EntireRow.Hidden = True 
    Next R 
End With 

End With 

Application.ScreenUpdating = True 
End Sub 
関連する問題