繁体   English   中英

Excel:如何组合包含特定文本的单元格?

[英]Excel: How to combine cells that contain certain text?

我有一个 Excel 电子表格,A 列中有一个人的名字,B 到 DN 列中有一个在线聊天对话框,如下所示:

A           B                  C                   D                

Name        Transcript 1       Transcript 2        Transcript 3        ........

John        Visitor: line 1.   John: line 2.       Visitor: line 3.

Sally       Sally: line 4.     Sally: line 5.      Visitor: line 6.

以此类推几千行。 我的目标是将每一行中包含“访客:”的单元格合并到一个单元格中,并在另一个单元格中合并列 A 中包含名称的单元格。所以我想在末尾添加两个新列,如下所示:

DR                        DS

Visitor: line 1.          John: line 2.
Visitor: line 3.

Visitor: line 6.          Sally: line 4.
                          Sally: line 5.

我试过使用TEXTJOIN function 像这样: =TEXTJOIN(CHAR(10),TRUE,IF(ISNUMBER(FIND("Visitor:",B2:DN2)),B2:DN2,""))=TEXTJOIN(CHAR(10),TRUE,IF(ISNUMBER(FIND(A2&":",B2:DN2)),B2:DN2,"")) 但我发现这只适用于某些行,并为其他行返回值错误。 我无法弄清楚有效的行和无效的行之间有什么区别。 我认为 isnumber(find(...)) 工作正常,但它被 if 语句赶上了,我不确定问题是什么。 非常感谢任何见解!

我想到了。 评论中的 Scott Craner 的想法是正确的,只是行对于TEXTJOIN函数来说不是太长,而是字符串对于IF函数来说太长了。 因此,我使用LEFTMID函数拆分字符串,如下所示:

=TEXTJOIN(CHAR(10),TRUE,IF(ISNUMBER(FIND("Visitor:",A2:DN2)),LEFT(A2:DN2,255),"")&IF(ISNUMBER(FIND("Visitor:",A2:DN2)),MID(A2:DN2,256,255),"")&IF(ISNUMBER(FIND("Visitor:",A2:DN2)),MID(A2:DN2,511,255),""))

=TEXTJOIN(CHAR(10),TRUE,IF(ISNUMBER(FIND(A2&":",A2:DN2)),LEFT(A2:DN2,255),"")&IF(ISNUMBER(FIND(A2&":",A2:DN2)),MID(A2:DN2,256,255),"")&IF(ISNUMBER(FIND(A2&":",A2:DN2)),MID(A2:DN2,511,255),""))

这给了我正在寻找的确切结果。 如果字符串长度超过 765 个字符,则必须对其进行编辑,但现在它适合我的目的。

我确信它可以用 excel 公式来完成。 但是我无法使用内置命令来做到这一点。 我从互联网上找到了一个代码并将其更改如下。 它解决了我的问题。

Function combinebytext(CriteriaRng As Range, Criteria As Variant, _
    ConcatenateRng As Range, Optional Delimeter As String = " , ") As Variant
Dim i As Long
Dim strResult As String
Dim n As Long
On Error GoTo ErrHandler
If CriteriaRng.Count <> ConcatenateRng.Count Then
    Combinerows = CVErr(xlErrRef)
    Exit Function
End If
For i = 1 To CriteriaRng.Count
                    
    n = InStr(CriteriaRng.Cells(i).Value, Criteria)
    
    If n > 0 Then
        
        strResult = strResult & Delimeter & ConcatenateRng.Cells(i).Value
    End If
Next i
If strResult <> "" Then
    strResult = Mid(strResult, Len(Delimeter) + 1)
End If
combinebytext = strResult
Exit Function

ErrHandler: combinebytext = CVErr(xlErrValue) End Function在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM