获取元素的第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中的错误,但不是在谷歌电子表格。