如何检查范围是否包含单词?

时间:2019-05-12 10:34:14

标签: excel vba

我有3个Excel文件,在B列中有注释:okcheck。 C列包含可以或需要检查的产品的产品编号。我想在其他三个Excel文件(1,2,3)的B列中所有带有单词“ check”的产品的另一个Excel文件(4)中创建一个列表(概述)。

我不能在三个Excel中使用数据透视表,因为必须手动刷新它。 过滤器也不是一种选择。我想在Excel中使用VBA /宏。

Excel 1
Status  Product number          
check   1254968         
ok      5541485         
check   2153654         
ok      4588999         
ok      8954668         
ok      6945665         
check   7469968         
check   6665448         
Excel 2
Status  Product number          
ok      7455561         
ok      5145684                 
ok      4589666                 
check   4896471                 
check   1117347                 
check   5656478                 
ok      5256488
Excel 3
Status  Product number          
ok      3389741         
check   6754889         
check   1489798         
ok      6489646     
Excel 4
Products to check
1254968
2153654
7469968
6665448
4896471
1117347
5656478
6754889
1489798

我希望有一个清单,列出所有需要在我第四次检查的产品编号。 Excel。

1 个答案:

答案 0 :(得分:1)

在其他文件所在的文件夹中创建一个新工作簿。在运行此宏之前,请考虑移走其他所有.xlsx文件:)如果您需要在特定文件夹中运行该文件,而又无法移动这些文件,请根据您执行的文件名添加一个条件想要使用。否则,以下内容就足够了。请阅读代码中的所有注释。

Sub test()

Dim wb1, wb2 As Workbook
Dim HeadSet As Boolean

Set wb1 = ThisWorkbook

FolderName = "your/path/" 'full path name to folder where xlsx is located
file_name = Dir(FolderName & "*" & ".xlsx", vbDirectory) 'assuming the files are all  .xlsx

HeadSet = False 'for fun

'for each file in FolderName
Do While Right(file_name, 5) = ".xlsx" And file_name <> ""
    'open workbook
    Set wb2 = Workbooks.Open(file_name, False, True)
        With wb2.Sheets(1)
            For i = .Range("B1").End(xlDown).Row To .Range("B20000").End(xlUp).Row 'change .sheets(1) 1 = index to > your index, or "sheetname"
                If LCase(Trim(.Range("B" & i).Value)) = "check" Then 'checks lowercase, so condition should be lower
                    'create headers in output sheet
                    If HeadSet = False Then
                        wb1.Sheets(1).Range("A1").Value = "Products"
                        wb1.Sheets(1).Range("A1").Value = "Result of check"
                        HeadSet = True
                    End If
                    'change wb1.sheets(index) to your index, or the sheet name between ""
                    wb1.Sheets(1).Range("A" & wb1.Sheets(1).Range("A20000").End(xlUp).Row + 1).Value = .Range("C" & i).Value
                    wb1.Sheets(1).Range("B" & wb1.Sheets(1).Range("A20000").End(xlUp).Row + 1).Value = .Range("B" & i).Value
                End If
            Next i 'next iteration
        End With
    wb2.Close False 'close workbook

    file_name = Dir 'go to next file
Loop

End Sub