Vba 合并两个不同工作表中的文本

Vba 合并两个不同工作表中的文本,vba,excel,merge,Vba,Excel,Merge,我正在研究如何合并工作簿中两个不同工作表中的文本,如果这两个工作表中的某个值之间存在匹配 我有两张表,延迟和DRG。我想将“DRG”列E中的文本合并到“Latency”表列P中(行可能已经有文本,但“DRG”列E中的文本应该用分号合并。) 示例:(下面的代码进行匹配并更新O列中的某个文本,我想将合并部分与此代码一起添加) 如果“延迟”的a列与“DRG”的B列相匹配,则“DRG”的E列中的文本应合并到“延迟”表的P列(该特定行)中 任何更好的方法都是受欢迎的 Sub PassFailValidat

我正在研究如何合并工作簿中两个不同工作表中的文本,如果这两个工作表中的某个值之间存在匹配

我有两张表,延迟和DRG。我想将“DRG”列E中的文本合并到“Latency”表列P中(行可能已经有文本,但“DRG”列E中的文本应该用分号合并。)

示例:(下面的代码进行匹配并更新O列中的某个文本,我想将合并部分与此代码一起添加) 如果“延迟”的a列与“DRG”的B列相匹配,则“DRG”的E列中的文本应合并到“延迟”表的P列(该特定行)中

任何更好的方法都是受欢迎的

Sub PassFailValidation()

 Dim Rng As Range, cl As Range
Dim LastRow As Long, MatchRow As Variant

With Sheets("DRG")
    LastRow = .Cells(.Rows.count, "C").End(xlUp).Row '<-- find last row with data in column C
    Set Rng = .Range("C2:C" & LastRow) '<-- set range in Column C
End With

With Sheets("Latency")
    For Each cl In .Range("B2:B" & .Cells(.Rows.count, "B").End(xlUp).Row) ' loop through all cells in Column B
        MatchRow = Application.Match(cl.Value, Rng, 0) ' find match with values in Colummn C as in "DRG" sheet
        If Not IsError(MatchRow) Then ' <-- successful match

            Select Case Sheets("DRG").Range("D" & MatchRow + 1).Value 'Set D as the cell whch has the value
                Case "Approved"
                    .Range("O" & cl.Row).Value = "Pass"

                Case "Pended"
                    .Range("O" & cl.Row).Value = "Fail"

                 Case "In progress"
                    .Range("O" & cl.Row).Value = "In progress"
             End Select
         End If
     Next cl
End With
Sub-PassFailValidation()
变暗Rng As范围,cl As范围
变暗最后一行为长,匹配行为变体
带图纸(“图纸”)

LastRow=.Cells(.Rows.count,“C”).End(xlUp).Row'我相信这个问题会吸引一些很棒的VBA编码答案。然而,使用数据库引擎技术来解决这类问题是可能的。开始时请参见此内容,只需添加:

If Not Sheets("DRG").Range("E" & MatchRow + 1).Value = vbNullString Then .Range("P" & cl.row).Value = Range("P" & cl.row).Value & IIf(Not Range("P" & cl.row).Value = vbNullString, ";", "") & Sheets("DRG").Range("E" & MatchRow + 1).Value
如下

Sub PassFailValidation()

    Dim Rng As Range, cl As Range
    Dim LastRow As Long, MatchRow As Variant

    With Sheets("DRG")
        LastRow = .Cells(.Rows.Count, "C").End(xlUp).row '<-- find last row with data in column C
        Set Rng = .Range("C2:C" & LastRow) '<-- set range in Column C
    End With

    With Sheets("Latency")
        For Each cl In .Range("B2:B" & .Cells(.Rows.Count, "B").End(xlUp).row) ' loop through all cells in Column B
            MatchRow = Application.Match(cl.Value, Rng, 0) ' find match with values in Colummn C as in "DRG" sheet
            If Not IsError(MatchRow) Then ' <-- successful match
                Select Case Sheets("DRG").Range("D" & MatchRow + 1).Value 'Set D as the cell whch has the value
                    Case "Approved"
                        .Range("O" & cl.row).Value = "Pass"

                    Case "Pended"
                        .Range("O" & cl.row).Value = "Fail"

                     Case "In progress"
                        .Range("O" & cl.row).Value = "In progress"
                 End Select
                If Not Sheets("DRG").Range("E" & MatchRow + 1).Value = vbNullString Then .Range("P" & cl.row).Value = .Range("P" & cl.row).Value & IIf(Not .Range("P" & cl.row).Value = vbNullString, ";", "") & Sheets("DRG").Range("E" & MatchRow + 1).Value
             End If
         Next cl
    End With

End Sub
Sub-PassFailValidation()
变暗Rng As范围,cl As范围
变暗最后一行为长,匹配行为变体
带图纸(“图纸”)

LastRow=.Cells(.Rows.Count,“C”).End(xlUp)。row'你有一些测试数据吗?如果需要,我可以创建一个并上传到任何第三方网站。这太棒了!!!还有一件事,即使在空单元格中也会添加“;”,而只有在存在文本时才应该添加它…如何更改此项?愚蠢的疑问,我正在将此子项分配给一个按钮,当我通过按钮运行它时,合并不起作用…但当我处于“延迟”状态时工作表并通过VBA编辑器运行代码。如何使代码通过按钮运行?是否应将工作目录声明为“延迟”@用户3598756