2013-07-17 4 views
0

Excel 매크로에 문제가 있습니다. Excel 2003을 사용하고 있습니다. Excel 문서에서 많은 데이터가 있으며 특정 데이터를 볼 수 있도록 매크로를 만들어야합니다.Excel VBA 매크로, 자동 필터링 된 데이터 및 숨기기 열

이 문서의 모든 데이터는 다른 Excel 문서에서 가져 왔습니다. 제 말은 가치가 아니라 공식입니다. 첫 번째 행은 이름, 성, 번호, 교육 이름 등과 같은 데이터 레이블로 설정됩니다. 아래의 행은 해당 데이터로 채워집니다.

내가 원하는 작업은 다음과 같습니다. 1. 특정 열 기준에 따라 데이터를 필터링하십시오. 2. 매크로 사용 : - 값 "1"에 대해 범위의 모든 열 (범위 G : BV)을 검색 - 열의 임의 셀에 값 "1"이있는 경우 - 언제 값 "1"을 찾을 수 없습니다. 열을 숨겨야합니다.

내 문제에 대해 뭔가 알기 위해 열심히 노력했지만 성공하지 못했습니다. 지금까지이 코드를 생각해 냈습니다 :

Sub FindHid() 

Dim vFind 
Dim rSearch As Range 

On Error GoTo 0 

vFind = 1 

Application.ScreenUpdating = True 

For i = 7 To 75 

With ActiveSheet.Columns("G:G") 
    Set rSearch = .Find(vFind, LookIn:=xlValues, MatchCase:=False) 

    If rSearch Is Nothing Then 
     .EntireColumn.Hidden = True 

     Else 
     .EntireColumn.Hidden = False 

    End If 
End With 
Set rSearch = Nothing 
Next i 

End Sub 

답변

0

그것은 그러나 그것은 작동합니다, 내 문제에 대한 최선의 해결책되지 않습니다 :

Sub FindHid() 

Dim vFind 
Dim rSearch As Range 

'On Error GoTo ErrorHandle 
Application.ScreenUpdating = False 

vFind = 1 

Range("F1").Select 

For i = 1 To 68 
    ActiveCell.Offset(0, 1).Range("A1").Select 
    Range(Selection, Selection.End(xlDown)).Select 

    Set rSearch = Selection.Find(vFind, LookIn:=xlValues, LookAt:= _ 
     xlWhole, MatchCase:=True) 

     If rSearch Is Nothing Then 
      Selection.EntireColumn.Hidden = True 

     Else 
      Selection.EntireColumn.Hidden = False 

     End If 

Next i 
Application.ScreenUpdating = True 
Range("A1").Select 

End Sub 
0

나는 Find 메서드를 사용하지 않을 것입니다.

NRows = ActiveSheet.UsedRange.Rows.Count 
For R = 2 To NRows 
    If Rows(R).Hidden Then 
+0

내가 다른 anwser에서 언급 한 바와 같이, 내가 VBA에서 교육을받지 못한입니다. 그래서 당신이 힌트를 주면 어디에 넣어야합니까? 내 말은 ".Find"또는? – lowak

0

내 코드 : 같은 뭔가 시도

Sub HideNonOnes() 
    Dim rngToSearch As Range 
    Dim rng As Range 
    Dim rngToHide As Range 

    Set rngToSearch = Range("G2", Range("G2").End(xlDown).End(xlToRight)) 

    For Each rng In rngToSearch.Columns 
     If Evaluate("ISNA(MATCH(1," & rng.Address & ",0))") Then 
      If rngToHide Is Nothing Then 
       Set rngToHide = rng.Range("A1") 
      Else 
       Set rngToHide = Union(rngToHide, rng.Range("A1")) 
      End If 
     End If 
    Next rng 
    If Not rngToHide Is Nothing Then 
     rngToHide.Columns.Hidden = True 
    End If 
End Sub 

그것은 한 번에 모든 열을 숨기기 전에 범위 rngToHide을 구축합니다.

+1

이 방법이 효과적이지만'rngToSearch'를 설정하는 방법이 약간 위험하다고 생각합니다. G 열이 비어 있으면 어떻게 될까요? 결국'$ G $ 2 : $ XFD $ 1048576'의 범위로 끝납니다. –

+0

그리고 4000 점을 축하합니다! 나는 나 자신을 거기에 가려고 노력하고있다. –

+0

@HeadofCatering 고맙습니다;) 네, 일반적으로 그 방법을 사용하지 않을 것입니다. 방금 범위를 사용하기 위해 사용했습니다. End()는 일반적으로 데이터가 있는지 또는 어떤 행/열이 반환되는지를 확인할 수 있어야만 사용됩니다. –