excel 在多个工作簿中循环,如果找到,则匹配单元格值,然后更新活动工作表中的不同单元格

g0czyy6m  于 2023-02-25  发布在  其他
关注(0)|答案(2)|浏览(125)

所有人。我已经打开了(打开介质整合)。我想从C列中选择一个值,然后遍历每个工作簿,每个工作簿中有许多工作表。如果该值(来自C列的值来自活动工作表)匹配工作簿中任何工作表中的任何地方,然后我想在活动工作表中更新H列,说明找到,否则不更新。我正在通过下面的脚本,但不能循环通过其他两个工作簿中的每一页/每一列。任何想法都非常感谢。

Option Explicit
Sub Found()
Dim NumberOfValues1 As Integer
Dim i As Long
Dim wb1, wb2 As Workbook
Dim wbsb1 As Worksheet
Dim newExcel As Excel.Application
Set newExcel = CreateObject("Excel.Application")
    
    Set wb1 = Workbooks.Open("C:\anil\avamar list\DSM_Master_Full Tapes.xlsx")
    Set wb2 = Workbooks.Open("C:\anil\avamar list\DSM_Master_Incremental.xlsx")
    
NumberOfValues1 = ThisWorkbook.Sheets("OPEN Media Consolidation").Range("A2").End(xlDown).Row
Set wbsb1 = ThisWorkbook.Sheets("OPEN Media Consolidation")
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i = 2 To NumberOfValues1
            
            For Each Worksheet In wb1
                'how to compare LCase(wbsb1.Range("A" & i).Value) to each cell value
                'if found then update wbsb1.Range("H" & i).Value = "Found"
                
                
            Next
            
            For Each Worksheet In wb2
            'how to compare LCase(wbsb1.Range("A" & i).Value) to each cell value
                'if found then update wbsb1.Range("H" & i).Value = "Found"
            Next

Next
Application.Calculation = xlCalculationAutomatic
 Application.ScreenUpdating = True
 wb.Close
    newExcel.Quit
    Set newExcel = Nothing
End Sub
oalqel3c

oalqel3c1#

下面的代码会不会做手脚?

Option Explicit
Sub Found()
Dim NumberOfValues1, NumberOfValues2, NumberOfValues3 As Integer
Dim i, n, o As Long
Dim wb1, wb2 As Workbook
Dim wbsb1, worksheet1, worksheet2 As Worksheet
Dim newExcel As Excel.Application
Set newExcel = CreateObject("Excel.Application")
Dim value1, value2, value3 As String
    
    Set wb1 = Workbooks.Open("C:\anil\commvault\DSM_Master_Full Tapes.xlsx")
    Set wb2 = Workbooks.Open("C:\anil\commvault\DSM_Master_Incremental.xlsx")
    
    
NumberOfValues1 = ThisWorkbook.Sheets("OPEN Media Consolidation").Range("A2").End(xlDown).Row
Set wbsb1 = ThisWorkbook.Sheets("OPEN Media Consolidation")
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i = 2 To NumberOfValues1
          value1 = wbsb1.Range("C" & i).Value
           For Each worksheet1 In wb1.Worksheets
                NumberOfValues2 = worksheet1.Range("A1").End(xlDown).Row
                 For n = 1 To NumberOfValues2
                  value2 = worksheet1.Cells(n, 1)
                     If value1 = value2 Then
                      wbsb1.Range("o" & i).Value = "Found"
                     End If
                 Next
            Next
            
            For Each worksheet2 In wb2.Worksheets
                NumberOfValues3 = worksheet2.Range("A1").End(xlDown).Row
                 For o = 1 To NumberOfValues3
                  value3 = worksheet2.Cells(o, 1)
                     If value1 = value3 Then
                      wbsb1.Range("o" & i).Value = "Found"
                     End If
                 Next
            Next
        

Next
Application.Calculation = xlCalculationAutomatic
 Application.ScreenUpdating = True
 wb1.Close
  wb2.Close
    newExcel.Quit
    Set newExcel = Nothing
End Sub
cbjzeqam

cbjzeqam2#

从你的答案中可以看到一个三重嵌套的For循环,没有退出条件,这就是为什么在更大的数据集上运行它要花很长时间的原因。
您是在每张纸上查找该值的第一次出现,还是在每张纸上查找所有值?
看一下下面的代码,看看是否可以让它为你所需要的工作。我还没有完成第二个嵌套的For循环。

For Each worksheet1 In wb1.Worksheets
    NumberOfValues2 = worksheet1.Range("A1").End(xlDown).Row
                
    On Error Resume Next

    'Look for value1 in Range C:C in worksheet1
    value2 = worksheet1.Range("C1:C" & NumberOfValues2).Find(value1)
    If Err.Number <> 91 Then 'If the value was found
        wbsb1.Range("O" & i).Value = "Found"
    End If

    On Error GoTo 0

    'If the value was not found, move on to the next worksheet

Next

'Add the Code for your wb2.Worksheets loop

相关问题