提取数据循环错误

时间:2015-07-30 07:01:09

标签: excel vba

  • 1.我正在尝试根据具有" Y"的列D提取数据。数据样本文件如下。

    1. [![提取数据] [1]] [1]

      [1]:http://i.stack.imgur.com/LnS8i.jpg我是VBA新手并且有 为了我的目的,从网上采用了代码。它不起作用并给出 错误下标超出以下代码行的范围。

如果vArray(i,4)=" Y"然后

  1. 我的VBA代码如下

     Sub Extract_Values()
    
     Dim wks As Worksheet
     Dim startRow As Integer
     Dim lastRow As Integer
     Dim vArray As Variant
     Dim vNewArray As Variant
     Dim i As Integer, j As Integer
     Dim Counter1 As Integer, Counter2 As Integer
    
     startRow = 2
     Set wks = Sheets("Sheet1")
    
    With wks
      lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
      vArray = .Range("A" & startRow & ":B" & lastRow).Value2
     For i = 1 To UBound(vArray)
       If vArray(i, 4) = "Y" Then
        Counter1 = Counter1 + 1
       End If
     Next i
    ReDim vNewArray(1 To Counter1, 1 To 2)
    For j = 1 To UBound(vArray)
     If vArray(j, 4) = "Y" Then
        Counter2 = Counter2 + 1
        vNewArray(Counter2, 1) = vArray(j, 1)
        vNewArray(Counter2, 2) = vArray(j, 2)
     End If
     Next
    End With
    
     Range("B" & startRow & ":C" & startRow + Counter1 - 1) = vNewArray
    
    End Sub
    
  2. 对此的任何帮助将不胜感激。

    PS:对不起,我应该提到我采用了rwilson提到线程参考的代码。我为此道歉。

1 个答案:

答案 0 :(得分:1)

不要太担心它。 )。试试这个:

Sub Extract_Values()

Dim wks As Worksheet
Dim startRow As Integer
Dim lastRow As Integer
Dim vArray As Variant
Dim vNewArray As Variant
Dim i As Integer, j As Integer
Dim Counter1 As Integer, Counter2 As Integer

startRow = 2
Set wks = Sheets("Sheet1")

With wks
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    vArray = .Range("A" & startRow & ":D" & lastRow).Value2
    For i = 1 To UBound(vArray)
        If vArray(i, 4) = "Y" Then
            Counter1 = Counter1 + 1
        End If
    Next i
    ReDim vNewArray(1 To Counter1, 1 To 2)
    For j = 1 To UBound(vArray)
        If vArray(j, 4) = "Y" Then
            Counter2 = Counter2 + 1
            vNewArray(Counter2, 1) = vArray(j, 1)
            vNewArray(Counter2, 2) = vArray(j, 2)
        End If
    Next
End With

Range("E" & startRow & ":F" & startRow + Counter1 - 1) = vNewArray

End Sub