我的列中填充了具有路径的数据。我想得到路径中的最后一个元素,第二个元素和第一个元素。例如,对于以下数据:
\Product\Release\Iteration
\Product\Folder1\Folder2\Anotherfolder\Release2\Iteration5
\Product
\Product\Somefolder\Release3\Iteration5
我想在单元格中获得以下内容
在单元格B1:“Product”中,单元格C1:“Release”,单元格D1:“Iteration”
在单元格B2中:“Product”,单元格C2:“Release2”,单元格D2:“Iteration5”
在单元格B3中:“产品”,单元格C3:空白,单元格D3:空白
在单元格B4:“Product”中,单元格C4:“Release3”,单元格D4:“Iteration5”
获取第一个和最后一个组件很简单。我主要是努力获得倒数第二个组件(上例中的C列)。
答案 0 :(得分:2)
在B1中并复制下来:
=TRIM(MID(SUBSTITUTE(A1,"\",REPT(" ",99)),99,99))
在C1中并复制下来:
=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))=2,TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",99)),99)),IF(LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))>2,TRIM(LEFT(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",99)),198),99)),""))
在D1中并复制下来:
=IF(OR(LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))={1,2}),"",TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",99)),99)))
答案 1 :(得分:1)
假设您的数据位于ColumnA中,请使用带有\
作为分隔符的文本到列来分割列B:G。假设最多8个元素,则在K1和L1中放置= B1:
=IF(AND(ISBLANK(D1),ISBLANK(C1)),"",IF(ISBLANK($D1),$C1,IF(ISBLANK(C1),"",INDIRECT("R"&ROW()&"C"&COLUMN()-COUNTBLANK($B1:$I1)-4,0))))
将L1复制到M1,将K1:M1复制到适合的位置。
将粘贴特殊值复制到顶部并删除列A:I。
答案 2 :(得分:0)
如果您只需要将数据解析为单元格,则可以使用'\'分隔符将文本文件导入Excel。否则,您需要使用CHARINDEX()和SUBSTRING循环查找每个反斜杠的位置并解析其间的数据。
您还可以使用SSIS并使用'\'分隔符设置文本文件转换到Excel以实现自动化。使用TSQL,您需要按照我的建议循环
答案 3 :(得分:0)
这是一个使用split命令的优秀示例。您只需将|
字符更改为\
,然后使用循环将各个值放在所需的位置。
答案 4 :(得分:0)
这应该适合你(假设你没有在你的文件名中使用*,我认为在Windows中不允许这样做):
=RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2,"\","*",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))-1),1))
这是第二个元素。
您可以通过更改粗体数字来获取所需的任何元素:
= RIGHT(A2,LEN(A2) - 查找( “”,替代(A2, “\”, “”,(LEN(A2)-LEN(SUBSTITUTE(A2,“\ ”, “”))) - 的 3 强>),1))
修改/ ADDITION 强>
如果你想摆脱上面公式中第n个元素右边的值,你可以这样做:
=IFERROR(LEFT(RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2,"\","*",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))-1),1)),FIND("\",RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2,"\","*",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))-1),1)),1)-1),"error checking, lol")
答案 5 :(得分:0)
制作两个公式来检索所需路径的任何部分:
从左边开始拿第一个:
=IFERROR(MID(A3,FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),C$2))+1,IFERROR(FIND("\",A3,FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),C$2))+1)-FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),C$2))-1,LEN(A3))),"")
从第一个开始,从右边开始:
=IFERROR(MID(A3,FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3,"\",""))+1-D$2))+1,IFERROR(FIND("\",A3,FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3,"\",""))+1-D$2))+1)-FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3,"\",""))+1-D$2))-1,LEN(A3))),"")
here's a google spreadsheet你可以看到它是如何运作的。
注意:我必须对公式进行一些更改才能使其与google-spreadsheet兼容,即:
CHAR(1)
更改为其他内容,我使用"/"
作为替代IF()
以检查SUBSTITUTE(,,,0)
(0
参数),因为这会在MS Excel中出错,但不会在Google电子表格中出错。答案 6 :(得分:0)
如果有Excel O365,则可以在B1
中使用:
=TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(A1,"\","</s><s>")&"</s></t>","//s[position()=2 or position()>last()-2][node()]"))
可以在Excel 2013及更高版本中使用,但是它不会溢出,您需要INDEX
才能从返回的数组中检索元素。看起来像这样:
=INDEX(FILTERXML("<t><s>"&SUBSTITUTE($A1,"\","</s><s>")&"</s></t>","//s[position()=2 or position()>last()-2][node()]"),COLUMN()-1)
然后向右和向下拖动。