匹配列,但仅限于另一列包含字符串

时间:2016-07-15 10:24:01

标签: excel

我在Excel中有下表,它基本上是从这些号码收到的电话号码和消息列表。

Phone    Message
1234     REGR8547
1234     FWVR8.5
8479     REGR1154
8479     DBGW0

我有另一张只包含电话号码列表的表(没有重复项)。在第二张表中,我想基本上转置数据,使其看起来像这样:

Phone    REG        FWV        DBG
1234     REGR8547   FWVR8.5
8479     REGR1154              DBGW0

基本上,在新表的每一列中,我想匹配电话号码,还要检查消息是否包含字符串。因此,对于REG列,如果Phone = 1234并且Message以REG开始,我想要包含消息。

虽然我可以手动执行此操作,但我将在原始表中获得越来越多的源数据,因此理想情况下,我只希望能够将新数据粘贴到源表中并使第二个表自动更新。

如何在Excel中执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以在图片中使用此公式。请使用

  

<强>控制移输入

在第一个输出单元格中输入,然后向上和向下复制。

Formulas all on same sheet

查看我在图片中使用的设置,并相应地调整您的单元格引用。

特别是:

1)将匹配函数的第一个参数调整为输出表格

2)如果您的输出公式与您所说的不同,那么请输入查找范围的完整工作表参考。

=IFERROR(INDEX('Sheet1'!$B$2:$B$5,MATCH($E2&F$1&"*",'Sheet1'!$A$2:$A$5&'Sheet1'!$B$2:$B$5,0)),"")

答案 1 :(得分:0)

我查看了您的个人资料,并确定您可以将VBA宏作为解决方案处理。我认为这应该让你开始。

我做了这两个假设: 1)原始数据从第1行开始。 2)所有原始重复的电话号码都在连续的行中。它们可以按任何顺序排序,但它们必须像你拥有它们一样。

此代码在原始电话号码列表中下移,并在每次电话号码更改时在D列中创建新行。它使用MID函数查找以REG或FWV或DBG开头的字符串,然后将字符串写入相应的行。

如果需要,您可以将其调整为写入另一个工作表。您还可以更灵活地处理更多情况。您可以在调试模式中单步执行并观察它填写电子表格中的单元格。

Sub PhoneText()

Dim Wbk As Workbook

Set Wbk = ActiveWorkbook

Dim currentPhone As String

Dim numOriginalRows As Integer
Dim numNewRows As Long

numNewRows = 1 'Skip the header row.


Worksheets("PhoneNumbers").Activate
numOriginalRows = Wbk.Worksheets("PhoneNumbers").Range("A2", Range("A2").End(xlDown)).Rows.Count


Worksheets("PhoneNumbers").Cells(1, 4).Value = "Phone"
Worksheets("PhoneNumbers").Cells(1, 5).Value = "REG"
Worksheets("PhoneNumbers").Cells(1, 6).Value = "FWV"
Worksheets("PhoneNumbers").Cells(1, 7).Value = "DBG"


For x = 2 To numOriginalRows + 1 'start at 2 because of header.

    If (currentPhone <> Worksheets("PhoneNumbers").Cells(x, 1).Value) Then
        currentPhone = Worksheets("PhoneNumbers").Cells(x, 1).Value
        numNewRows = numNewRows + 1
        Worksheets("PhoneNumbers").Cells(numNewRows, 4).Value = currentPhone
    End If

    If (Mid(Worksheets("PhoneNumbers").Cells(x, 2).Value, 1, 3) = "REG") Then
       Worksheets("PhoneNumbers").Cells(numNewRows, 5).Value = Worksheets("PhoneNumbers").Cells(x, 2).Value
    ElseIf (Mid(Worksheets("PhoneNumbers").Cells(x, 2).Value, 1, 3) = "FWV") Then
        Worksheets("PhoneNumbers").Cells(numNewRows, 6).Value = Worksheets("PhoneNumbers").Cells(x, 2).Value
    ElseIf (Mid(Worksheets("PhoneNumbers").Cells(x, 2).Value, 1, 3) = "DBG") Then
        Worksheets("PhoneNumbers").Cells(numNewRows, 7).Value = Worksheets("PhoneNumbers").Cells(x, 2).Value
    Else
        ' Some error message here.
    End If



Next x

End Sub