在许多工作簿中查找特定关键字以及相应的值,并将它们放在一个工作簿的列中

时间:2014-03-13 14:09:52

标签: excel vba excel-vba

a previous posting中,我询问了如何突出显示以某个关键词开头的单元格范围,并在下一个单元格为空时结束。我想更好地了解如何创建一个循环,在多个Excel文件上执行此操作。任何帮助将非常感激。作为参考,我所指的代码如下:

Dim wk As Worksheet
Set wk = ActiveSheet

FirstRowColA = Application.WorksheetFunction.Match("keyphrase", wk.[A:A])
LastRowColA = Cells(wk.Rows.Count, "A").End(xlUp).Row

wk.Range("A" & FirstRowColA & ":A" & LastRowColA).Copy

Worksheets("Sheet2").Paste

此外,如果活动工作簿中已经不存在“工作表2”,我很好奇如何处理创建“工作表2”。我是否需要使用Set WS = Sheets.Add之类的东西并让Excel查看Worksheets(Sheets.Add).Paste?

我也注意到这段代码并不一定能找到我要告诉它的内容,但这是我应该能够解决的问题。例如,在Match()函数中添加短语“Name”将返回包含不同单词的A列中单元格的文本。

1 个答案:

答案 0 :(得分:0)

假设您在某个文件夹中有excel文件

此代码打开文件夹中的每个工作簿,并搜索特定字符串(如果找到.copy)并粘贴所需数据。

Sub LoopThroughFiles()
    Dim StrFile As String
    Dim wk As Worksheet
    StrFile = Dir("C:\Personal\Excel Report\*.xlsx")
    Do While Len(StrFile) > 0
        Workbooks.Open ("C:\Personal\Excel Report\" & StrFile)
        Set wk = ActiveSheet


        Set firstrowcola = activesheet.Range("A:A").Find("taskname") ' - search taskname in 1st row 

        If firstrowcola Is Nothing Then GoTo here:

        LastRowColA = Cells(wk.Rows.Count, "A").End(xlUp).Row
        wk.Range(firstrowcola.address & ":" & firstrowcola.offset(lastrowcola,0).address)).Copy
        Set ws = Sheets.Add
        ws.Range("A1").Select
        ActiveSheet.Paste
here:

        ActiveWorkbook.Close True
    Loop
End Sub