拆分文本列

时间:2014-06-12 10:39:33

标签: string excel excel-formula worksheet-function

我有一个非常大的文件(800万行)我在PowerPivot中导入了一个我要分割的地址列:

enter image description here

我尝试了LEFT和FIND,但无法获得我想要的输出。

3 个答案:

答案 0 :(得分:4)

B1 中的 A1 中的数据输入:

=TRIM(MID(SUBSTITUTE($A1,"#",REPT(" ",999)),COLUMNS($A:A)*999-998,999))

并复制。

答案 1 :(得分:3)

使用#作为分隔符的列的文本可能适合,但可能对每个结果单元格使用TRIM。

答案 2 :(得分:1)

鉴于现在(版本2010+)有一个菜单命令来执行此操作,可以通过导入向导完成,VBA功能可以轻松完成此操作,并且已发布其他解决方案,这似乎是不必要的。尽管如此,这是使用数组公式的替代方法。

您需要有一个标题行,并在显示分隔值的列中填充增量整数(1,2,3,...)。您需要与分隔值一样多的列。此示例中使用的分隔符是"#"。必须为公式选择第二个分隔符("在示例中为@"但可能更好的是像CHAR(1))。

如果Excel具有像VBA这样的分割功能,那将是理想的,但它没有。

如果Excel有一个可以找到第n个字符的FIND函数会很方便,但它没有。

但是,Excel确实具有SUBSTITUTE功能,该功能可以在第n次出现的角色上运行,然后您就可以找到该角色。因此,麻烦的解决方法是可行的。

=FIND("@",SUBSTITUTE($A2,"#","@",5))

将评估$ A2中字符串中的字符位置,第5次出现分隔符"#"发生。

例如

$A2 = "Hello#my#name#is#Bob#What#is#your#name?" 

SUBSTITUTE($A2,"#","@",5) = "Hello#my#name#is#Bob@What#is#your#name?"

FIND("@",SUBSTITUTE($A2,"#","@",5)) = 21

为了使其更常用,请在两端用分隔符填充字符串,然后使用MID功能隔离所需文本的一部分。使用列标题行(例如B $ 1:M $ 1)指定将在该列中显示的分隔值。

=MID($A2, FIND("@",SUBSTITUTE("#" & $A2 & "#","#","@",B$1)), FIND("@",SUBSTITUTE("#" & $A2 & "#","#","@",B$1+1)) - FIND("@",SUBSTITUTE("#" & $A2 & "#","#","@",B$1)) - 1 )

您可以复制该公式,或者您可以先在列中突出显示,然后键入公式,使用标题数组范围代替B $ 1(例如B $ 1:F $ 1)并将其另存为数组公式用CTRL + SHIFT + ENTER。

例如,

{=MID($A2, FIND("@",SUBSTITUTE("#" & $A2 & "#","#","@",B$1:F$1)), FIND("@",SUBSTITUTE("#" & $A2 & "#","#","@",B$1:F$1+1)) - FIND("@",SUBSTITUTE("#" & $A2 & "#","#","@",B$1:F$1)) - 1 )}

将是B2:F2的数组公式,将A2分成5个单独的#deldelited值,假设B1:F1在单元格中包含1,2,3,4,5。

使用FIND而非SEARCH,因为SEARCH不区分大小写并使用通配符(* ,?)。