Wie kann ich berechnen, wie viel Holz ein Waldmurmeltier mit Microsoft Excel hat?
568
SuziLmrdo
TL; DR Gibt es etwas wie grepin Excel, das mir helfen kann, nur ganze Wörter zu zählen (z. B. "Holz", aber nicht "Waldmurmeltier") (und möglicherweise deren Variationen)?
Es gibt also dieses Gedicht von Muttergans:
How much wood could a woodchuck chuck If a woodchuck could chuck wood? As much wood as a woodchuck could chuck, If a woodchuck could chuck wood.
Und es ist ein Anfang, aber es gibt immer noch keine harten Zahlen.
Wenn Sie sich vorstellen, dass der obige Text in den Zellen A1: A4 enthalten ist, sah meine erste Formel folgendermaßen aus:
= SUMME ((LEN (A1: A4)) -LEN (ERSATZ ((OBER (A1: A4)), OBER ("Holz"), ""))) / LEN ("Holz"))
Hinweis: Meine Formel enthält "obere", da das Gedicht, das sie mir geschickt hat, eher so aussieht
hOw MucH WOod cOuld a WOodCHucK CHUCk IF a wOoDchUCk couLD cHuck wood? aS muCH wOOD as a WOOdCHuCk coUlD ChuCK, iF a woODChUck coulD CHuCK WoOD.
Aber das Ergebnis ist immerhin 8, was falsch ist.
Ich habe manuell gezählt, es gibt nur 4 Hölzer und 4 Waldmurmeltiere. Ich will keine Waldmurmeltiere zählen, nur das Holz, das sie klemmen würden (wenn sie tatsächlich Holz kauen könnten).
Und das funktioniert technisch! Aber die Wahrheit ist, ich versuche nicht wirklich, die Anzahl der Vorkommen des Wortes "Holz" in einem Gansgedicht der Mutter zu zählen, ich muss die Anzahl der Fälle vieler verschiedener Wörter zählen, einschließlich derer, die möglicherweise transponiert, falsch geschrieben werden oder haben zufällige Leerzeichen oder Zeichen. Ich brauche im Grunde so etwas wie grep in Excel. Gibt es so etwas? Gibt es einen einfacheren Weg, um eine Formel zu schreiben, die nur aus ganzen Wörtern bestehende Instanzen zählt und das Ergebnis in eine Zelle stellt?
[This] (https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops#22542835) ist wahrscheinlich das, was Sie suchen suche nach
cybernetic.nomad vor 6 Jahren
0
Und ich dachte immer, es gibt eine Linie zwischen 2 und 3, die lautet: "Ein Waldmurmeltier würde kucken". Anscheinend kenne ich meine Mutter nicht!
Forward Ed vor 6 Jahren
0
3 Antworten auf die Frage
2
Scott Craner
Dies funktioniert für diese Instanz. Möglicherweise müssen Sie weitere SUBSTITUTES für andere Satzzeichen hinzufügen.
Hier wird nun nach dem vollständigen Wort gesucht, das von Leerzeichen umgeben ist. Deshalb müssen wir die Interpunktion entfernen. Da bei SEARCH die Groß- und Kleinschreibung nicht berücksichtigt wird, benötigen wir kein UPPER.
Das Obige zählt nur 1 pro Zelle, unabhängig davon, wie oft das Wort gefunden wird.
Anscheinend verursacht dies ein Problem, wenn das Wort am Satzanfang steht.
Appleoddity vor 6 Jahren
0
@Appleoddity Es ist nicht möglich, aber es hat ein Problem beim Zählen, wenn das Wort zweimal erscheint.
Scott Craner vor 6 Jahren
0
Hallo @ScottCraner, ich glaube, ich bin gerade auf das oben genannte Problem gestoßen. Wenn Sie den gesamten String in eine einzelne Zelle einfügen, wird die Antwort als "1" ausgewertet.
SuziLmrdo vor 6 Jahren
0
@SuziLmrdo siehe Bearbeiten.
Scott Craner vor 6 Jahren
0
@ScottCraner, die erste Formel kann nicht mehr als 4 Vorkommen zählen. Die zweite Formel funktioniert, aber es wurden nur selten alle Vorkommnisse gezählt. Überprüfe es einfach. ☺
Rajesh S vor 6 Jahren
0
,, Wenn Sie versuchen, als letztes Wort mit den Zeilen 2 und 4 "Holz" hinzuzufügen, wurde festgestellt, dass die Anzahl 4 bleibt.
Rajesh S vor 6 Jahren
0
@RajeshS behoben siehe Bearbeiten.
Scott Craner vor 6 Jahren
0
@ScottCraner ,, schön jetzt funktioniert ,,, perfekte 10 ☺
Rajesh S vor 6 Jahren
0
0
Ron Rosenfeld
Hard and complicated with worksheet functions because of the difficulty of determining word boundaries when having to deal with spaces and also various punctuations.
The VBA Regular Expression engine has a simple token \b that will detect word boundaries which is defined as the spot where a word character and non-word character, or the start or end of the line, meet. A word character is one that is in the set of [A-Za-z0-9_]
The VBA function:
Option Explicit 'Set Reference to Microsoft VBScript Regular Expressions 5.5 ' or convert to Late Binding Function ReCount(str As String, Pattern As String, _ Optional CaseSensitive As Boolean = True) As Long Dim objRegExp As RegExp Dim objMatch As Match Dim colMatches As MatchCollection ' Create a regular expression object. Set objRegExp = New RegExp 'Set the pattern by using the Pattern property. objRegExp.Pattern = Pattern ' Set Case Insensitivity. objRegExp.ignoreCase = Not CaseSensitive 'Set global applicability. objRegExp.Global = True 'Test whether the String can be compared. If (objRegExp.Test(str) = True) Then 'Get the matches. Set colMatches = objRegExp.Execute(str) ' Execute search. ReCount = colMatches.Count Else ReCount = 0 End If End Function
Usage:
=ReCount(A6,"\bwood\b")
Hallo @Ron, vielen Dank für deine Antwort! Ich habe den Verweis für VBScript Regular Expressions 5.5 festgelegt und die gesamte Zeichenfolge in eine einzelne Zelle (A1) eingefügt. Die Antwort wird jedoch ausgewertet, um nur eine Instanz zu finden. Fehlt mir etwas?
SuziLmrdo vor 6 Jahren
0
@SuziLmrdo Es findet hier '4'. Sind Sie sicher, dass die Formel im Arbeitsblatt auf die richtige Position verweist? und hat die richtige Regex dabei?
Ron Rosenfeld vor 6 Jahren
0
Was bedeutet der Kommentar "Zu spät konvertieren"? Alles andere wurde erledigt - ich habe die Referenz gesetzt und überprüfe sie, indem ich sie lösche und überprüfe, ob ich sie als RegEx, Match, MatchExpression dimensionieren kann (ja, die Bibliothek zeigt sie alle). Ich habe versucht, das Makro in einem Modul und in der Arbeitsmappe zu platzieren. Ich kann die Funktion sehen und aufrufen. Und um wirklich sicherzustellen, dass ich es idiotensicher finde, setze ich die Zeichenfolge in A6 und kopiere / füge deine Formel buchstäblich ein. Ich weiß nicht, warum es nicht funktioniert.
SuziLmrdo vor 6 Jahren
0
Das Makro sollte sich in einem regulären Modul befinden. Wenn Sie den Verweis festgelegt haben, ignorieren Sie den spätverbindlichen Kommentar. Können Sie eine Kopie (mit vertraulichen Informationen entfernt) Ihrer Arbeitsmappe auf eine Freigabeseite hochladen und einen Link posten? Ich werde es herunterladen und sehen, was das Problem ist.
Ron Rosenfeld vor 6 Jahren
0
Hier ist ein Link [Link] https://app.box.com/s/qu5kjx7ax6sl2p1su2jnp71bvlsj1qhn
SuziLmrdo vor 6 Jahren
0
@SuziLmrdo Wenn Sie die Funktion sorgfältig betrachten (verwenden Sie das Dialogfeld Funktionsargumente), sehen Sie ein optionales drittes Argument, das die Groß- und Kleinschreibung berücksichtigt. Die Standardeinstellung ist die Groß- und Kleinschreibung. Das hast du nicht eingestellt. Und in Ihrem Beispiel war alles klein geschrieben. Aber in Ihrem Arbeitsblatt ist das nicht so. Sie müssen also die Groß- / Kleinschreibung auf "False" setzen. Beispiel: `= ReCount (A6," \ bwood \ b ", FALSE)`
Ron Rosenfeld vor 6 Jahren
0
Danke dir. In der Tat habe ich das früher nicht gesehen. Ich bin relativ neu in VBA, und als ich mir den Code anschaute, versuchte ich immer wieder, diesen Bereich zu ändern:> 'Set Case Insensitivity. > objRegExp.ignoreCase = Nicht CaseSensitive. Ich freue mich sehr darauf, mehr über Code zu lernen, und ich danke Ihnen für Ihre Geduld.
SuziLmrdo vor 6 Jahren
0
@SuziLmrdo Schauen Sie sich [So verwenden Sie reguläre Ausdrücke (Regex) in Microsoft Excel sowohl in Zellen als auch in Schleifen] (https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex- in-microsoft-excel-both-in-cell-and-loops)
Ron Rosenfeld vor 6 Jahren
0
-1
Rajesh S
Diese einfache Formel zählt den Holz im Datenbereich.
=COUNTIF(E53:E56,"*wood*")
BEARBEITET:
Das Vorkommen von Holz kann auch mit der Helfersäule gezählt werden.
In Helper Column schreiben Sie Wood in allen möglichen Formaten.
Passen Sie die Zellverweise in der Formel nach Bedarf an.
Ihre Formel macht nicht das, was Sie glauben, obwohl Sie mit diesem Datensatz das erwartete Ergebnis erhalten. Versuchen Sie, zwei oder mehr Exemplare von "Holz" in eine der Zeilen einzufügen, und Sie werden feststellen, dass sich die Gesamtmenge nicht ändert.
Ron Rosenfeld vor 6 Jahren
0
@ Rajesh, vielen Dank für deine Antwort. Es ist bedauerlich, dass meine ursprüngliche Frage jede Zeile in einer separaten Zelle mit insgesamt vier Zeilen hat, da die Formel oben meiner Meinung nach die Anzahl der Zellen zählt, bei denen das Wort auftritt, und nicht einzelne Instanzen des Wortes, unabhängig von der Anzahl der Zellen sie sind verteilt. Wenn ich beispielsweise versuchte, die gesamte Zeichenfolge in Zelle E2 einzufügen, wurde der Wert in F2 auf 1 geändert.
SuziLmrdo vor 6 Jahren
0
@RonRosenfeld, danke, dass du einen guten Punkt angesprochen hast, das gleiche Problem, das ich mit der Formel von # Scott habe. Zweitens arbeitet man manchmal, bekommt aber in den meisten Fällen auch einen Fehler und seine erste Formel verhält sich genau wie meine. Lass mich die Korrektur finden. ☺
Rajesh S vor 6 Jahren
0
@RajeshS, deine Antwort und Art verfehlt den Punkt der Frage. Das Problem ist nicht "Holz" zu finden, es zählt nicht, wenn es Teil von "Waldmurmeltier" ist.
fixer1234 vor 6 Jahren
0
@ fixer1234, ich habe dies aus OP herausgesucht, "hilf mir, ganze Wörter zu zählen (z. B." Holz ", aber nicht" Waldmurmeltier ")", und ich denke, andere haben auch nur daran gearbeitet, da es eine Formel gibt Wenn man auch das WOOD zählt, schlägt plz vor, ob irgend eine andere Idee dazu gelten sollte. ☺
Rajesh S vor 6 Jahren
0