Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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,我有3个Excel文件,在B列中有注释:ok或check。列C包含正常或需要检查的产品的产品编号。我想在另一个Excel文件(4)中创建一个列表(概述),列出其他三个Excel文件(1、2、3)中B列中有“检查”一词的所有产品 我不能在三个Excel中使用透视表,因为它必须手动刷新。 过滤器也不是一个选项。我想在Excel中使用VBA/宏 Excel 1 Excel 2 Excel 3 Excel 4 我希望有一个清单,列出所有需要在我的第四个月检查的产品编号。Excel。在其他文件所在的文件夹

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

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

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

在其他文件所在的文件夹中创建新工作簿。在运行这个宏之前,请考虑移动任何其他.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
子测试()
将wb1、wb2设置为工作簿
作为布尔值的暗淡耳机
设置wb1=ThisWorkbook
FolderName=“your/path/””xlsx所在文件夹的完整路径名
file_name=Dir(FolderName&“*”&“.xlsx”,vbDirectory)”假设所有文件都是.xlsx
为了好玩,耳机=假
'对于FolderName中的每个文件
当右键(文件名,5)=“.xlsx”和文件名”
'打开工作簿
Set wb2=Workbooks.Open(文件名,False,True)
附wb2.工作表(1)
对于i=.Range(“B1”).End(xlDown).行到.Range(“B20000”).End(xlUp).行'change.sheets(1)1=索引到>您的索引,或“sheetname”
如果LCase(Trim(.Range(“B”&i).Value))=“check”则“check”检查小写,则条件应更低
'在输出工作表中创建标题
如果HeadSet=False,则
wb1.表(1).范围(“A1”).Value=“产品”
wb1.表(1).范围(“A1”).Value=“检查结果”
耳机=正确
如果结束
'将wb1.sheets(index)更改为您的索引,或将工作表名称更改为介于之间“”
wb1.Sheets(1).范围(“A”和wb1.Sheets(1).范围(“A20000”).结束(xlUp).行+1).值=.Range(“C”和i).值
wb1.工作表(1).范围(“B”和wb1.工作表(1).范围(“A20000”).结束(xlUp).行+1).值=.范围(“B”和i).值
如果结束
下一次我是下一次迭代
以
wb2.关闭假“关闭工作簿”
file_name=Dir'转到下一个文件
环
端接头

感谢您的解释和帮助。我试过了,它说变量FolderName没有定义。我应该如何定义它?Dim FolderName为。。。?我应该用Excel 4中的工作表名称替换工作表(1)吗:工作表(表1)?请查看代码中的注释。。。在code=FolderName=“您的路径/文件夹”中。Dim FolderName->不需要更改。您的工作表名称在引号之间。。。请阅读评论。谢谢你的回答!我确实阅读了您的所有评论并替换了路径名。问题是,编辑器说我必须在使用变量之前定义它,就像您在HeadSet->中将变量定义为布尔值一样。未定义FolderName。我的问题是:这应该是什么?一根绳子?工作簿?我没能把这件事弄清楚。这就是我在那一行的内容:FolderName=“H:/Desktop/Easy-example-Bilder”谢谢您的帮助!:)如果您需要声明它,您应该:dim FolderName as stringSo我必须在使用它们之前声明代码中的所有变量,因为我有显式选项:)不幸的是,代码仍然无法工作。
Status  Product number          
ok      7455561         
ok      5145684                 
ok      4589666                 
check   4896471                 
check   1117347                 
check   5656478                 
ok      5256488
Status  Product number          
ok      3389741         
check   6754889         
check   1489798         
ok      6489646     
Products to check
1254968
2153654
7469968
6665448
4896471
1117347
5656478
6754889
1489798
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