Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 匹配一列,但仅当另一列包含字符串时匹配_Excel - Fatal编程技术网

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

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

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) 如果您的输出为