Excel 将工作表存储在数组中并处理它
下面的代码删除与我的条件不匹配的行。大约需要52分钟,因为我的排数超过了168000行,这将继续增加 我使用过滤器来减少数据。这不再是一种选择。我必须根据日期比较范围删除行。似乎数组是我最后的选择,但我不知道如何将我的工作表存储在数组中并处理它们 如何将工作表存储在数组中并处理它Excel 将工作表存储在数组中并处理它,excel,vba,Excel,Vba,下面的代码删除与我的条件不匹配的行。大约需要52分钟,因为我的排数超过了168000行,这将继续增加 我使用过滤器来减少数据。这不再是一种选择。我必须根据日期比较范围删除行。似乎数组是我最后的选择,但我不知道如何将我的工作表存储在数组中并处理它们 如何将工作表存储在数组中并处理它 ' to delete data not meeting criteria Worksheets("Dashboard").Activate n1 = Range("n1") n2 = Range("n2") Work
' to delete data not meeting criteria
Worksheets("Dashboard").Activate
n1 = Range("n1")
n2 = Range("n2")
Worksheets("Temp Calc").Activate
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For z = lastrow To 2 Step -1
If Cells(z, 6).Value = "CNF" Or Cells(z, 4).Value <= n1 Or Cells(z,3).Value >= n2 Then
Rows(z).Delete
End If
Next z
”删除不符合条件的数据
工作表(“仪表板”)。激活
n1=范围(“n1”)
n2=范围(“n2”)
工作表(“温度计算”)。激活
lastrow=单元格(Rows.Count,1).End(xlUp).Row
对于z=lastrow到2步骤-1
如果单元格(z,6).Value=“CNF”或单元格(z,4).Value=n2,则
行(z)。删除
如果结束
下一个z
这是基本的
Dim arr1(), dim arr2() as variant
lastrow = cells(Rows.count,1).End(XlUp).Row
lastcol = cells(1,column.count).End(xlRight).Column
arr1(lastrow,lastcol) <- I dont know if this is correct.
<------How do I copy/paste my data into the array? ----->
<This is what I came up with for deleting what I dont need.>
For x=lastrow to 2 Step -1
If arr1(x,6)<>"" or arr1(x,6)<>"CNF" And arr(x,4)>=n1 And arr(x,3)<=n2 then
For k = lastrow to 2
<I dont know how to delete rows in an array.
rows(x).delete ?
Dim arr1(),Dim arr2()作为变量
lastrow=单元格(Rows.count,1).End(XlUp).Row
lastcol=单元格(1,column.count).End(xlRight).column
arr1(lastrow,lastcol)=n1和arr(x,3)试试这个:
Dim varArrdata as variant
Dim lngloop as long
Dim strRows as string
vararrdata = Range(Cells(1, 1), Cells(Rows.Count, 6).End(xlUp)) ' OR use Range("A1").CurrentRegion
For lngLoop = LBound(vararrdata) To UBound(vararrdata)
If vararrdata(lngLoop, 6) = "CNF" Or vararrdata(lngLoop, 4) <= [n1] Or vararrdata(lngLoop, 3) >= [n2] Then
strRows = strRows & "|" & lngLoop
End If
Next
vararrdata = Split(Mid(strRows, 2), "|")
Range("A" & Join(vararrdata, ",A")).EntireRow.Delete
Dim varArrdata作为变量
昏暗的夜总会
将strRows设置为字符串
vararrdata=范围(单元格(1,1)、单元格(Rows.Count,6).End(xlUp))或使用范围(“A1”).CurrentRegion
对于LNGLOP=LBound(vararrdata)到UBound(vararrdata)
如果vararrdata(lngLoop,6)=“CNF”或vararrdata(lngLoop,4)=[n2],则
strows=strows&“|”&lngLoop
如果结束
下一个
vararrdata=Split(中间(箭头2),“|”)
范围(“A”和连接(vararrdata,“,A”)).EntireRow.Delete
好的,继续我们的聊天讨论,下面是我的自动筛选方法
您的要求
首先,我要删除cole 6中具有“”的行
我还将两个日期存储在变量n1和n2中
现在,如果列4>n1和列3
假设您的数据如下所示
现在让我们说一下N1=5/1/2012
和N2=7/1/2012
如果你看到屏幕截图,你会注意到只有一行符合条件,那就是第9行(员工623***)
代码
我已经对代码进行了注释,这样您在理解代码时就不会有问题
Sub Sample()
Dim ws As Worksheet
Dim FltrRng As Range
Dim lRow As Long
Dim N1 As Date, N2 As Date
Set ws = ThisWorkbook.Worksheets("Temp Calc")
'~~> Start Date and End Date
N1 = #5/1/2012#: N2 = #7/1/2012#
With ws
'~~> Remove any filters
.AutoFilterMode = False
'~~> Get the last row
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Identify your data range
Set FltrRng = .Range("A1:F" & lRow)
'~~> Filter the data as per your criteria
With FltrRng
'~~> First filter on blanks
.AutoFilter Field:=6, Criteria1:="="
'~~> Next filter on Start Date
.AutoFilter Field:=3, Criteria1:=">" & N1, Operator:=xlAnd
'~~> Finally filter on End Date
.AutoFilter Field:=4, Criteria1:="<" & N2, Operator:=xlAnd
'
'~~> And so on if required
'
'~~> Delete the filtered rows
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
'~~> Remove any filters
.AutoFilterMode = False
End With
End Sub
子样本()
将ws设置为工作表
变暗飞行高度范围
暗淡的光线和长的一样
尺寸N1为日期,N2为日期
设置ws=ThisWorkbook.Worksheets(“临时计算”)
“~~>开始日期和结束日期
N1=#5/1/2012#:N2=#7/1/2012#
与ws
“~~>删除任何筛选器
.AutoFilterMode=False
“~~>获取最后一行
lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
“~~>确定您的数据范围
设置FltrRng=.Range(“A1:F”和lRow)
“~~>根据您的条件筛选数据
与外研社
“~~>空白处的第一个过滤器
.自动筛选字段:=6,标准1:=“=”
“~~>开始日期的下一个筛选器
.自动筛选字段:=3,标准1:=“>”&N1,运算符:=xlAnd
“~~>最终在结束日期筛选
.AutoFilter字段:=4,标准1:=“如果您想要数组方法,那么我们可以这样做,但是您发现AutoFilter有什么问题?筛选器非常棒,但是当我的删除条件仅为空白单元格和“CNF”时“但是现在我必须根据日期删除数据。它不会过滤我的日期范围。我可以看到示例数据吗?”?就几排。。。您可以创建一个示例文件并将其上载到wikisend.com,然后在此处共享链接。我们将首先尝试自动筛选方法,然后继续使用数组,如果它不适合siddharth,[URL=temp calc是我的工作表请忽略它们过期的代码dGR8。现在给我您的确切筛选条件,日期/“Cnf”等等…你好,我很快会尝试你的建议:)你的代码使用循环,这是我面临的问题。它需要太多的时间是的,它使用循环,但它在数组中循环,这在与范围比较时花费更少的时间。你试过了吗?我在if条件上得到了一个下标超出范围的错误OHHH….我犯了一个错误…范围哈未正确生成。更改此行:vararrdata=Range(单元格(1,1),单元格(Rows.Count,6)。结束(xlUp))你好,sid,由于某些原因,这不起作用。我的空白单元格和根据日期应过滤掉的数据仍然保留。调试显示正在过滤的数据hello sid我不明白为什么它不起作用,也请在此提供帮助@mathew:抱歉,这是一个非常忙碌的一天!您仍然面临着一个问题吗这个问题?@Philip:谢谢,但是为什么“?”:)是的,伙计,我不知道怎么了,给我5分钟,我在吃晚饭:)