Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将工作表存储在数组中并处理它_Excel_Vba - Fatal编程技术网

Excel 将工作表存储在数组中并处理它

Excel 将工作表存储在数组中并处理它,excel,vba,Excel,Vba,下面的代码删除与我的条件不匹配的行。大约需要52分钟,因为我的排数超过了168000行,这将继续增加 我使用过滤器来减少数据。这不再是一种选择。我必须根据日期比较范围删除行。似乎数组是我最后的选择,但我不知道如何将我的工作表存储在数组中并处理它们 如何将工作表存储在数组中并处理它 ' to delete data not meeting criteria Worksheets("Dashboard").Activate n1 = Range("n1") n2 = Range("n2") Work

下面的代码删除与我的条件不匹配的行。大约需要52分钟,因为我的排数超过了168000行,这将继续增加

我使用过滤器来减少数据。这不再是一种选择。我必须根据日期比较范围删除行。似乎数组是我最后的选择,但我不知道如何将我的工作表存储在数组中并处理它们

如何将工作表存储在数组中并处理它

' 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分钟,我在吃晚饭:)