2016-04-12 3 views
3

Мне было интересно, если есть так или иначе, чтобы вернуть имя таблицы, используя формулу?Имя таблицы возврата Excel с использованием формулы?

Я работал над тем, чтобы разбить несколько тысяч адресов в виде столбца информации. т.е. .. #, улица, город, штат, почтовый индекс и номер телефона. Адреса не находятся в каком-либо согласованном формате, который будет работать Text to Columns. Я, наконец, придумал формулы, чтобы выполнить работу, но они очень длинные. В сообщении я нашел предложение использовать повторяющиеся части формул в качестве Определенного имени. И это сделало его намного проще. Теперь вот проблема.

Формула, которая имеет название таблицы «Таблица 1», не будет работать в «Таблице2». Или любое другое имя таблицы. Заголовки столбцов одинаковы для каждой таблицы.

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

Необходимо указать путь к названию таблицы. По формуле или формуле в качестве Определенного имени.

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

Я предпочитаю, чтобы это была формула. Я не уверен, что решение VBA будет правильным ответом на этот вопрос, поэтому я не смогу выбрать его как ответ, даже если он работает. Он по-прежнему будет оценен. Я спрошу в отдельном посте, если я не найду Формулы решения.

TY

Я нашел этот пост, который имеет решение VBA, но я не могу его использовать. Я отправлю сообщение, чтобы кто-то мог понять это. Portland Runner Отправил этот CODE, чтобы получить имя таблицы.

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

В этой функции Ввожу Defined Имя формулу под названием "SheetName"

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

Так что я могу использовать его, как это.

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

Однако мне все еще нужно, чтобы это была только формула. Хотя я могу запускать макросы на моем ПК, они не будут запускаться на ПК, на котором есть все данные.

Это последнее, что я получил от UDF. К сожалению, я все еще не могу его использовать. Плюс Он получает имя первой таблицы, а не фактическую таблицу, в которой находится ячейка. Хорошо, если это единственная таблица на листе или если первая таблица - это таблица, которую вы хотите.

+2

кросс-размещены здесь: http://superuser.com/questions/1064308/return-table-name-using-formula - Пожалуйста, не оставляйте тот же вопрос на нескольких сайтах. – teylyn

+0

Все еще VBA было бы легким решением. Вы можете создать UDF с входами, такими как '= MyFunction (TableName, Field, someOtherValuesYouWant, ....)'. Таким образом, вы получаете простые формулы «копировать/вставлять» для работы вместо бесконечных формул;) –

+0

@DirkReichel Да, я уверен, что VBA - лучший и простой вариант, однако компьютер, на котором находится информация, не принадлежит мне и макросы отключены из-за политики компании. Извлечение данных и выполнение их на моем собственном компьютере не является вариантом из-за проблем с конфиденциальностью. Однако, если у вас есть решение VBA, я бы хотел его увидеть. Но в этом случае необходима формула. – Mouthpear

ответ

3

Вот решение VBA, так как вы сказали, что хотите его увидеть. Это UDF (пользовательская функция), которую вы создаете с помощью VBA, но используете в качестве формулы внутри ячейки. Сохраните код в стандартном модуле кода, а не в модуле листа или в модуле «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) 

Если вы используете диапазон, который перекрывает более одной таблицы, он будет retu rn имя первой таблицы.

+0

Спасибо, что работает нормально. – Mouthpear

+0

Спасибо. Я пробовал, и он работает. Я все еще не могу использовать его для оригинального проекта, над которым я работал. Компьютер с информацией - это компьютер компании, а использование макросов или VBA было отключено. Но я нашел применение для вашего UDF. Мне бы очень хотелось проверить ваш ответ, но я не уверен, разрешено ли это, так как вопрос касался решения формулы. Интересно, смогут ли Модераторы это сделать. Большое вам спасибо. – Mouthpear

1

Для получения имени таблицы вам понадобятся две ячейки. Заголовки моих таблиц начинаются в строке 2 и таблице данных в строке 3, поэтому я помещаю свои две формулы в ячейки A1 и B1 соответственно.

Первая ячейка должна ссылаться на верхнюю левую ячейку заголовка таблицы. Для меня формула заканчивается чтением:

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

и приравнивается к «Государству».

формула Вторая ячейка должна быть:

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

Я был удивлен, обнаружив, что эта стратегия действительно работает на практике, хотя ответ может быть немного более ясным. В основном, ваша первая формула должна быть '= [[#Headers], []]', а вторая должна быть '= MID (FORMULATEXT (), 2, FIND (" [", FORMULATEXT ()) - 2) '. Поскольку Excel автоматически обновляет имена таблиц в формулах, когда имена меняются, эта вторая формула всегда будет показывать текущее имя таблицы, если вы не измените первую ячейку самостоятельно. – B1SeeMore

+0

Примечание: после изменения имени таблицы может потребоваться принудительное выполнение Excel для пересчета. Вы можете сделать это через _Formulas-> Calculate Now_ или открыть ячейку второй формулы для редактирования и нажать Enter. – B1SeeMore

Смежные вопросы