2017-07-11 2 views
0

Comment puis-je obtenir la valeur d'une cellule spécifique dans une table nommée en utilisant une formule lisible (c'est-à-dire une formule où les lignes/cellules sont référencées par nom plutôt qu'index)?Valeur de la cellule dans la table nommée

enter image description here

Dans l'image ci-dessus je veux afficher la valeur de la cellule (Income, Feb) du tableau Financials. Quelle syntaxe puis-je utiliser?

+0

H Johan, est-ce qu'une formule de correspondance d'index convient à quelque chose comme '= INDEX (Table1, Correspondance (" Revenus ", Table1 [Finances], 0), MATCH (" Feb ", Table1 [#Headers], 0),) 'https://exceljet.net/formula/two-way-lookup-with-index-and-match – maxhob17

+0

@ maxhob17 si c'est la formule la plus lisible en utilisant les noms, je pense que nous devons nous détendre ce désir –

+0

Je ne sais pas de une meilleure façon; Je suppose que vous pourriez cacher la complexité de cette formule en créant une fonction définie par l'utilisateur avec VBA http://www.excel-easy.com/vba/examples/user-defined-function.html – maxhob17

Répondre

1

Comme je l'ai mentionné, vous pouvez masquer la complexité d'une fonction définie par l'utilisateur tels que

Public Function Financials(month As String, item As String) As String 

'Object to represent the table  
Dim lo As ListObject: Set lo = Range("Table1").ListObject 

'Integers to act as coordinates  
Dim x As Integer, y As Integer 

'Find the column 
x = lo.HeaderRowRange.Find(month).Column - lo.HeaderRowRange.Column + 1 

'Find the row 
y = lo.DataBodyRange.Columns(1).Find(item).Row - lo.HeaderRowRange.Row 

' Return the value at the coordinates x,y 
Financials = lo.DataBodyRange(y, x).Value 

End Function 

(Mise à jour Range("Table1").ListObject avec le nom de la table dans votre classeur, sinon, vous pouvez ajouter un autre paramètre à la fonction)

Vous pouvez ensuite appeler cette fonction dans une cellule de classeur, comme cet exemple

=Financials("Feb", "Profit")