2016-06-26 1 views
0

다른 시트의 값을 통합하는 매크로가 있으며이 값을 기반으로 첫 번째 시트로 돌아가서 삭제해야합니다.다른 시트를 기반으로 시트에서 행을 삭제하는 매크로

G2 it의 값 (Linha 마누라)의 경우 F2의 행 번호를 얻고 행의 미리보기를 삭제합니다. 그 외의 경우 I2로 이동하고 동일한 작업을 수행합니다. 도와 주셔서 감사합니다.

Sheet

지금까지이 있습니다

Sub Delete() 

    Range("G2").Select 
    Do Until IsEmpty(ActiveCell) 
    Range("G" & Rows.Count).Select 
    If Range("G" & 2).Value = ("<<<Manter a linha") Then 
    Sheets("Controle Estoque Fixo").Select 
    Rows("2:5").Select 
    Selection.EntireRow.Delete 
    End If 
    Loop 

편집 : 이제

Dim r1 As Range, c As Range 
    Dim s As String 
    Dim v As String 
    Dim k As String 
    Dim t As String 
    k = "1" 
    Set r1 = Range(Cells(2, "H"), Cells(Rows.Count, "H").End(xlUp)) 
    v = Sheets("Analise de Estoque").Cells(2, "G").Value 
    For Each c In r1 
     If c.Text = ("<<<Manter a linha") Then 
     Sheets("Controle Estoque Fixo").Select 
     t = (v - 1) 

     Rows(t).Select.Clear 


     End If 
    Next 
End Sub 

내가 돌아가서 행이 들어있는 셀의 값을 선택할 수 있습니다, 그 I 계속 지키고 싶습니다. 그래서 "- 1"을 앞에 붙이면됩니다.하지만 구걸을 추가하려고 노력하고 있습니다. (T를 문자열로 넣고 = 1 넣으 려합니다)

+0

에 마지막 행에서 가야 행을 삭제할 때'macro' 태그의 설명을 읽어 않았 음을 기억 하는가? * MS Office/VBA/매크로 langauges * 아닙니다. 제거되었습니다. – trincot

+0

안녕하세요! 변수를 행 번호로 사용하여 루프 할 항목이 있어야합니다. 그런 다음'If' 테스트 후''F "& i' 또는''H"& i' ('i'는 현재 행 번호)의 셀 값을 사용하고 다른 시트에서 삭제를 수행하십시오. 행 번호를 증가시키는 것을 잊지 마십시오. 행을 삭제할 때 행 번호가 더 아래로 변경되므로주의하십시오. 아마도'.Clear' 나'.ClearContents'가 더 적절할 것입니다. [Here] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)는 '선택'및 '활성 셀'을 피하는 방법에 대한 팁입니다 – arcadeprecinct

답변

1

범위를 작성하고 모든 행을 한 번에 삭제해야합니다.

Sub DeleteMatches() 
    Dim r1 As Range, c As Range 
    Dim s As String 

    Set r1 = Range(Cells(2, "G"), Cells(Rows.Count, "G").End(xlUp)) 

    For Each c In r1 
     If c = "<<<Manter a linha" Then 
      If Len(s) Then s = s & "," 
      s = s & "A" & c.Offset(0, -1) 
     End If 
    Next 

    If Len(s) Then 
     s = Left(s, Len(s) - 1) 
     Sheets("Controle Estoque Fixo").Range(s).EntireRow.Delete 
    End If 

End Sub 

행을 삭제하고 삭제하지 않으려면 원하는대로 수행 할 수 있습니다.

Sub DeleteMatches2() 
    Dim r1 As Range, c As Range 
    Dim t As String 

    With Sheets("Analise de Estoque") 
     Set r1 = .Range(.Cells(2, "H"), .Cells(Rows.Count, "H").End(xlUp)) 
    End With 

    For Each c In r1 
     If c.Text = "<<<Manter a linha" Then 
      Sheets("Controle Estoque Fixo").Select 
      t = c.Offset(0, -1) 
      Rows(t).ClearContents 
     End If 
    Next 
End Sub 

Sub DeleteMatches3() 
    Dim r1 As Range, c As Range 
    Dim i As Long, LastRow As Long 
    Dim t As String 

    With Sheets("Analise de Estoque") 
     LastRow = .Cells(Rows.Count, "H").End(xlUp) 
     For i = 2 To LastRow 
      If .Cells(i, "G").Text = "<<<Manter a linha" Then 
       t = .Cells(i, "F").Text 
       Sheets("Controle Estoque Fixo").Rows(t).ClearContents 
      End If 
     Next 

    End With 
End Sub 

그냥 당신이 첫번째

For i = LastRow To 2 Step - 1 

    Next 
+1

"s = s &"A "& c.Offset (0, -1) &", ""을 사용하고 "s = Left (s, Len)를 사용하여 첫 번째"If-Then "구문 ("c "어커런스) (들) - 1) "(한 번 발생)"If-Then "블록 – user3598756

+0

귀하의 오른쪽 조작이 적습니다. –

+0

나는 그것을 거의 가지고있다, 지금 문제는, 그게 내가 마지막 행을 선택할 수 있다는 것이다. 그러나 나는 그 간격의 시작을 무시할 수 없었다. 어둡게 한 R1과 범위 C 범위 문자열 K = "1" 세트 R1 = 범위 (셀 (2, "H") 세포와 같은 문자열 어둡게 K 희미한 S로서 문자열 어둡게 V로 (Rows.Count각 c에 대해 r1 c.Text = ("<<<)"일 경우셀의 수 (0, 1, Manter linha ") 그런 다음 시트 ("CONTROLE Estoque Fixo "). 행 (V-1) .Select.Clear 종료 하면 다음 최종 하위를 – TerrorJapones