0

我有一个 Excel 文件,其中有一列中有一些文本,我需要用新短语替换一些单词,但保留原始文本的某些部分。为了让我的用户保持简单,我想允许按原始单词进行过滤,这意味着我需要每个单词一列。Excel“文本到列”功能可能会有所帮助,但我没有打扰它,因为我听说您需要指定数字列。

长话短说,这就是我想出的:


源单元格 = A2

第一个单词的列:B2

第二个单词的列:C2


A2:这是一些示例文本

B2: =IFERROR(LEFT(A2, FIND(" ", A2)), "")

C2: =IFERROR(LEFT(SUBSTITUTE(MID($A2, FIND(B2, $A2), LEN($A2) - FIND(B2, $A2)), B2, ""), FIND(" ", SUBSTITUTE( MID($A2, FIND(B2, $A2), LEN($A2) - FIND(B2, $A2)), B2, ""))), "")

D2:从 C2 开始填充

...


C2 中的这些乱七八糟的东西基本上是根据前一个单元格中的单词来分割源单元格(A2)。因此,B2 正在寻找它看到的第一个空格,并将字符串的其余部分扔掉,只留下单词“This”。C2 正在查看 B2,并从 A2 的值中删除它看到的单词并寻找下一个空格。D2 会查看 C2,依此类推。不幸的是,当有一个重复的单词时,这就会崩溃。

如果我们将 A2 中的示例文本更改为“This is some example text, is it a question”(重复“is”),它会卡住重复单词“is”、“some”、“example”、“text, " 一遍又一遍地填充正确。

对于我目前的任务,我真的不需要答案,但我希望有一个完整的解决方案来解决这种情况,因为在任何地方都没有找到好的解决方案。

希望这对某人有帮助!

4

1 回答 1

0

这是使用一些看起来不那么难看的 VBA 的可能性:

Sub splitCell(source As Range, delimiter As String, target As Range)
    'Takes value of source range and splits it by the delimiter horizontally
    'starting at the target range.
    Dim text() As String
    text = Split(source.Value, delimiter)
    For x = LBound(text) To UBound(text)
        target.Offset(0, x).Value = text(x)
    Next
End Sub

'Sample Call
Sub Test()
    With ThisWorkbook.Sheets(1)
        splitCell .Range("A2"), " ", .Range("B2")
    End With
End Sub
于 2012-10-02T15:07:55.883 回答