在一个工作表中搜索包含字符串的单元格的列,然后引用另一个工作表

时间:2017-04-05 16:00:36

标签: excel vba excel-vba excel-formula

我想要做的是在一个工作表中的列中搜索特定字符串(让我们称之为工作表1),并将列相邻中的值引用到那些匹配的单元格中另一张(表2)。

为了更清楚,这里有一个图表说明了我正在尝试做的事情:

enter image description here

我想要做的是在工作表1中搜索“Acme”中的Customer列,然后使用每个Acme条目的相应示例填充工作表2中的列,忽略任何非Acme条目。

我猜这会比普通的Excel宏更复杂,并且需要VBA功能。无论哪种方式,如果有人能够至少指出我在哪里开始搜索,我将非常感激。

2 个答案:

答案 0 :(得分:0)

这是一个没有VBA的单页示例,您可以根据自己的需要进行调整:

D1 中输入:

Acme公司

D2 中输入数组公式

=IFERROR(INDEX($A$1:$B$9,SMALL(IF($A$1:$A$9=$D$1,ROW($A$1:$A$9)),ROW(1:1)),2),"")

并复制下来。

必须使用 Ctrl + Shift + 输入输入

数组公式,而不仅仅是 Enter key。

enter image description here

答案 1 :(得分:0)

这将找到带有客户“Acme”的第一行sheet1。它将找到具有客户名称“Acme”的sheet2的第一行,并将sheet1“Acme”行列C的内容添加到sheet2 Acme行列“C”中的任何内容。它假设这些数字是值,而不是字符串。您可以通过删除添加来更改它。您还可以更改列或其他任何内容以满足您的需求。

Sub updateSheet2()
Dim customerNameColumnSheet1 As String, customerNameColumnSheet2 As String    
Dim lastRowSheet1 As Long
Dim lastRowSheet2 As Long
Dim customerName As String
Dim Sheet1Row As Long
Dim Sheet2Row As Long

customerNameColumnSheet1 = "A"
customerNameColumnSheet2 = "A"
customerName = "Acme" ' or customerName = Sheet1.Range("A12").value, etc

lastRowSheet1 = Sheet1.Cells(Rows.Count, customerNameColumnSheet1).End(xlUp).row
lastRowSheet2 = Sheet2.Cells(Rows.Count, customerNameColumnSheet2).End(xlUp).row

With Sheet1.Range(customerNameColumnSheet1 & "1:" & customerNameColumnSheet1 & lastRowSheet1)
    Set c = .Find(customerName, LookIn:=xlValues, lookat:=xlPart)
    If Not c Is Nothing Then
        Sheet1Row = c.row
        With Sheet2.Range(customerNameColumnSheet2 & "1:" & customerNameColumnSheet2 & lastRowSheet2)
            Set D = .Find(customerName, LookIn:=xlValues, lookat:=xlPart)
            If Not D Is Nothing Then
                Sheet2Row = D.row
                Sheet2.Range("C" & Sheet2Row).Value = Sheet1.Range("C" & Sheet1Row).Value' + Sheet2.Range("C" & Sheet2Row).Value  ' assuming values, not string
            End If
        End With
    End If
End With

End Sub