Beschriften / Kennzeichnen von Elementen in einer Kalkulationstabelle

14

Ich bin ein Anfänger in Tabellenkalkulationen, also hoffe ich, dass Sie mir vergeben, wenn ich eine sehr offensichtliche Frage stelle.

Ist es möglich, Tags in Excel / Google Spreadsheet zu verwenden? Ich erstelle eine Tabelle, um alle Artikel und Bücher zu protokollieren, die ich lese. Sagen wir, ich lese "Ich, Claudius". Ich möchte es diesen Tags geben: Geschichte, Fiktion, Biographie, Behinderung, Politik, Drama. Wenn ich dann alle Artikel / Bücher anzeigen möchte, die mit "Politik" markiert sind, kann ich möglicherweise mit diesem Tag suchen / anzeigen / schwenken.

Vielleicht sollten die Tags vorzugsweise alle in einer Zelle sein, wobei jedes Wort durch ein Komma getrennt ist. Wenn jedes Wort in einer eigenen Zelle wäre, würde es den Tisch wirklich unordentlich machen, denke ich.

Ich bin auch offen für andere Etikettierlösungen.

Vielen Dank!

Nusantara
quelle
Ich habe noch nie eine Tag-Lösung in Excel gesehen, aber das heißt nicht, dass es keine gibt. Vielleicht check out evernote
Raystafarian

Antworten:

13

Soweit mir bekannt ist, gibt es keine integrierten Funktionen, mit denen durch Kommas getrennte Tags in Excel analysiert und zusammengefasst werden können. Sie können natürlich Ihre eigene Lösung mit Arbeitsblattfunktionen und ein wenig VBA erstellen. Hier ist eine schnelle Lösung dafür.

Schritt 1 : Drücken Sie Alt+ F11, um das VBA-Editorfenster in Excel zu öffnen. Fügen Sie ein neues Modul ein und fügen Sie diesen Code für eine benutzerdefinierte Funktion ein.

Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate.  sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer

On Error GoTo EH
rra = rr
out = ""
i = 1

Do While i <= UBound(rra, 1)
    If rra(i, 1) <> False Then
        out = out & rra(i, 1) & sep
    End If
    i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function

EH:
rra = rr.Value
Resume Next

End Function

Mit dieser Funktion können Sie durch Kommas getrennte Listen erstellen, um die vorhandenen Tag-Daten zusammenzufassen.

Schritt 2 : Geben Sie in einem Arbeitsblatt in eine Zelle (H2 im folgenden Beispiel) das Tag ein, nach dem Sie suchen möchten. Geben Sie in die Zelle rechts die folgende Formel ein, indem Sie Ctrl+ Shift+ drücken Enter.

=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")

Durch Drücken von Ctrl+ Shift+ geben EnterSie die Formel als Matrixformel ein. Es wird {...}in der Bearbeitungsleiste von umrahmt angezeigt. Beachten Sie, dass in der Formel $B$2:$B$6der Bereich angegeben ist, der alle Tags für die in aufgeführten Elemente enthält $A$2:$A$6.

Bildbeschreibung hier eingeben

BEARBEITEN:
Wenn Sie nichts dagegen haben, dass Ihre Übereinstimmungen in einer Spalte anstatt in einer Liste in einer Zelle aufgeführt werden, können Sie Übereinstimmungen für Tags nur mit Arbeitsblattfunktionen zurückgeben.

Wo Ihre Titel in sind Column A, sind die Tags in Column Bund das Tag für Sie in suchen ist H2, können Sie die folgenden Befehle verwenden Matrixformel in I2und füllen so weit wie Sie brauchen:

=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")

Bildbeschreibung hier eingeben

Die Formel erstellt zunächst ein Array von Zahlen, basierend darauf, ob die Tags in jeder Zeile den Suchbegriff enthalten. Wird eine Übereinstimmung gefunden, wird die Zeilennummer im Array gespeichert. Wenn es nicht gefunden wird, wird 2000000 im Array gespeichert. Als nächstes gibt der SMALL(<array>,ROW()-1)Teil der Formel den ROW()-1kleinsten Wert aus dem Array zurück. Als Nächstes wird dieser Wert als Indexargument an die INDEX()Funktion übergeben, wo der Wert an diesem Index im Array der Titel zurückgegeben wird. Wenn eine Zahl größer als die Anzahl der Zeilen im Titel-Array INDEX()als Argument übergeben wird, wird ein Fehler zurückgegeben. Da 2000000 als Argument übergeben wird, wenn keine Übereinstimmungen gefunden werden, wird ein Fehler zurückgegeben. Die IFERROR()Funktion kehrt dann ""in diesem Fall zurück.

Es ist wichtig zu verstehen, wie ROW()diese Formel verwendet wird. Wenn Sie Ihre Ergebnisliste ab einer anderen Zeile anzeigen möchten, müssen Sie das zweite Argument der SMALL()Funktion so anpassen , dass es den ersten kleinsten Wert aus dem Array zurückgibt. Beginnt Ihre Ergebnisliste beispielsweise in Zeile 1 statt in Zeile 2, verwenden Sie SMALL(...,ROW())statt SMALL(...,ROW()-1).

Wenn Ihre Liste der Titel und Tags nicht in Zeile 1 beginnt, müssen Sie auch die Formel anpassen. Das zweite Argument der IF()Funktion muss so eingestellt werden , dass eine Übereinstimmung in der ersten Zeile Ihrer Daten zurückgibt 1. Beispiel : Wenn die Liste der Titel beginnt in Zeile 2 statt Zeile 1, müssen Sie die Formel umfassen IF(...,ROW($A$2:$A$7)-1,...)statt IF(...,ROW($A$1:$A$6),...).

Hervorragend
quelle
Wow, das funktioniert perfekt! Ich bevorzuge es jedoch in Google Spreadsheet. Aber es benutzt JavaScript. Ich werde versuchen, etwas Ähnliches zu tun, obwohl ich ein absoluter Anfänger in der Sprache bin. Nur noch zwei Fragen: Was bedeutet es, Daten "zusammenzufassen"? Was macht Ihr Code in Schritt 1? Ich stelle diese Frage insbesondere, weil ich denke, dass ich mit JavaScript in Google Spreadsheet möglicherweise dasselbe tun muss. Vielen Dank für Ihre Lösung!
Nusantara
Großartig, ich bin froh, dass es von Nutzen ist. Mit "Zusammenfassen" meine ich nur das Erstellen einer durch Kommas getrennten Liste übereinstimmender Titel. Hierfür wird die VBA benötigt. Mit den integrierten Excel-Funktionen ist es relativ einfach, eine Matrixformel zu erstellen, mit der übereinstimmende Tags ausgewählt werden können. Es ist jedoch nicht möglich, diese Ergebnisse in einer Zelle ohne VBA zurückzugeben, da die CONCATENATEFunktion in Excel ein Array nicht als Argument verwenden kann (es liest nur das erste Element aus dem Array, wenn Sie es versuchen). Die VBA-Funktion erstellt durch Kommas getrennte Listen aus einem Array von Werten.
Hervorragend
Nachdem ich die obige Antwort geschrieben hatte, wurde mir klar, dass es eine Möglichkeit gibt, etwas Ähnliches ohne VBA zu tun. Anstatt die Liste der übereinstimmenden Titel in einer Zelle zurückzugeben, kann eine Spalte mit übereinstimmenden Titeln zurückgegeben werden. Ich kann meinen Beitrag auch so bearbeiten, dass er diese Methode enthält, wenn Sie interessiert sind.
Hervorragend
Ist das ohne VBA möglich? Das wäre besser, denke ich. Wenn es nicht zu unpraktisch ist, wäre es fantastisch, wenn Sie die von Ihnen erwähnte Methode einbeziehen könnten. Es wäre für alle, die nach diesem Thema suchen, sehr hilfreich! Vielen Dank für die Erklärung "Zusammenfassung". Ich habe es auch mit Verkettung versucht, konnte es aber nicht so verwenden, wie ich es wollte. Jetzt weiß ich, dass es sich nicht wie ein Streit verhalten kann.
Nusantara
Ja es ist möglich. Ich werde versuchen, die Lösung in ein paar Minuten hier zu veröffentlichen. Entschuldigung für die Verspätung!
Hervorragend
2

In einigen Fällen funktionierte dies programmgesteuert gut, und ich fand, dass ein manueller Ansatz für mich funktioniert. Mithilfe von Spalten für Tags können Sie ein Zeilenelement ganz einfach mit Tags versehen, indem Sie in die Spalte eine 0 eingeben. Sie haben dann eine Zeile und geben in jede der Tag-Spalten für diese Zeile 1 ein (Sie können diese Zeile einfärben). Wenn Sie dann nach einem der Tags sortieren, fungiert die 1s-Zeile (blau) als Trennzeichen. Zwischen Ihren gefilterten Ergebnissen (0s) und allem anderen (_).

Dies hat einige Vorteile. 1. Sie müssen Ihr Tag nicht jedes Mal eingeben. 2. Sie können leicht einen Querverweis erstellen, um zu überprüfen, ob Sie doppelte oder ähnliche Elemente haben, die auf eins reduziert werden können.

James Stephen Brown
quelle
1

Eine andere Idee:

Verwenden Sie die eingebaute Filterfunktion. Filtern Sie nach der Spalte Tags, und suchen Sie nach Zeilen, die ein bestimmtes Tag enthalten.

Eine Zeile mit der Tag-Liste: Komödie, Horror, Romantik

wird angezeigt, wenn nach einem dieser drei Tags gesucht wird.

matt
quelle
1

Mein Nicht-VBA-Ansatz besteht darin, Tags in einer Spalte (z. B. Spalte H) aufzulisten und die Elemente durch Kommas zu trennen. Von dort verwende ich eine Kombination aus "Text in Spalten" und "Duplikate entfernen", um meine Liste der Tags zu erhalten. Ich kopiere dies in die Kopfzeile meines Hauptblatts (in diesem Fall beginnend in Spalte L. Geben Sie dann in jede Zelle unter den einzelnen Tag-Kopfzeilen Folgendes ein:

=IF((ISNUMBER(SEARCH(L$1,$H2)))=TRUE,1,0)

Dies gibt das Beste aus beiden Welten - die Tag-Spalte (H) ist für die Menschen leicht zu lesen; Die einzelnen Tag-Spalten (mit ihren Nullen und Einsen) sind für den Computer leicht lesbar. Es ist dynamisch, wenn Sie innerhalb des angegebenen Satzes von Tags bleiben. Wenn nicht, müssen Sie Ihr neues Tag in die Kopfzeile einfügen und dann Ihre Formeln kopieren.

Von dort aus sind Pivot-Tables dein Freund.

user2024015
quelle
0

Mir ist nicht genau klar, wie Sie die Tags verwenden möchten. In Google Sheets können Sie jedoch die Funktion SPLIT () verwenden, um eine Folge von Tags (durch Leerzeichen, Kommas oder was auch immer Sie wollen) in mehrere andere Zellen aufzuteilen, und ich bin sicher, dass auch Excel eine Funktion hat, mit der Sie nach Tags suchen können Zelle für ein Tag.

Michael Scheper
quelle