Vba 如果相邻单元格符合条件,则复制单元格内容

Vba 如果相邻单元格符合条件,则复制单元格内容,vba,excel,Vba,Excel,我有一系列的矩阵,由7列和不同行数组成。我想要矩阵第2列中的公司名称如果第4列中的相应数据“CM”聚合到每个矩阵的一个单元格中(假设所有不同矩阵的B3:B98),不同名称之间有一个空格。有关矩阵的示例,请参见下图 最终结果是,如果G列中同一行的单元格为“CM”,则E列中的所有公司名称将聚合到B3中,下一个矩阵从B4中的M列开始,依此类推 在让if语句识别单元格内容中的“CM”或使用Join语句聚合结果方面,我没有成功。非常感谢您的帮助 编辑: 目标是将特定证券上的所有承销商聚集在一个单元格中,以

我有一系列的矩阵,由7列和不同行数组成。我想要矩阵第2列中的公司名称如果第4列中的相应数据“CM”聚合到每个矩阵的一个单元格中(假设所有不同矩阵的B3:B98),不同名称之间有一个空格。有关矩阵的示例,请参见下图

最终结果是,如果G列中同一行的单元格为“CM”,则E列中的所有公司名称将聚合到B3中,下一个矩阵从B4中的M列开始,依此类推

在让if语句识别单元格内容中的“CM”或使用Join语句聚合结果方面,我没有成功。非常感谢您的帮助

编辑: 目标是将特定证券上的所有承销商聚集在一个单元格中,以便可以轻松地在表格的另一部分中搜索该单元格,以查找特定承销商的存在

正如您可能知道的,下面的代码不起作用。我撞到了墙上,因为我无法让它区分含有“CM”的细胞和不含有“CM”的细胞。(我知道下面的代码不会在任何单元格中聚合结果,只会将结果复制到B列中,正如我所说的,这是一项正在进行的工作,已经暂停。)

编辑:使用Urderboy的代码,我对其进行了修改,以下面的方式处理同一工作表上的多个矩阵。这个版本的技巧与他的不同,因为这个版本依赖于所有包含相同列数且不超过100行的矩阵

For i = 7 To 857 Step 9
For y = 3 To 100
    If Cells(y, i) = "CM" Then
        s = s & Cells(y, i).Offset(0, -1).Value & " "
    End If
Next y

If s = "" Then
    s = "Sole Lead"
End If
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = Trim(s)
s = ""

Next i

将代码粘贴到
VBE
中的
工作表5
(或任何要在其上运行此操作的工作表)

字符串
s
,将在循环通过您的列检查“CM”匹配时自行生成

按原样,代码将在每个新添加的值之间添加逗号,例如,so和,so,然后在显示最后一个字符串之前删除最后一个逗号

Option Explicit

Sub TextCM()

Dim i As Long, s As String

For i = 3 To Range("G" & Rows.Count).End(xlUp).Row
    If Range("G" & i) = "CM" Then
        s = s & Range("E" & i).Value & ", "     'Remove & ", " if you do not want the comma + space
    End If
Next i

Range("B2") = Left(s, Len(s) - 2)               'Change to Range("B2") = s to not delete last character in string

End Sub

您应该能够找出如何将其扩展到多个表(矩阵?)没有问题

将代码粘贴到
VBE
工作表5
中(或您希望在其上运行此操作的任何工作表)

字符串
s
,将在循环通过您的列检查“CM”匹配时自行生成

按原样,代码将在每个新添加的值之间添加逗号,例如,so和,so,然后在显示最后一个字符串之前删除最后一个逗号

Option Explicit

Sub TextCM()

Dim i As Long, s As String

For i = 3 To Range("G" & Rows.Count).End(xlUp).Row
    If Range("G" & i) = "CM" Then
        s = s & Range("E" & i).Value & ", "     'Remove & ", " if you do not want the comma + space
    End If
Next i

Range("B2") = Left(s, Len(s) - 2)               'Change to Range("B2") = s to not delete last character in string

End Sub

您应该能够找出如何将其扩展到多个表(矩阵?)没有问题

使用示例数据查看最终结果照片(你想实现什么?)也会有所帮助。@Jeeped我已经添加了我为此而编译的代码,@Urderboy目标是将特定证券的所有承销商聚合到一个单元格中,这样就可以很容易地在表格的另一部分搜索单元格,以确定是否有特定的保险人在场。因此,单元格B3将所有公司都列在E列,从Academy Securities ANZ Securities BBVA Securities等开始。如果将
=LEN(G4)
放入一个未使用的单元格,您会得到什么?@Jeeped返回“2”看到最终结果照片(您试图实现什么?)使用您的示例数据也会有所帮助。@Jeeped我已经添加了我为此编译的代码,@urdearboy目标是将特定证券上的所有承销商聚合到一个单元格中,以便可以在表格的另一部分轻松搜索该单元格,以查找特定承销商的存在。因此,单元格B3将所有公司都列在E列,从Academy Securities ANZ Securities BBVA Securities等开始。如果将
=LEN(G4)
放入一个未使用的单元格,会得到什么?@Jeeped返回“2”