匹配一个列,但只有当另一列包含一个string

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

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

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

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

所以本质上,在新表的每一列中,我想匹配电话号码,但也检查消息是否包含string。 所以,对于REG列,如果Phone = 1234和消息以REG开头,我想包括该消息。

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

我如何在Excel中做到这一点?

你可以在图片中使用这个公式。 请用

按Ctrl-Shift键input

在第一个输出单元格中input它,然后横向和纵向复制。

公式在同一张纸上

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

尤其是:

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

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

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

我看着你的个人资料,并确定你可以处理一个VBAmacros作为一个解决scheme。 我认为这应该让你开始。

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

这个代码在原来的电话号码列表中,每当电话号码改变时在D列创build一个新的行。 它使用MID函数查找以REG或FWV或DBG开头的string,然后将string写入相应的行。

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

 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