首先,我使用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,并且我不知道从哪里开始确保宏不会继续寻找相同值的其他出现。任何帮助将不胜感激。提前谢谢。
答案 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