Excel使用公式返回表名?

我想知道是否有使用公式返回表的名称?

我正在研究一个方法,将数千个地址分解成信息的透视列。 即..#,街道,城市,州,邮政编码和电话#。 这些地址的格式不是“文本到列”的格式。 我终于想出了完成这个工作的公式,但这个公式很长。 在一篇文章中,我发现它build议使用公式的重复部分作为定义名称。 而且它变得如此简单。 现在是这个问题。

具有表格名称“Table1”的公式在“Table2”中不起作用。 或者任何其他表名。 列标题对于每个表是相同的。

MAX(SEARCH(Table1[@State],Table1[@Origin])) 

需要返回表名的方法。 通过公式或公式定义名称。

 MAX(SEARCH(GetTableName[@State],GetTableName[@Origin])) 

我更喜欢它是一个公式。 我不确定一个VBA解决scheme是否会成为这个问题的正确答案,所以即使它工作,我也不能select它作为答案。 它仍然将不胜感激。 如果我没有find配方解决scheme,我会在另一个post中询问。

TY

我发现这个post有一个VBA解决scheme,但我不能使用它。 我会张贴,所以有人可以弄明白这一点。 波特兰亚军发布了此代码获取表名。

 Function GetTableName(shtName As String) As String GetTableName = Worksheets(shtName).ListObjects(1).Name End Function 

在该函数中,input名为“SheetName”的My Defined Name公式

 =MID(CELL("filename"),FIND("]",CELL("filename"))+1,100) 

所以我可以像这样使用它。

 =MAX(SEARCH(INDIRECT(GetTableName(SheetName)&"[@State]"),INDIRECT(GetTableName(SheetName)&"[@Origin]"))) 

不过,我仍然需要这是只有公式。 虽然我可以在我的电脑上运行macros,但它们不会在拥有所有数据的PC上运行。

这是我用UDF得到的最后一件事。 不幸的是,我仍然不能使用它。 Plus它获取第一个表格的名称,而不是单元格所在的实际表格。如果这是表格中唯一的表格,或者第一个表格是所需的表格,那么该表格很好。

 Function GetTableName() As String GetTableName = Worksheets(ActiveSheet.Name).ListObjects(1).Name End Function 

这是一个VBA解决scheme,因为你说你想看到它。 这是用VBA创build的UDF(用户定义的函数),但在单元格内用作公式。 将代码保存在标准代码模块中,而不是表单模块或“ThisWorkbook”模块。

 Function GetTableName(cellInTable As Range) As String Dim tblName As String tblName = vbNullString On Error Resume Next tblName = cellInTable.ListObject.Name GetTableName = tblName End Function 

一旦保存到一个模块,你可以像这样在一个单元格公式中使用它:

 =GetTableName(A1) 

或这个

 =GetTableName(B:B) 

或这个

 =GetTableName(B2:W900) 

如果使用与多个表重叠的范围,它将返回第一个表的名称。

你将需要两个单元格来获取表名。 我的表头从第2行开始,第3行的表数据,所以我把我的两个公式分别在单元格A1和B1。

第一个单元格应该引用表格的左上angular单元格。 对我来说,这个公式最后是:

 "=My2016Data[[#Headers],[State]]" 

等同于“国家”。

第二个单元格的公式应该是:

 "=MID(FORMULATEXT(A1),2,FIND("[",FORMULATEXT(A1))-2)" and equates to "My2016Data".