使用单元格公式从文件路径获取父文件夹路径

9

在列A中,我有20000行文件名和文件路径。

"C:\person\microsoft\ygkyg\mmddyy\filename.xls"
"\server-41\performance\mmddyy\filename.doc"
.....
等等。

在列B中,我只想获取父文件夹路径。

能否有人帮我写一个公式?我尝试了这个,但它给出的是文件名。

=MID(a1,FIND(CHAR(1),
    SUBSTITUTE(a1,"\",CHAR(1),LEN(a1)-LEN(SUBSTITUTE(a1,"\",""))))+1,LEN(a1))

1
你会接受一个 VBA 解决方案吗? - David Heffernan
@David,实际上,我只是在寻找简单的Excel公式。 - Hannah Montana
@david 我认为 VBA 解决方案是唯一明智的选择,对吧?Mid() 从 1 到最后一个 "" 的出现应该可以解决问题,但不知道公式怎么做! - gideon
@hannah,你可以将VBA函数用作UDF公式。 - gideon
=MID(CELL(B4),1,FIND("/",CELL(B4))-1) 不起作用。 - Hannah Montana
显示剩余3条评论
1个回答

30

这个有效。

=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))

上面是我的原始答案。Neil 简化了表达式,并在下面的评论中发布了以下内容:

=LEFT(A1,FIND("?",SUBSTITUTE(A1,"\","?",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

这是利用路径中禁止使用?字符的事实,因此可以安全地使用"?"作为占位符,而不是CHAR(1),从而提高可读性。另外,LEFT(A1,x)等同于MID(A1,1,x),并且更短,因此使用LEFT是有意义的。但最重要的是,这个公式使用FIND,而不是使用LEN进行第二层计数字符。这使得它变得更易读

差几秒钟就错过了,干得好 Jean!FYI,关于反向字符串查找的原始讨论在这里:https://dev59.com/rnRC5IYBdhLWcg3wSu57。 - Tiago Cardoso
还有一件事。它给了我C:\person\microsoft\ygkyg\mmddyy\,但我不需要最后的“\”。 - Hannah Montana
3
稍作简化:=LEFT(A1,FIND("?",SUBSTITUTE(A1,"\","?",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))(请注意,这包括尾随的反斜杠) - Neil
=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"","")))),LEN(A1))))。我去掉了+1,这样就从路径中去掉了最后一个“/”。谢谢。 - Hannah Montana
1
为了使用更短的解决方案 =LEFT(A1,FIND("?",SUBSTITUTE(A1,"\","?",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))) 获取祖父路径,我们需要理解它。它的意思是“计算路径中反斜杠的数量(路径长度-没有反斜杠的路径长度),并用'?'替换最后一个反斜杠。然后取该'?'左侧的所有字符。”因此,要获取祖父路径,您需要将下一个较早的反斜杠替换为'?',即将 LEN(A1)-LEN(SUBSTITUTE(A1,"\","")) 更改为 LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))-1 - user3454591

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接