2012-10-02 48 views
0

我有一个Excel文件,其中包含一些文本,需要用新短语替换某些单词,但保留一些部分的原文。为了让我的用户保持简单,我想允许用原始单词进行过滤,这意味着我需要每个单词列。 Excel的“文本到列”功能可能有帮助,但我没有打扰它,因为我听说你需要指定数字列。用空格(或任何字符)为任意数量的单词分隔文本单元格,并重复单词

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


源小区= A2

色谱柱的第一个字:B2

柱与第二个字:C2


A2:这是一些示例文本

B2:= IFERROR(LEFT(A2,FIND(””,A2)), “”)

C2:= IFERROR(LEFT(SUBSTITUTE(MID($ A2,FIND(B2,$ A2), LEN($ A2) - 查找(B2,$ A2)),B2,“”),FIND(“”,SUBSTITUTE(MID($ A2,FIND(B2,$ A2),LEN($ A2) - FIND ,$ A2)),B2, “”))), “”)

D2:从C2

正确填写...


什么这个烂摊子的东西在C2正在做的是basicall y根据前一个单元格中的单词切断源单元格(A2)。所以,B2正在寻找它看到的第一个空间,并将剩下的字符串扔掉,只留下“This”这个词。 C2正在看B2,并从A2的值中删除它看到的单词并查找下一个空格。 D2会看C2,等等。不幸的是,当有重复的单词时,这会失败。

如果我们将A2中的示例文本更改为“这是一些示例文本,是否是问题”(重复“is”),它会被卡住,重复单词“is”,“some”,“example” ,“文本”,一遍又一遍地填充正确。

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

希望这对别人有帮助!

回答

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 
相关问题