Excel 匹配一列,但仅当另一列包含字符串时匹配
我在Excel中得到了下表,它基本上是一个电话号码和从这些号码收到的消息的列表Excel 匹配一列,但仅当另一列包含字符串时匹配,excel,Excel,我在Excel中得到了下表,它基本上是一个电话号码和从这些号码收到的消息的列表 Phone Message 1234 REGR8547 1234 FWVR8.5 8479 REGR1154 8479 DBGW0 我有另一张表格,里面只列出了电话号码(没有重复的)。在第二张纸上,我想基本上转换数据,使其看起来像这样: Phone REG FWV DBG 1234 REGR8547 FWVR8.5 8479
Phone Message
1234 REGR8547
1234 FWVR8.5
8479 REGR1154
8479 DBGW0
我有另一张表格,里面只列出了电话号码(没有重复的)。在第二张纸上,我想基本上转换数据,使其看起来像这样:
Phone REG FWV DBG
1234 REGR8547 FWVR8.5
8479 REGR1154 DBGW0
因此,基本上,在新表的每一列中,我想匹配电话号码,但还要检查消息是否包含字符串。因此,对于REG列,我想包括messageif Phone=1234和message startswith REG
虽然我可以手动执行此操作,但我将在原始表中获得越来越多的源数据,因此理想情况下,我只希望能够将新数据粘贴到源表中,并自动更新第二个表
如何在Excel中执行此操作?我查看了您的配置文件,确定您可以将VBA宏作为解决方案来处理。我想这应该让你开始 我做了以下两个假设: 1) 原始数据从第1行A列开始。 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
子电话文本()
将Wbk设置为工作簿
设置Wbk=ActiveWorkbook
将当前手机设置为字符串
Dim numOriginalRows作为整数
昏暗的烛光和长的一样
numNewRows=1'跳过标题行。
工作表(“电话号码”)。激活
numOriginalRows=Wbk.工作表(“电话号码”).Range(“A2”,Range(“A2”).End(xlDown)).Rows.Count
工作表(“电话号码”)。单元格(1,4)。Value=“电话”
工作表(“电话号码”)。单元格(1,5)。Value=“REG”
工作表(“电话号码”)。单元格(1,6)。Value=“FWV”
工作表(“电话号码”)。单元格(1,7)。Value=“DBG”
对于x=2到numOriginalRows+1',由于标头的原因,从2开始。
如果(当前电话工作表(“电话号码”).单元格(x,1).Value),则
currentPhone=工作表(“电话号码”)。单元格(x,1)。值
numNewRows=numNewRows+1
工作表(“电话号码”)。单元格(numnerRows,4)。值=当前电话
如果结束
如果(Mid(工作表(“电话号码”)。单元格(x,2)。值,1,3)=“REG”),则
工作表(“电话号码”).Cells(numNewRows,5).Value=工作表(“电话号码”).Cells(x,2).Value
ElseIf(Mid(工作表(“电话号码”)。单元格(x,2)。值,1,3)=“FWV”),然后
工作表(“电话号码”)。单元格(numNewRows,6)。值=工作表(“电话号码”)。单元格(x,2)。值
ElseIf(Mid(工作表(“电话号码”)。单元格(x,2)。值,1,3)=“DBG”),然后
工作表(“电话号码”).单元格(numNewRows,7).值=工作表(“电话号码”).单元格(x,2).值
其他的
'这里有一些错误消息。
如果结束
下一个x
端接头
我查看了您的配置文件,确定您可以处理VBA宏作为解决方案。我想这应该让你开始
我做了以下两个假设:
1) 原始数据从第1行A列开始。
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
子电话文本()
将Wbk设置为工作簿
设置Wbk=ActiveWorkbook
将当前手机设置为字符串
Dim numOriginalRows作为整数
昏暗的烛光和长的一样
numNewRows=1'跳过标题行。
工作表(“电话号码”)。激活
numOriginalRows=Wbk.工作表(“电话号码”).Range(“A2”,Range(“A2”).End(xlDown)).Rows.Count
工作表(“电话号码”)。单元格(1,4)。Value=“电话”
工作表(“电话号码”)。单元格(1,5)。Value=“REG”
工作表(“电话号码”)。单元格(1,6)。Value=“FWV”
工作表(“电话号码”)。单元格(1,7)。Value=“DBG”
对于x=2到numOriginalRows+1',由于标头的原因,从2开始。
如果(当前电话工作表(“电话号码”).单元格(x,1).Value),则
currentPhone=工作表(“电话号码”)。单元格(x,1)。值
numNewRows=numNewRows+1
工作表(“电话号码”)。单元格(numnerRows,4)。值=当前电话
如果结束
如果(Mid(工作表(“电话号码”)。单元格(x,2)。值,1,3)=“REG”),则
工作表(“电话号码”).Cells(numNewRows,5).Value=工作表(“电话号码”).Cells(x,2).Value
ElseIf(Mid(工作表(“电话号码”)。单元格(x,2)。值,1,3)=“FWV”),然后
工作表(“电话号码”)。单元格(numNewRows,6)。值=工作表(“电话号码”)。单元格(x,2)。值
ElseIf(Mid(工作表(“电话号码”)。单元格(x,2)。值,1,3)=“DBG”),然后
工作表(“电话号码”).单元格(numNewRows,7).值=工作表(“电话号码”).单元格(x,2).值
其他的
'这里有一些错误消息。
如果结束
下一个x
端接头
您可以在图片中使用此公式。请使用
Ctrl-Shift-Enter
在第一个输出单元格中输入,然后向下复制
看看我在图片中使用的设置,并相应地调整你的单元格引用
特别是:
1) 将match函数的第一个参数调整到输出表所在的位置
2) 如果您的输出为