将数据从范围传输到数组,删除最后一行

时间:2017-01-12 12:05:43

标签: arrays excel vba excel-vba

我正在尝试将工作表中的信息放入数组中,使用:

 WBArray = ActiveSheet.Range(Cells(5, 1), Cells(end1, 29)).Value

但是有一些问题:首先我的原始范围的最后两行包含无用的数据。当我将它们传递给数组时,我怎么能删除这两行?有没有像我正在使用的直接方法?

其次,我的范围从第5行开始,但由于它必须通过旧文件,因此该数字可能不同。有没有办法可以创建一个浮动引用,所以它会根据我想要的数据开始变化? (例如,如果它从第7行开始)。

我已经尝试过遍历每个项目,但这似乎也不起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

也许

    Sub x()

Dim start1 As Long, end1 As Long, WBArray, r As Range

With ActiveSheet
    Set r = .Columns(1).Find(What:="Identifier", After:=.Cells(.rows.Count,1), LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    If Not r Is Nothing Then
        start1 = r.Row
        end1 = .Range("A" & Rows.Count).End(xlUp).Row - 2
        WBArray = .Range(Cells(start1, 1), Cells(end1, 29)).Value
    Else
        MsgBox "Identified not found"
    End If
End With

End Sub

答案 1 :(得分:1)

在OP的澄清后编辑

你可以使用这个功能:

Function GetArray(sht As Worksheet) ', uselessRows As Long)
    With sht
        GetArray = .Range(.Columns(1).Find(what:="Identifier", lookat:=xlWhole, LookIn:=xlValues), _
                          .Cells(.UsedRange.Rows(.UsedRange.Rows.Count).Row - 6, 29)).Value
    End With
End Function

并在主要子组中将其称为:

WBArray = GetArray(mySht) 

其中mySht是任何有效的工作表参考,例如ActiveSheet