如果下一个单元格文本与当前单元格文本匹配,则返回另一个单元格中

时间:2016-03-31 18:03:38

标签: excel excel-vba excel-formula vba

我试图想出一个脚本或公式,它采用具有相似文本的多个单元格,并以特定格式返回相邻单元格的值。

示例:

A          |            B
-----------------------------
123        | Sample String I
-----------------------------
456        | Sample String II
-----------------------------
789        | Sample String III
-----------------------------
987        | Sample String IV
-----------------------------
654        | Not String I
-----------------------------

在B栏中,取字符串" Sample String" (或任何单词)并在A列中获取与其相邻的数字,然后转到B列下面的下一个单元格,如果单词相同,则将A列中的数字连接到输出。

输出应该是这样的:

[样本字符串,(123,456,789,987)]

我在思考if B=LIKE(next cell then CONCATENATE ADJACENT Cell(A), Output Cell(C)

的内容

一个问题是,有数百个重复,几乎但不完全,我有多个工作簿要经历。所以我也想也许有一种比较文本的方法,如果文本匹配超过70%,那么这样做,否则创建一个新的条目或东西。我真的不知道。如果有其他程序可以更好地做到这一点,那么我可以接受想法。

2 个答案:

答案 0 :(得分:3)

Excel刚刚在最新的Office 365更新和在线应用程序中引入了TEXTJOIN():

=TEXTJOIN(",",TRUE,IF(ISNUMBER(SEARCH("Sample String",$B$1:$B$5)),$A$1:$A$5,""))

enter image description here

对于早期版本放入C1并复制:

=IF(ISNUMBER(SEARCH(LEFT(B2,FIND("}}}",SUBSTITUTE(B2," ","}}}",LEN(B2)-LEN(SUBSTITUTE(B2," ",""))))-1),B1)),A1&"," &C2,A1)

enter image description here

这将使每个新子字符串中的第一个成为正确的值。然后使用VLOOKUP(),如:

=VLOOKUP("Sample Strin" & "*",$B$1:$C$5,2,FALSE)

将返回正确的值:

enter image description here

答案 1 :(得分:0)

使用Sub Button1_Click() Dim LstRw As Long, Rng As Range, c As Range, s As String, f As String s = "Sample String" LstRw = Cells(Rows.Count, "B").End(xlUp).Row Set Rng = Range("B1:B" & LstRw) For Each c In Rng.Cells If InStr(c, s) Then f = f & c.Offset(0, -1) & "," End If Next c MsgBox Mid(f, 1, Len(f) - 1) End Sub

    mydomain.com/files/user1/