获取元素的第N个实例
我有一个填充数据的列有一个path。 我想获取path中的最后一个元素,最后一个元素和第一个元素。 例如,对于以下数据:
\Product\Release\Iteration \Product\Folder1\Folder2\Anotherfolder\Release2\Iteration5 \Product \Product\Somefolder\Release3\Iteration5
我想在单元格中获得以下内容
在单元格B1:“产品”中,单元格C1:“释放”,单元格D1:“迭代”
在单元格B2:“产品”,单元格C2:“Release2”,单元格D2:“Iteration5”
单元格B3:“产品”,单元格C3:空白,单元格D3:空白
在单元格B4:“产品”,单元格C4:“Release3”,单元格D4:“Iteration5”
获取第一个和最后一个组件很容易。 我大多只是努力获得倒数第二个组件(在上面的例子C列)。
在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)))
假设您的数据在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。
如果您只需要将数据parsing为单元格,则可以使用'\'分隔符将文本文件导入到Excel中。 否则,需要使用CHARINDEX()和SUBSTRING循环查找每个反斜杠的位置并parsing其间的数据。
您也可以使用SSIS并使用'\'分隔符将文本文件转换为Excel以实现自动化。 使用TSQL,您需要按照我的build议循环
这有一个很好的例子,使用split命令。 你只需要改变|
字符转换为\
并使用循环将各个值放在所需的位置。
根据VBA 2010中的一个字符打断string
这应该为你工作(假设你不使用*在你的文件名,我不认为是允许在Windows中):
=RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2,"\","*",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))-1),1))
这是倒数第二个元素。
您可以通过更改粗体数字来获取所需的任何元素:
(A2,“”,“”)) – 3 )= RIGHT(A2,LEN(A2)-FIND ,1))
编辑/添加
如果你想摆脱上面公式中第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")
组成两个公式来检索你想要的path的任何部分:
先从左边开始:
= IFERROR(MID(A3,FIND(CHAR(1),替代(A3, “\”,CHAR(1),C $ 2))+ 1,IFERROR(FIND( “\”,A3,FIND(CHAR(1) ,替代(A3, “\”,CHAR(1),C $ 2))+ 1) - 查找(CHAR(1),替代(A3, “\”,CHAR(1),C $ 2)) - 1,LEN (A3))), “”)
先从右边开始:
= IFERROR(MID(A3,FIND(CHAR(1),替代(A3, “\”,CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3, “\”, “”))+ 1-d $ 2))+ 1,IFERROR(FIND( “\”,A3,FIND(CHAR(1),替代(A3, “\”,CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3, “\” , “”))+ 1-d $ 2))+ 1) - 查找(CHAR(1),替代(A3, “\”,CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3, “\” , “”))+ 1-d $ 2)) - 1,LEN(A3))), “”)
这里是一个谷歌电子表格 ,你可以看到它是如何工作的。
注意:我必须对公式进行一些更改才能使其与Google表格兼容,即:
- 把
CHAR(1)
改成别的,我用"/"
代替 - 添加一个
IF()
检查SUBSTITUTE(,,,0)
(0
参数),因为这会给MS Excel中的错误,但不是在谷歌电子表格。