2012-09-20 103 views
1

在我之前的文章中:Take data from all books to some table我已經問過如何從EXCEL中所有已打開的書中獲取一些數據。在某些情況下從命名範圍中刪除行

但有一些問題。我不知道如何檢查命名範圍中的列名「Id」的值是否具有值「0」。如果有,它不應該被添加到決賽桌。我怎樣才能做到這一點?

我得到這樣命名後的範圍值:

Set Rng = iList.[Table]我需要清理

i = 1 
     For Each row In Rng.Rows 


     Set cell = row.Cells(1, 2) 
     If cell = "0" Then 

     Rng.Rows(i).Delete 

     End If 

     i = i + 1 


     Next 

回答

0

我不知道,但你可能會尋找這個

If ThisWorkbook.Names("ID").RefersToRange.Value = "0" Then 

與替代的ThisWorkbook您喜歡的任何工作簿或工作表對象。

如果不是這樣,請評論你想要檢查的「0」,因爲我不確定我是否正確理解你。

編輯

現在

,我知道這是怎麼回事 - 你有問題,問題是

Vba macro to copy row from table if value in table meets condition

,將需要的代碼這樣的事情在這裏

Dim rngFiltered as range 
Rng.AdvancedFilter xlFilterCopy, Tabelle1.Range("CRITERIA"), rngFiltered, False 

lst.InsertRowRange.Resize(Rng.Rows.Count).Value = rngFiltered.Value 

其中「CRITERIA」是諸如「G1:G2」的範圍的名稱,其中G1 =「D列的標題」G2 =「> 0」

我會修改你的代碼這一點,如果它總是相同的細胞:

Dim rangeRow As Range 
    Dim rowCell As Range 

    Set Rng = Tabelle1.Range("A1:A50") 

    For Each rangeRow In Rng.Rows 

    Set rowCell = rangeRow.Cells(1, 2) 
    If rowCell.value = "0" Then 
     rangeRow.Delete 
    End If 
    Next rangeRow 

,或者這個,如果你需要檢查所有的細胞

For Each rangeRow In Rng.Rows 
    For each rowCell in rangeRow   
     If rowCell.value = "0" Then 
     rangeRow.Delete 
     exit for 
     End If 
    next rowCell 
    Next rangeRow 
+0

這裏:lst.InsertRowRange.Resize(Rng.Rows.Count).value的= Rng.Value我添加的所有行,但我需要檢查我的條件,並添加只有那些通過它的行 – revolutionkpi

+0

好吧,所以你基本上想要一個像範圍過濾的矩陣導致像範圍這樣的antoher矩陣,它只有通過這個過濾器的數據。在這種情況下,你應該編輯你最初的問題,因爲這是非常具有誤導性的。 – Jook

+0

好的,你能否幫助刪除不符合指定範圍的條件的行? – revolutionkpi

1

這是一個我一直在努力與此代碼工作,而且我認爲應該爲你想要做的工作。在這種情況下,我使用庫存號(「Inv」)的命名範圍並查看它,以查找小於26的任何值。如果存在,則刪除該行。當循環結束時,我重新建立最後一行(假設我已經刪除了一些行,這將改變)。您也可以替換您的命名範圍,並在IF語句更改條件值= 0:

Set rngCells = Range("Inv") 
For i = rngCells.Cells.Count To 0 Step -1 
    If rngCells(i).Value < 26 Then 
     rngCells(i, 1).EntireRow.Delete 
    End If 
Next i 

FinalRow = Cells(Rows.Count, 2).End(xlUp).Row 
相關問題