Excel 使用;例如;查找单元格是否包含值?

Excel 使用;例如;查找单元格是否包含值?,excel,vba,Excel,Vba,我试图将一个工作簿的列中每个单元格的值与另一个工作簿的列中每个单元格的值进行比较,如果它们的值匹配,我希望将整行复制到第一个工作簿中 Im将N设置为Im比较的值,并使用“If(cell.value Like“N”)=True Then” 问题:的工作原理是找到所有包含字母“N”的单元格,然后将其复制过来。我需要它来找到所有的单元格,这些单元格都有我之前分配给N的值。我的代码如下 Option Explicit Sub Compare() Dim N as String For i = 1

我试图将一个工作簿的列中每个单元格的值与另一个工作簿的列中每个单元格的值进行比较,如果它们的值匹配,我希望将整行复制到第一个工作簿中

Im将N设置为Im比较的值,并使用“If(cell.value Like“N”)=True Then”

问题:的工作原理是找到所有包含字母“N”的单元格,然后将其复制过来。我需要它来找到所有的单元格,这些单元格都有我之前分配给N的值。我的代码如下

Option Explicit

Sub Compare()

Dim N as String

For i = 1 To Workbook(1).Worksheets(1).UsedRange.Rows.Count

        N = Workbook(1).Worksheets(1).Cells(i, 4).Value

        For Each cell In Workbook(2).Sheets(2).Range("B:B").Cells
            If (cell.Value Like "*N*" Then) = True Then
                'Do something; ie, copy over row
            End If
        Next cell
Next i

Workbook(2).Close

End Sub()

尝试一下,看看它是否适合您:

Option Explicit

Sub Compare()

Dim wb1 As Workbook
Dim wb2 As Workbook

Set wb1 = Application.Workbooks("Book1")
Set wb2 = Application.Workbooks("Book2")

Dim wsName As String

wsName = "Sheet1"

Dim rng1 As Range
Dim rng2 As Range

wb1.Activate
Set rng1 = wb1.Worksheets(wsName).Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
wb2.Activate
Set rng2 = wb2.Worksheets(wsName).Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))

Dim cell As Range
Dim found As Range

For Each cell In rng1
    Set found = rng2.Find(cell, LookIn:=xlValues, LookAt:=xlPart,  SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not found Is Nothing Then
        'Copy over row
    End If
Next cell

wb2.Close

End Sub

尝试一下,看看它是否适合您:

Option Explicit

Sub Compare()

Dim wb1 As Workbook
Dim wb2 As Workbook

Set wb1 = Application.Workbooks("Book1")
Set wb2 = Application.Workbooks("Book2")

Dim wsName As String

wsName = "Sheet1"

Dim rng1 As Range
Dim rng2 As Range

wb1.Activate
Set rng1 = wb1.Worksheets(wsName).Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
wb2.Activate
Set rng2 = wb2.Worksheets(wsName).Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))

Dim cell As Range
Dim found As Range

For Each cell In rng1
    Set found = rng2.Find(cell, LookIn:=xlValues, LookAt:=xlPart,  SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not found Is Nothing Then
        'Copy over row
    End If
Next cell

wb2.Close

End Sub

您正在与文本值
“*N*”
进行比较。你希望
像“*”&N&“*”
那样。尝试:
如果InStr(1,cell.Value2,N,vbTextCompare)那么
@KenWhite我尝试了这一点,但它再次处理了所有包含值N的单元格。然后你的问题就不清楚了。您能更清楚地说明Im设置Im与N比较的值是什么意思吗?@KenWhite在我的代码中有“N=工作簿(1).工作表(1).单元格(i,4).值”N是第一本工作手册中的值。在For循环中,N每次都是一个新值。您将与文本值
“*N*”
进行比较。你希望
像“*”&N&“*”
那样。尝试:
如果InStr(1,cell.Value2,N,vbTextCompare)那么
@KenWhite我尝试了这一点,但它再次处理了所有包含值N的单元格。然后你的问题就不清楚了。您能更清楚地说明Im设置Im与N比较的值是什么意思吗?@KenWhite在我的代码中有“N=工作簿(1).工作表(1).单元格(i,4).值”N是第一本工作手册中的值。在For循环中,N每次都是一个新值。不确定我做错了什么或误解了什么。我只是在没有任何解释的情况下投了反对票。不确定我做错了什么或误解了什么。我只是在没有任何解释的情况下投了反对票。