2016-04-12 4 views
3

Je me demandais s'il y avait de toute façon à retourner le nom de la table en utilisant une formule? Je travaillais sur un moyen de décomposer quelques milliers d'adresses dans une colonne d'informations en perspective. c'est-à-dire .. #, rue, ville, état, code postal et numéro de téléphone. Les adresses ne sont pas dans un format cohérent que Text to Columns fonctionnerait. J'ai finalement trouvé les formules pour faire le travail, mais elles sont très longues. Dans un article, j'ai trouvé qu'il était suggéré d'utiliser des parties répétées des formules comme nom défini. Et ça l'a rendu beaucoup plus facile. Maintenant, voici le problème.Excel Retour Nom de la table en utilisant Formula?

Une formule qui a le nom de table "Table1" ne fonctionnera pas dans "Table2". Ou tout autre nom de table. Les en-têtes de colonne sont les mêmes pour chaque table.

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

Une façon de renvoyer le nom de la table est nécessaire. Via une formule ou une formule en tant que nom défini.

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

Je préfère que ce soit une formule. Je ne suis pas sûr si une solution VBA serait une réponse correcte à cette question, donc je ne serais pas en mesure de le choisir comme la réponse, même si cela fonctionne. Ce sera encore apprécié. Je demanderai dans un post séparé si je ne trouve pas de solution de formule.

TY

Je trouve ce poste qui a une solution VBA, mais je ne peux pas l'utiliser. Je vais poster juste pour que quelqu'un puisse peut-être comprendre cela. Portland Runner Posté ce CODE pour obtenir le nom de la table.

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

Dans cette fonction, j'entrer mon nom défini par la formule nommée « SheetName »

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

donc je peux l'utiliser comme ceci.

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

Cependant, j'ai toujours besoin que ce soit uniquement en Formule. Bien que je puisse exécuter des macros sur mon PC, elles ne fonctionneront pas sur le PC qui contient toutes les données.

C'est la dernière chose que j'ai eu en utilisant un UDF. Malheureusement, je ne peux toujours pas l'utiliser. Plus Il obtient le nom de la première table et non la table réelle de la cellule. Bon si c'est la seule table dans la feuille ou si la première table est la table que vous voulez.

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

posté cross-ici: http://superuser.com/questions/1064308/return-table-name-using-formula - S'il vous plaît ne pas poster le même question sur plus d'un site. – teylyn

+0

Encore VBA serait une solution facile. Vous pouvez créer un UDF avec des entrées comme '= MyFunction (TableName, Field, someOtherValuesYouWant, ....)'. De cette façon, vous obtenez de simples formules "copier/coller" avec lesquelles vous pouvez travailler;) –

+0

@DirkReichel Oui, je suis sûr que VBA est une option meilleure et plus simple, mais l'ordinateur sur lequel l'information est ne m'appartient pas Les macros sont désactivées en raison de la stratégie de l'entreprise. Extraire les données et le faire sur mon propre PC n'est pas une option en raison de problèmes de confidentialité. Cependant, si vous avez une solution VBA, je voudrais le voir. Mais dans ce cas, une formule est nécessaire. – Mouthpear

Répondre

3

Voici une solution VBA puisque vous avez dit que vous vouliez le voir. C'est un UDF (fonction définie par l'utilisateur) que vous créez avec VBA mais que vous utilisez comme une formule dans une cellule. Enregistrez le code dans un module de code standard, pas un module de feuille ou le module "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 

Une fois enregistré sur un module, vous pouvez l'utiliser dans une formule cellulaire comme ceci:

=GetTableName(A1) 

ou cette

=GetTableName(B:B) 

ou cette

=GetTableName(B2:W900) 

Si vous utilisez une plage qui chevauche plus d'un tableau, il va retu rn le nom de la première table.

+0

Merci Cela fonctionne bien. – Mouthpear

+0

Merci. Je l'ai essayé et ça fonctionne. Je ne peux toujours pas l'utiliser pour le projet original sur lequel je travaillais. L'ordinateur avec l'information est un ordinateur de compagnie et l'utilisation de macros ou de VBA a été désactivée. Mais j'ai trouvé une utilisation pour votre UDF. Je voudrais vraiment vérifier le vôtre comme la réponse mais je ne suis pas sûr si c'est permis puisque la question était au sujet d'une solution de formule. Je me demande si les modérateurs le permettraient. Merci beaucoup de toute façon. – Mouthpear

1

Vous aurez besoin de deux cellules pour obtenir le nom de la table. Mes en-têtes de tableau commencent dans la rangée 2 et les données de table dans la rangée 3, donc j'ai mis mes deux formules dans les cellules A1 et B1, respectivement.

La première cellule doit référencer la cellule d'en-tête en haut à gauche de votre table. Pour moi, la formule finit par lire:

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

et équivaut à "Etat".

La seconde formule de cellule doit être:

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

J'ai été surpris de constater que cette stratégie fonctionne réellement dans la pratique, bien que la réponse pourrait être un peu plus claire. Fondamentalement, votre première formule doit être '= [[#Headers], []]', et la seconde doit être '= MID (FORMULATEXT (), 2, FIND (" [", FORMULATEXT ()) - 2) '. Étant donné qu'Excel met automatiquement à jour les noms de table dans les formules lorsque les noms changent, cette deuxième formule affiche toujours le nom actuel de la table, à condition de ne pas modifier vous-même la première cellule. – B1SeeMore

+0

Remarque: après avoir modifié le nom d'une table, vous devrez peut-être forcer Excel à effectuer un recalcul. Vous pouvez le faire via _Formulas-> Calculate Now_, ou en ouvrant la cellule de la deuxième formule pour l'éditer et en appuyant sur Entrée. – B1SeeMore