在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
参考单元格中每个方括号的相对位置,然后可以使用LEFT
和RIGHT
返回每个方括号对的内容。 最后它使用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
公式并增加每个实例的编号。