我试图想出一个脚本或公式,它采用具有相似文本的多个单元格,并以特定格式返回相邻单元格的值。
示例:
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%,那么这样做,否则创建一个新的条目或东西。我真的不知道。如果有其他程序可以更好地做到这一点,那么我可以接受想法。
答案 0 :(得分:3)
Excel刚刚在最新的Office 365更新和在线应用程序中引入了TEXTJOIN():
=TEXTJOIN(",",TRUE,IF(ISNUMBER(SEARCH("Sample String",$B$1:$B$5)),$A$1:$A$5,""))
对于早期版本放入C1并复制:
=IF(ISNUMBER(SEARCH(LEFT(B2,FIND("}}}",SUBSTITUTE(B2," ","}}}",LEN(B2)-LEN(SUBSTITUTE(B2," ",""))))-1),B1)),A1&"," &C2,A1)
这将使每个新子字符串中的第一个成为正确的值。然后使用VLOOKUP(),如:
=VLOOKUP("Sample Strin" & "*",$B$1:$C$5,2,FALSE)
将返回正确的值:
答案 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/