在MS excel表格中创build公式从行和列中获取值

我有一个包含一些数据的工作表。 我们每天都必须从中取数据。 [C3] [D3] [I1]是我们用来获取数据的格式示例。 字符是列,数字是行,所以我们必须手动匹配所需的值,并提供输出。 你可以帮助我创build公式,以便我可以粘贴“[C1] [B3] [E2]” – 这种格式在单元格中,并在任何其他单元格中接收输出。 我附上了一个参考资料

快照

如果vba为你工作,那么这个快速的UDF将做到这一点:

Function CONCATENATESPECIAL(rng As Range) As string Dim spArr() As String Dim i As Integer Dim temp As String temp = Replace(rng, "[", "") temp = Replace(temp, "]", "") spArr = Split(temp) For i = LBound(spArr) To UBound(spArr) CONCATENATESPECIAL = CONCATENATESPECIAL & Range(spArr(i)) Next i End Function 

把它放在一个连接到工作簿的模块中:

在这里输入图像说明

那么你可以简单地使用它作为任何其他公式:

 =CONCATENATESPECIAL(H1) 

这将返回一个string。 如果你想把它变成一个数字,那么:

 =--CONCATENATESPECIAL(H1) 

以下公式使用FIND参考单元格中每个方括号的相对位置,然后可以使用LEFTRIGHT返回每个方括号对的内容。 最后它使用INDIRECT来使Excel读取文本string作为单元格引用。

=INDIRECT(LEFT(RIGHT(H1,LEN(H1)-FIND("[",H1)),FIND("]",H1)-FIND("[",H1)-1))

=INDIRECT(LEFT(RIGHT(H1,LEN(H1)-FIND("[",H1,FIND("]",H1))),FIND("]",H1,FIND("[",H1,FIND("]",H1)))-FIND("[",H1,FIND("]",H1))-1))

=INDIRECT(LEFT(RIGHT(H1,LEN(H1)-FIND("[",H1,FIND("]",H1,FIND("[",H1,FIND("]",H1))))),FIND("]",H1,FIND("[",H1,FIND("]",H1,FIND("[",H1,FIND("]",H1)))))-FIND("[",H1,FIND("]",H1,FIND("[",H1,FIND("]",H1))))-1))

您可以使用&符号将结果连接成一个单元格,如下所示:

=INDIRECT(LEFT(RIGHT(H1,LEN(H1)-FIND("[",H1)),FIND("]",H1)-FIND("[",H1)-1))&INDIRECT(LEFT(RIGHT(H1,LEN(H1)-FIND("[",H1,FIND("]",H1))),FIND("]",H1,FIND("[",H1,FIND("]",H1)))-FIND("[",H1,FIND("]",H1))-1))&INDIRECT(LEFT(RIGHT(H1,LEN(H1)-FIND("[",H1,FIND("]",H1,FIND("[",H1,FIND("]",H1))))),FIND("]",H1,FIND("[",H1,FIND("]",H1,FIND("[",H1,FIND("]",H1)))))-FIND("[",H1,FIND("]",H1,FIND("[",H1,FIND("]",H1))))-1))

编辑:

可以更直观地看到Excel使用SUBSTITUTE ,而您可以在其中指定要关注的特定字符的哪个实例 。 在下面的公式中,我们用一个特定的左右方括号replace我们的FIND公式中的波形符号,然后引用这两者之间的子string。

=MID(H1,FIND("~",SUBSTITUTE(H1,"[","~",1))+1,FIND("~",SUBSTITUTE(H1,"]","~",1))-FIND("~",SUBSTITUTE(H1,"[","~",1))-1)

这样,为了find第二,第三,第n个单元格引用,我们只增加实例号:

=MID(H1,FIND("~",SUBSTITUTE(H1,"[","~",2))+1,FIND("~",SUBSTITUTE(H1,"]","~",2))-FIND("~",SUBSTITUTE(H1,"[","~",2))-1)

=MID(H1,FIND("~",SUBSTITUTE(H1,"[","~",3))+1,FIND("~",SUBSTITUTE(H1,"]","~",3))-FIND("~",SUBSTITUTE(H1,"[","~",3))-1)

再一次,你将这些包装在INDIRECT ,然后连接&

=INDIRECT(MID(H1,FIND("~",SUBSTITUTE(H1,"[","~",1))+1,FIND("~",SUBSTITUTE(H1,"]","~",1))-FIND("~",SUBSTITUTE(H1,"[","~",1))-1))&INDIRECT(MID(H1,FIND("~",SUBSTITUTE(H1,"[","~",2))+1,FIND("~",SUBSTITUTE(H1,"]","~",2))-FIND("~",SUBSTITUTE(H1,"[","~",2))-1))&INDIRECT(MID(H1,FIND("~",SUBSTITUTE(H1,"[","~",3))+1,FIND("~",SUBSTITUTE(H1,"]","~",3))-FIND("~",SUBSTITUTE(H1,"[","~",3))-1))

它不比第一个公式短暂(现在),但是也许更容易理解逻辑。 更重要的是,扩展这个版本以包含额外的单元格引用,例如如果H1包含“[A1] [B12] [D32] [E4] [F19]”,您只需连接整个INDIRECT公式并增加每个实例的编号。