我想知道是否还有使用公式返回表的名称?
我正在努力将几千个地址分解为信息透视列。即..#,街道,城市,州,邮政编码和电话#。地址不是Text to Columns可以使用的任何一致格式。我终于想出了完成工作的公式,但是很长。在一篇文章中,我发现它建议使用公式的重复部分作为定义名称。它使它变得如此简单。现在问题出在这里。
表名为“Table1”的公式在“Table2”中不起作用。或任何其他表名称。每个表的列标题相同。
MAX(SEARCH(Table1[@State],Table1[@Origin]))
需要一种返回表名的方法。通过公式或公式作为定义名称。
MAX(SEARCH(GetTableName[@State],GetTableName[@Origin]))
我更喜欢它是一个公式。我不确定VBA解决方案是否是这个问题的正确答案,所以即使它确实有效,我也无法选择它作为答案。仍将不胜感激。如果我找不到配方溶液,我会在另一个帖子中询问。
公司
我发现这篇帖子有VBA解决方案,但我无法使用它。我会张贴,所以有人可以解决这个问题。 Portland Runner发布此代码以获取表名。
Function GetTableName(shtName As String) As String
GetTableName = Worksheets(shtName).ListObjects(1).Name
End Function
在该函数中,我输入名为“SheetName”的My Defined Name公式
=MID(CELL("filename"),FIND("]",CELL("filename"))+1,100)
所以我可以像这样使用它。
=MAX(SEARCH(INDIRECT(GetTableName(SheetName)&"[@State]"),INDIRECT(GetTableName(SheetName)&"[@Origin]")))
但是我仍然需要这个只有Formula。虽然我可以在我的电脑上运行宏,但它们不会在拥有所有数据的PC上运行。
这是我使用UDF的最后一件事。不幸的是我仍然无法使用它。加上它得到第一个表的名称,而不是单元格所在的实际表格。如果这是表格中唯一的表格,或者第一个表格是您想要的表格,那就太好了。
Function GetTableName() As String
GetTableName = Worksheets(ActiveSheet.Name).ListObjects(1).Name
End Function
这是一个VBA解决方案,因为你说你想看到它。这是您使用VBA创建的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中。
第一个单元格应该引用表格的左上角标题单元格。对我来说,公式最终阅读:
=My2016Data[[#Headers],[State]]
并等同于“国家”。
第二个细胞的公式应该是:
=MID(FORMULATEXT(A1),2,FIND("[",FORMULATEXT(A1))-2)
并等同于“My2016Data”。
=MID(
FORMULATEXT(<CurrentCell>),
53+2*<LengthOf<CurrentCell>>),
LEN(FORMULATEXT(<CurrentCell>))-(53+2*<LengthOf<CurrentCell>>))-3
)&IF(0,<TableName>,"")