我无法找到列值并将其与vba Excel2007中的相应行号相关联

时间:2011-06-24 19:35:32

标签: vba find excel-2007

首先,我使用Excel 2007,并使用Visual Basic编辑器(VBA,我相信)。

我试图获取一张数据(7500行),将其减少到2999行并将其格式化为从“F”列的InitialValue(0.2)开始,我希望将InitialValue定义为行号。然后可以删除列“F”中第一次出现0.2之前的所有行中的所有值。然后我想从新的第1行开始,并将文件缩短为2999行。

F列是一个数据计数器,有时由于特殊的运动传感器输入而重置,因此我只想在数据集中找到第一个参考值(0.2)的规定的InitialValue。我不确定我是否需要为此编写策略。

表单的格式为:

ROW  |    A        |   B   |    C    |        D
1       date-time    data      data        599.4
2       date-time    data      data        599.6
3       date-time    data      data        599.8
4       date-time    data      data          0.2
5       date-time    data      data          0.4
6       date-time    data      data          0.6
7       date-time    data      data          0.8
.       date-time    data      data          1.0
.       date-time    data      data          0.2
.       date-time    data      data          0.4
7500    date-time    data      data        345.4

我对VBA相当新,所以我肯定在这里缺少一些重要的东西。我在“Set InitialValue”行设置了一个对象需要的错误

 Sub Scrub_clean()
        'Scrub_clean Macro  isolates event

    Dim InitialValue As Integer
    Set lookupTable = Worksheets("Sheet1").Range("D1:D7500")

    With Worksheets(1).Range("D1:D7500").Value
        Set InitialValue = .Find(0.2, LookIn:=xlValues)

    End With

    Rows("1:InitialValue-1").Select
        'subtract one from initial value to ensure the 0.2 value does not get deleted
    Selection.Delete Shift:=xlUp

    Rows("3000:7500").Select
    Selection.Delete
 End Sub

我没有成功定义第一次出现的“D”列中的0.2,并且我不知道从哪里开始确保宏不会继续寻找相同值的其他出现。任何帮助将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:1)

您正尝试在InitialValue变量上使用Set命令,该变量的大小为整数。你不能这样做:

 InitialValue = .Find(0.2, LookIn:=xlValues).Row

或者将InitialValue变量标注为一个范围,然后你可以使用像你原来那样的设置。

此外,您无需选择要使用它们的单元格:

Rows("3000:7500").Delete

这就是我按你的要求做的事情:

Sub Scrub_clean()
        'Scrub_clean Macro  isolates event

    Dim rCell As Range

    With Worksheets("Sheet1")
        Set rCell = .Range("D1:D7500").Find(0.2, LookIn:=xlValues)

        If Not rCell Is Nothing Then
            '// Assumes you have no headers as per your example
            .Rows(1).Resize(rCell.Row - 1).Delete Shift:=xlUp
            .Rows(3000).Resize(.UsedRange.Rows.Count).Delete Shift:=xlUp
        End If
    End With


 End Sub

答案 1 :(得分:0)

尝试在With语句中删除.Value。我不认为Find函数是Value属性的成员,但它是Range对象的一部分。

答案 2 :(得分:0)

感谢您的帮助。我最终发现它也可以工作,它有点粗糙,我想知道Find命令是否会更有效?

   Sub Scrub_clean()

    Dim InitialValue As Integer
    Set lookupTable = Worksheets("Sheet1").Range("d1:d7500")

    With Worksheets(1).Range("d1:d7500")
        Set InitialValue = .Find(0.2, LookIn:=xlValues)

    End With

    Rows("1:InitialValue-1").Select

    Selection.Delete Shift:=xlUp

    Rows("3000:7500").Select
    Selection.Delete
End Sub