我有一个非常大的文件(800万行)我在PowerPivot中导入了一个我要分割的地址列:
我尝试了LEFT和FIND,但无法获得我想要的输出。
答案 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
不区分大小写并使用通配符(* ,?)。