2016-06-26 14 views
0

別のシートの値を集約し、これらの値に基づいて最初のシートに戻って削除するマクロがあります。別のシートに基づいてシート上の行を削除するマクロ

シートはG2の値(マニアリニア)の場合は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 

EDIT:今

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 /マクロランゲージ*用ではありません。削除されました。 – 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 "オカレンス)最後の "If-Then"ブロックの1つのオカレンス(1つのオカレンス) – user3598756

+0

あなたの操作がより少ない。 –

+0

私はほとんどそれを得ました、今問題、それは私が最後の行を選択することができますが、私は間隔のbegginigをdifinigできませんでした。 暗いR1としてレンジ、Cレンジ ストリング K = "1" セットR1 =範囲(セル(2、 "H")、細胞のような文字列 暗いkとして暗いSとして文字列 暗いVとして(Rows.Count値0,各cについてr1 c.Text =( "<<<)"の場合は、のセル(2、 "G" Manter linha ")次に シート(" Controle Estoque Fixo」)。 次 End Subの – TerrorJapones

関連する問題