【发布时间】:2016-04-12 00:33:05
【问题描述】:
我想知道是否有使用公式返回表名的方法?
我正在研究一种将几千个地址分解为透视信息列的方法。即.. #、街道、城市、州、邮政编码和电话号码。这些地址不是文本到列可以工作的任何一致格式。我终于想出了完成工作的公式,但是很长。在一篇文章中,我发现它建议使用公式的重复部分作为定义名称。它使它变得如此容易。现在问题来了。
表名“Table1”的公式在“Table2”中不起作用。或任何其他表名。每个表的列标题都相同。
MAX(SEARCH(Table1[@State],Table1[@Origin]))
需要一种返回表名的方法。通过公式或公式作为定义的名称。
MAX(SEARCH(GetTableName[@State],GetTableName[@Origin]))
我更喜欢它是一个公式。我不确定 VBA 解决方案是否是这个问题的正确答案,所以即使它确实有效,我也无法选择它作为答案。它仍然会受到赞赏。如果我没有找到公式解决方案,我会在单独的帖子中询问。
TY
我发现这篇文章有 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]")))
但是我仍然需要它是仅公式。虽然我可以在我的电脑上运行宏,但它们不会在拥有所有数据的电脑上运行。
这是我使用 UDF 得到的最后一件事。不幸的是,我仍然无法使用它。另外,它获取第一个表格的名称,而不是单元格所在的实际表格。如果这是工作表中唯一的表格,或者第一个表格是您想要的表格,那就太好了。
Function GetTableName() As String
GetTableName = Worksheets(ActiveSheet.Name).ListObjects(1).Name
End Function
【问题讨论】:
-
在这里交叉发布:superuser.com/questions/1064308/return-table-name-using-formula - 请不要在多个网站上发布相同的问题。
-
VBA 仍然是一个简单的解决方案。您可以使用
=MyFunction(TableName,Field,someOtherValuesYouWant,....)之类的输入创建一个UDF。通过这种方式,您可以获得简单的“复制/粘贴”公式,而不是无穷无尽的公式;) -
@DirkReichel 是的,我确信 VBA 是一个更好、更简单的选择,但是信息所在的计算机不属于我,并且由于公司政策,宏被禁用。由于隐私问题,无法提取数据并在我自己的 PC 上进行操作。但是,如果您有 VBA 解决方案,我希望看到它。但在这种情况下,需要一个公式。
-
@DirkReichel 您也确实意识到我添加表名的功能与我现在的情况相同。表名未知。该函数必须像
ADDRESS(ROW(),COLUMN(),4,1)一样工作,返回单元格的地址。我需要返回 Cell 所在的表名。 -
那么@DirkReichel 会很高兴。在我的原始帖子的编辑中,我只写了这样一个宏。另一个人提供的宏。我将它与我已经拥有的公式结合起来,它可以获取表的名称。减少到这个。 'Function GetTableName() As String GetTableName = Worksheets(ActiveSheet.Name).ListObjects(1).Name End Function' 不幸的是我仍然不能使用它。另外,它只获取第一个表的名称,而不是您所在的实际表名。但是该表是唯一的,那么一切都很好。
标签: excel formula defined tablename