如何将基于特定单元格值的数据从多个工作簿复制到主工作簿中

时间:2017-03-16 19:21:54

标签: excel vba excel-vba

我有一个问题,我需要根据第3列中的一组特定值(多个名称)将数据从2个工作簿复制到主工作簿中。我是VBA的新手,可能我可以'准确地问问题找到答案,为此道歉。如果第3列包含我正在寻找的名称,您是否可以帮助我,我需要从每个工作簿 中提取数据行。我有以下代码从特定文件夹中的每个工作簿中提取数据,但它绝对抓住了所有内容。

Sub copyDataFromManyFiles()

With Application
    .DisplayAlerts = False
    .EnableEvents = False
    .ScreenUpdating = False
End With

Dim FolderPath As String, FilePath As String, FileName As String

FolderPath = "C:\Users\Jasiek\Desktop\Yuuuge MacroTest\"
FilePath = FolderPath & "*ennik*.xl*"
FileName = Dir(FilePath)

Dim lastrow As Long, lastcolumn As Long

Do While FileName <> ""
Workbooks.Open (FolderPath & FileName)

lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lastcolumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Range(Cells(2, 1), Cells(lastrow, lastcolumn)).Copy
Application.DisplayAlerts = False
ActiveWorkbook.Close

erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
ActiveSheet.Paste Destination:=Worksheets(1).Range(Cells(erow, 1), Cells(erow, 30))

FileName = Dir

Loop

With Application
    .DisplayAlerts = True
    .EnableEvents = True
    .ScreenUpdating = True
End With

'Call removeDuplicates

End Sub

如何在复制行之前修改代码以过滤数据?我关心性能,因为有100k +记录。我真的很感激帮助。感谢。

1 个答案:

答案 0 :(得分:0)

假设您正在处理一组固定的名称(即:2-3),最简单的方法可能是使用instr()方法来确定单元格值是否具有您正在查找的名称对

如果您正在处理更大的名称列表,您还可以遍历每行检查的名称集合(或数组)。下面的instr()方法返回您正在检查的字符串中搜索字符串的整数位置。如果它找到某个东西,它将为该位置返回一个大于0的值(即:位置1是找到匹配的最小值)。 vbTextCompare选项只是确保它不区分大小写,因为它进行比较(即:大写或小写不匹配)。

我喜欢在调用时明确地引用工作表和工作簿以确保事情干净且具体,但如果您对它有强烈的偏好,则可以使用ActiveWorkbook或ActiveWorksheet。

就效率而言,如果将每个单元格的值存储在临时字符串变量中并且只是对tempStr字符串运行比较,那么与每次引用单元格值相比,您将节省检索时间(这需要更长的时间才能完成执行x比较检查x行名称的每一行。

    public function __construct($choices, $value = null)
    {
        if (null !== $value && !is_callable($value)) {
            throw new UnexpectedTypeException($value, 'null or callable');
        }