2009-12-10 5 views
7

Ich versuche zu vermeiden, zu viel Excel zu verwenden, aber wenn ich das tue, verwende ich gerne strukturierte Referenzen, da sie viel sauberer zu schreiben scheinen.Excel-strukturierte Referenztabellensyntax

Wenn ich eine Tabelle namens "table1" mit den Spalten "col1" und "col2" erstelle, wie würde ich die erste Zeile in "col1" mit einer strukturierten Referenz in einer anderen Tabelle referenzieren? Ich habe die Syntax =table1[[#this row],[col1]] versucht, und bekomme nur einen Fehler. Gibt es eine Syntax wie =table1[1,1] or =table1[1,[col1]]? Natürlich funktioniert das auch nicht, aber was ist das Äquivalent?

Es ist sehr ärgerlich, wie es scheint, sollte dies einfach sein.

Antwort

12

Table1[[#This Row][Column1]]tun funktionieren, aber die Formel muss in derselben Zeile wie die Tabellenzeile sein, auf die Sie verweisen möchten.

die erste Reihe zu beziehen, ist an anderer Stelle verwenden entweder COUNTIFS(criteria_range1, criteria1 [, criteria_rangen, criterian]) Oder die etwas komplexere SUMIFS() wenn Sie numerische Werte anstelle von Zählungen müssen, wie studgeek erwähnt:

SUMIFS(sum_range1, criteria_range1, criteria1 [, criteria_rangen, criterian]) 

Sie natürlich eine einzigartige Reihe brauchen Kriterien, nach denen die Zeile ausgewählt werden soll. So zum Beispiel:

Table1 
ID Value Name 
1 2  Two 
2 4  Four 
3 8  Eight 

SUMIF(Table1[Value], Table1[ID], 2) ... gibt einen Wert von 4 (oder Null, wenn ID = 2 nicht gefunden). Wenn Ihr Wert nicht numerisch ist, können Sie diese Methode natürlich nicht verwenden.

Allerdings traf akuhn fast die richtige Antwort, aber er ging nicht ganz weit genug in seiner Erklärung/Beispiel, IMO.

INDEX(Table1[Name], 2) returns „Four“ INDEX(Table1, 1, 1) gibt 1 zurück

2

versuchen

=INDEX(col1,1) 

Sie können sogar Zellen in einer 2-dim Tabelle adressieren,

=INDEX(reference,row_num,column_num) 
0

mit Ihm keine expliziten Möglichkeit der Verwendung von strukturierter Referenzierung auf bestimmte Zeilen in einem zu sein scheint Tabelle. Wie Adrian sagt, können Sie INDEX verwenden. Sie können implizite Schnittmenge verwenden, um auf die gleiche Zeile zu verweisen: Wenn Tabelle1 in Zeile 5:10 und Tabelle 2 auch in Zeile 5:10 ist, dann wird die Verwendung einer strukturierten Referenz mit Spaltennamen implizit dieselbe Zeile schneiden.

Oder Sie können die strukturierte Referenz als Multi-Array-Formel eingeben (wählen Sie mehrere Zellen, geben Sie die Formel und verwenden Sie Strg-Umschalt-Enter) in verschiedenen Zeilen und es wird funktionieren.

0

Anstelle von INDEX würde ich SUMMIF vorschlagen. Dadurch können Sie Tabellenwerte anstelle von expliziten Zeilennummern verwenden (die beim Starten der Filterung oder Bestellung unterbrochen werden können). Zum Beispiel (aus dem folgenden Link), fasst dies den Spalt Betrag und nur diejenigen Zeilen, in denen Typ Kontrolle entspricht und in dem Konto Dienstprogramme gleich: =SUMIFS(Table1[Amount],Table1[Type],“Check”,Table1[Account], “Utilities”)

Siehe den Link weitere Informationen: http://office.microsoft.com/en-us/excel-help/using-structured-references-with-excel-tables-HA010155686.aspx

0

Es wäre schön, wenn eine Tabelle eine Spalte als Primärschlüssel bezeichnet haben könnte (die numerisch oder String sein könnte), und dann eine strukturierte ref einen enthalten könnte Möglichkeit, eine Zeile nach ihrem Primärschlüssel zu referenzieren.

Dies wäre Syntax Sugar um SVERWEIS, aber die Tabelle könnte wissen, ob es auf dem Primärschlüssel sortiert wurde, und nur in diesem Fall effiziente Lookups. Sieht so aus, als ob VLOOKUP darin Böses einbettet, das die falsche Zeile findet, wenn Sie auf Sortierung angewiesen sind, besonders wenn Tabellen eine bequeme Möglichkeit zum Sortieren von Zeilen haben.

0

Der Trick ist in solchen Fällen Excel-Funktion OFFSET verwenden:

  • Zugriff auf erste Zeile der Spalte Column1 in der gleichen Tabelle mit dem Namen: OFFSET([Column1],0,0,1)
  • Zugriff auf 2. Reihe OFFSET([Column1],1,0,1)

usw.

Natürlich können Sie dies verwenden, um eine andere Tabelle und Spalte zu erkennen, indem Sie ihm einfach den Tabellennamen voranstellen. Zum Beispiel OFFSET(Table2[Column3],4,0,1) Zugriff auf die 4. Zeile der Spalte 'Column3' von 'Table2'