【问题标题】:If next cell text matches current cell text then return adjacent value in another cell如果下一个单元格文本与当前单元格文本匹配,则返回另一个单元格中的相邻值
【发布时间】:2016-04-01 02:56:45
【问题描述】:

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

例子:

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%,那么就这样做,否则会创建一个新条目或其他东西。不过我真的不知道。如果有其他程序可以更好地做到这一点,那么我愿意接受。

【问题讨论】:

标签: excel excel-formula vba


【解决方案1】:

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)

将返回正确的值:

【讨论】:

  • 如果用户拥有最新的 Office 版本......并且如果你能找到一种方法来处理多个可能的匹配项。
  • 这就是我最终要做的。我有最新的 O365 在工作,所以这是一个很好的解决方案。谢谢!
【解决方案2】:

使用Instr()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多