2015-04-16 89 views
0

我想提取名稱爲「data」,範圍(「Ai」)的範圍(「A1:A10」)中的非空單元格的行索引(i是偶數)具有值「long」和範圍(「Aj」)(j爲奇數)爲空單元格。如果我做對了,我應該得到(2,4,6,8,10),但是我的代碼失敗了。這裏是我的代碼:提取特定範圍內非空單元格的行索引

Sub RowIndexes() 
    Dim NonEmptyRows As Integer 
    Dim RowIndexes() As Integer 
    Dim i As Integer 
    Dim rng As Range 

    NonEmptyRows = WorksheetFunction.CountIf(Range("data"), "long") 
    ReDim RowIndexes(1 To NonEmptyRows) 

    For Each rng In Range("data") 
     If rng.Value = "long" Then 
      i = i + 1 
      RowIndexes(i) = rng.Row 
     End If 
    Next rng 

    Sheets("sheet1").Range("B1:B5").Value = RowIndexes 
End Sub 

我打印出來,但結果搞糊塗了,我剛剛得到「2」(也可能是範圍(「A2」)的行索引),我想不出爲什麼。真的需要一些幫助。

回答

0

嘗試這個

Dim i As Integer 
Dim rng As Range 

For Each rng In Range("data") 
    If rng.Value = "long" Then 
     i = i + 1 
     Sheets("sheet1").Range("B" & (Range("B" & Rows.Count).end(xlUp).Row+1)).Value = rng.Row 
    End If 
Next rng 

測試,我在Range B得到的結果是

2 
4 
6 
8 
10 

然而,如果你想使用你現有的代碼,那麼你需要更新以下行

OLD LINE

Sheets("sheet1").Range("B1:B5").Value = RowIndexes 

編輯後的新 LINES

For i = 1 To NonEmptyRows 
    Sheets("sheet1").Range("B" & (Range("B" & Rows.Count).End(xlUp).Row + 1)).Value = RowIndexes(i) 
    Next i 

RowIndexes所有子變量默認情況下,不考慮在1 to Number of NonEmptyRows它拿起第一個變量是RowIndexes(1),其值是2

+0

感謝爲了說明,我解決了這個問題,推遲了我的項目兩天。隨着你的靈感,我進一步挖掘了一些,發現了一些有趣的東西。 – scofieldchen

+0

請使用勾號接受答案http://stackoverflow.com/help/someone-answers – izzymo

+1

如果您創建一個數組並手動爲其分配一些值,它似乎是「行向量」,如果您想要打印出來或者使用Range(「whatever」)。value = worksheetfunction.transpose(MyArray)或for循環。但是,如果將範圍值傳遞給數組,它似乎是「列向量」或「矩陣」,您可以使用Range(「whatever」)將其打印出來。value = MyArray(它們具有相同的行和列) 。我不知道是否有一個普遍的模式? – scofieldchen

相關問題