我在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中执行此操作?
答案 0 :(得分:2)
您可以在图片中使用此公式。请使用
<强>控制移输入强>
在第一个输出单元格中输入,然后向上和向下复制。
查看我在图片中使用的设置,并相应地调整您的单元格引用。
特别是:
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