Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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,如果你看我的代码,我只是被困在如何使用高级过滤。对于A列,如果它等于输入的日期,而E列等于ACH或>0,那么我想将B列复制到另一张图纸上的D列,将D列复制到F列,将E列复制到另一张图纸上的C列。这是怎么改写的 我目前有一个代码,它根据TextBox1.value中输入的日期和其他一些条件贯穿整张工作表 Private子命令按钮1\u单击() 将RawData设置为字符串,将RawDataWorkingFolder设置为字符串,将myrange设置为范围,将单元格设置为范围 将targetShe

如果你看我的代码,我只是被困在如何使用高级过滤。对于A列,如果它等于输入的日期,而E列等于ACH或>0,那么我想将B列复制到另一张图纸上的D列,将D列复制到F列,将E列复制到另一张图纸上的C列。这是怎么改写的

我目前有一个代码,它根据
TextBox1.value
中输入的日期和其他一些条件贯穿整张工作表

Private子命令按钮1\u单击()
将RawData设置为字符串,将RawDataWorkingFolder设置为字符串,将myrange设置为范围,将单元格设置为范围
将targetSheetName设置为字符串
找到的Dim TargetSheets为布尔值
将工作表设置为工作表
Set aw=ActiveWorkbook
将RawDataWorkingFolder2设置为字符串,将RawData2设置为字符串
设置myrange=工作表(“表1”)。范围(“信息”)
卸下我
BD=TextBox1.Value
a=工作表(“Sheet1”)。单元格(Rows.Count,1)。结束(xlUp)。行
Application.ScreenUpdating=FALSE
RawDataWorkingFolder=Trim(aw.工作表(1).范围(“A1”).值)
原始数据=修剪(aw.工作表(1).范围(“E1”).值)
调用Utilities.open工作簿(RawDataWorkingFolder&RawData)
对于i=2到a
如果myrange.Cells(i,1).Value=DateValue(BD),那么“和myrange.Cells(i,1).Value 0和myrange.Cells(i,5).Value<1000000,那么
des=myrange.Cells(i,2)
值=myrange.Cells(i,4)
ACH=myrange.Cells(i,5)
工作表(“每日”).范围(“D”和行数.Count).结束(xlUp).偏移量(1)=des
工作表(“每日”)。范围(“F”和行数)。结束(xlUp)。结束(xlUp)。偏移量(1)=值
工作表(“每日”).Range(“C”和Rows.Count).End(xlUp).Offset(1)=ACH
ElseIf myrange.Cells(i,5).Value=“CREDIT”然后
des=myrange.Cells(i,2)
值=myrange.单元格(i,3)*-1
ACH=myrange.Cells(i,5)
工作表(“每日”).范围(“D”和行数.Count).结束(xlUp).偏移量(1)=des
工作表(“每日”)。范围(“F”和行数)。结束(xlUp)。结束(xlUp)。偏移量(1)=值
工作表(“每日”).Range(“C”和Rows.Count).End(xlUp).Offset(1)=ACH
如果结束
如果结束
Application.StatusBar=“数据正在运行…完成百分比为”&四舍五入((i/a*100)、0)和“%”
下一个
调用实用程序.CloseWorkbook(RawData)

我想知道我是否可以使用高级过滤方法,或者他们的方法是否可以更快地完成这项工作。如果是这样,请举个例子或提供帮助。现在我单击update daily,弹出一个文本框,输入复制数据所需的日期。一切正常,只是速度慢。我想把B、C、D和E列复制到另一张纸上。我的标准需要是,如果其ACH、信用卡或任何高于0的数字,并且日期与输入的日期相同,则需要复制信息。谢谢。

以下是一种使用高级过滤器完成所需操作的方法。 您必须根据您的具体情况调整我的代码

我在一个输入框中输入了过滤日期,但您可以采用不同的方式进行过滤(还应该验证是否输入了实际日期)

我在工作表上使用了一些“偏僻”区域作为标准范围

希望代码有足够的注释,您可以理解它

Option Explicit
Sub copyFiltered()
'declare all variables
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim rData As Range
    Dim rCriteria As Range
    Dim myDate As Date
    
'get date to be filtered
myDate = InputBox("Enter date of interest:")

'set worksheets and ranges
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")

With ws1
    Set rData = Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Resize(columnsize:=5)
    Set rCriteria = Range("AA1:AB3") 'could be anyplace on the worksheet
End With

'populate the criteria range
With rCriteria
    'Date Criteria: column A
    .Cells(1, 1) = rData(1, 1)
    .Cells(2, 1) = myDate
    .Cells(3, 1) = myDate
    
    'Column E criteria
    .Cells(1, 2) = rData(1, 5)
    .Cells(2, 2) = "ACH"
    .Cells(3, 2) = ">0"
    
End With

'Apply the filter
rData.AdvancedFilter Action:=xlFilterInPlace, criteriarange:=rCriteria

'Copy the filtered data to the appropriate columns on the destination sheet
'might want to clear the destination sheet first
ws2.Cells.Clear
With rData
    .Columns(2).SpecialCells(xlCellTypeVisible).Copy ws2.Cells(1, 4)
    .Columns(4).SpecialCells(xlCellTypeVisible).Copy ws2.Cells(1, 6)
    .Columns(5).SpecialCells(xlCellTypeVisible).Copy ws2.Cells(1, 3)
End With

'Remove the filter
ws1.ShowAllData
     
End Sub
原始数据

筛选后的结果

在内存中工作,而不是访问工作表,将使速度提高一个数量级。您可能会利用高级过滤器。你没有提供足够的信息来创建一个我可以从中获得更多想法的示例。如果可能的话,我用一个图片更新了原始版本。如果您的条件是“日期和一些其他条件”,那么您似乎可以轻松地使用高级过滤器。高级过滤器将允许您使用
作为标准,您甚至可以使用公式。试试看,如果你遇到问题,请发回。如果你看了我的代码,我就被困在如何使用高级过滤上了。对于A列,如果它等于输入的日期,而E列等于ACH或>0,那么我想将B列复制到另一张图纸上的D列,将D列复制到F列,将E列复制到另一张图纸上的C列。如果myrange.Cells(i,1).Value=DateValue(BD),那么如果myrange.Cells(i,5).Value=“ACH”或myrange.Cells(i,5).Value>0和myrange.Cells(i,5).Value<1000000,那么des=myrange.Cells(i,2)Value=myrange.Cells(i,4)ACH=myrange.Cells(i,5)工作表(“每日”).Range(“D”和Rows.Count).End(xlUp).Offset(1)=des工作表(“每日”).Range(“F”和Rows.Count).End(xlUp).End(xlUp).Offset(1)=Value工作表(“每日”).Range(“C”和Rows.Count).End(xlUp).Offset(1)=这非常有效,但我想知道我可以不带标题复制它们吗?谢谢,我把.offset(1)添加到了.columns,它成功了。非常感谢您的帮助还有一个问题,我如何在另一张纸上添加负数?在我的第一个代码中,我将乘以-1,但是尝试在.Columns(4)的末尾使用它。SpecialCells(xlCellTypeVisible)。Copy ws2。Cells(1,6)*-1不起作用。有什么帮助吗?感谢you@MohamadBallout哪些价值观?如果它是我标记为credit的列,我建议
复制包含-1的单元格,然后
在该列上粘贴special/multiply
。录制一个宏以了解编码。我尝试了一些方法,但仍然无法在将其放入第二张工作表之前将其设置为负数