Clever-Excel-Forum

Normale Version: Smilies in Zellen zählen/filtern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich habe eine Datei mit ca. 95.000 Zeilen. In Spalte E befindet sich immer eine Nachricht, die meistens auch Smilies enthält (UTF-8 formatiert glaube ich). Ich würde jetzt gerne in Spalte V bis AB die Smilies nach Art zählen lassen. Also z.B. in Spalte V alle Smilies in der jeweiligen Nachricht, die ein Herz sind (dabei alle Formate berücksichtigen: ❤️, <3,  ❤,  ♥, ♡, usw.). Dabei soll in Spalte V angegeben werden, wie oft die Herzen in der jeweiligen Spalte vorkommen (siehe Foto). Gibt es dafür eine Formel?

Ich habe zuerst versucht immer Spalte E zu filtern, was auch klappt, aber irgendwie werden immer nur so rund 1.000 Zeilen berücksichtigt. Somit klappt das mit dem Filtern nicht vollständig und die Angabe der Anzahl der Smilies müsste ich immer noch händisch machen. 

Habt ihr vielleicht eine Idee/Formel, wie man die Anzahl der Smileykategorien für alle Nachrichten feststellen könnte?

Vielen lieben Dank im Voraus für eure Hilfe!!

Liebe Grüße
Hi,

schau mal, ob ZÄHLENWENN() funktioniert.

Arbeitsblatt mit dem Namen 'Tabelle1'
ABCD
1SmileSmile2
2SadSad3
3Sad:P1
4Smile
5Sad
6:P

ZelleFormel
D1=ZÄHLENWENN($A$1:$A$6;C1)
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Hallo,

nette (eher seltene) Frage.

Vermutlich gibt es keine Formel, aber mit VBA sollte es lösbar sein.

Da aber VBA den Code der smilies einzeln abfragen muss, ist eine Beispieldatei mit einmal JEDEM smilie notwendig.

mfg

(unerwarte Antwort von Günter, aber so könnte es einfacher sein)
Vielen lieben Dank Günter und Fennek!

@Günter: Ich habe es direkt mal ausprobiert. Da ich die Anzahl der Smilies aber pro Zeile brauche, habe ich den Bereich nicht fixiert, dafür aber das Suchkriterium (z.B. Zelle I2=ZÄHLENWENN(A2;smilies!$A$2)). Wenn Smilies alleine in einer Zelle standen, hat dies auch geklappt. Sobald aber mehr Smilies in einer Zelle sind, zählt die Formel leider nicht mehr (siehe angehängte Datei Spalte ZÄHLENWENN❤️). 

@Fennek: Eine Beispielsdatei habe ich nun angehängt. Im Reiter "Smilies" habe ich jeden Smiley aufgezählt, der unter die jeweilige Kategorie fällt. Im Reiter "messages" habe ich die Spalten in loves, hahas, wows, sads, likes und angrys aufgeteilt und beispielhaft die Werte eingetragen, die ich für die 95.000 Nachrichten immer entsprechend bräuchte. Mit Makros kenne ich mich nicht wirklich aus, wäre dir/euch aber unendlich dankbar, wenn es hierfür eine Lösung geben würde!

Liebe Grüße
Moin,

nach meinem jetzigen Kenntnisstand dürfte eine Auswertung, so wie du sie dir vorstellst, nicht mit Formeln zu bewältigen sein. Ob etwas mit Makros lösbar ist, müssen dir allerdings die VBA-Spezialisten sagen - da bin ich leider blank.
Hi,


Das Smilie mit den Herzaugen wird z.B. nicht erkannt.

Arbeitsblatt mit dem Namen 'messages'
AB
1messageloves
2❤❤❤❤?4
3Cool0
4??????0
5Once in a lifetime ~ ♡1
6SN DE ❤️ :(1
7❤️1
8Glückwunsch ♥️????2
9Glückwunsch  ?0
10super schön ❤1
11Ja!!??0
12das ist blöd ??0

ZelleFormel
B2=SUMMENPRODUKT((TEIL($A2;SPALTE($A$1:INDEX($1:$1;LÄNGE($A2)));1)=INDIREKT(B$1))*1)
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.01] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Andere werden doppelt gezählt, weil sie zu ähnlich sind oder als ein- und zwei-Zeichen-Version vorliegen (in smilies A4 und A7, messages A8)
Hallo,

anbei der code für den momentanen Stand:

Code:
'WSF.Unichar(Zahl)
'WSF.Unicode(.Value)

Sub T_1()
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Dim Res(5)

loves = Array(10084, 10084, 9829, 9825, 9829, 128525, 128536, 128149, 128151, 128155, 128156, 128157, 128147, 128139, 10083, 128158, 128150, 128159, 128154, 128152, 128153)
hahas = Array(128540, 128514, 128517, 128513, 128515, 128518, 128539, 128512, 128516)
wows = Array(128563, 128558, 128559)
sads = Array(128557, 128546, 128554, 128555, 128533, 9785, 128577, 128543)
likes = Array(129303, 128578, 128522, 128077, 128076, 9786, 128079)
angrys = Array(128534, 128530, 128580, 128548, 128545, 128544)


For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    For c = 1 To Len(Cells(i, 1))
        UC = WSF.Unicode(Mid(Cells(i, 1), 1, 1))
        Debug.Print i, c, Len(Cells(i, 1)), UC
        t = Application.Match(UC, loves, 0)
        If Not VBA.IsError(t) Then Res(0) = Res(0) + 1
        t = Application.Match(UC, hahas, 0)
        If Not VBA.IsError(t) Then Res(1) = Res(1) + 1
        t = Application.Match(UC, wows, 0)
        If Not VBA.IsError(t) Then Res(2) = Res(2) + 1
        t = Application.Match(UC, sads, 0)
        If Not VBA.IsError(t) Then Res(3) = Res(3) + 1
        t = Application.Match(UC, likes, 0)
        If Not VBA.IsError(t) Then Res(4) = Res(4) + 1
        t = Application.Match(UC, angrys, 0)
        If Not VBA.IsError(t) Then Res(5) = Res(5) + 1
    Next c
    Debug.Print i, Join(Res, ", ")
    Erase Res
Next i
End Sub

Die normalen Text-Funktionen len(), mid() klappen oft nicht. Das erschwert den Zugriff enorm.

Ein erster Check der Suchmaschine gab nicht viel her, ich werde es später noch einmal versuchen.

Schwerer als gedacht.

mfg
Hallo,

es bleibt spannend:

Folgende Zeichen aus der Tabellen wurden mit copy/paste in den Editor übertragen und Leerzeichen eingefügt:

Zitat:❤ ❤ ❤ ❤ ?
? ? ? ? ? ? (aus Zeile 4)

Dieser Code liest die Zeichen aus und zeigt, welche 2 bytes und welche 4 bytes sind:

Code:
Sub T_1()
f = "\Smilies exam.txt"
Debug.Print Dir(f)
Open f For Binary Access Read As #1
        ReDim By(LOF(1) - 1&) As Byte
        Get #1, , By
        Close #1
For b = 0 To UBound(By)
    Debug.Print b, By(b)
Next b
End Sub

Es wäre möglich, die Mail nicht in xl sondern in eine Textdatei zu speichern, aber eine Prüfung mit so vielen Varianten wird recht komplex.

Vielleicht hilft noch ein API Experte.

mfg
Hallöchen,

ich nutze zwar die eine oder andere API, habe hier aber mal noch eine Formellösung Smile
Bei den beiden Angrys in der letzten Zeile ist zu beachten, dass die eigentlich gleich aussehen, aber doch unterschiedlich sind. Markiert mal die "beiden Zeichen" des ersten und überschreibt damit den zweiten und schaut auf die Ergebnisse. Andersrum auch noch mal. Ich habe dann jeweils bei dem einen oder anderen 2 bekommen.
Der Trick ist, die zu zählenden Smilies auch in der Formel zu verwenden Smile, daher in Zeile die "Originale" Smile Zeile 1 ist nur informativ.
Die Formel aus B3 im gesamten Bereich verteilen …
ZelleFormel
B3{=SUMME((TEIL($A3;SPALTE($1:$1);LÄNGE(B$2))=B$2)*1)}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Hallo,

@Andre: genial!

Mit VBA konnte ich die Bytes analysieren und dieser Zuordnung erstellen:

Code:
Type    Symbol    Unicode    Hex(Unicode)    Bytes
loves    ❤    10084    002764    2764
loves    ♥    9829    002665    2665
loves    ♡    9825    002661    2661
loves    ?    128525    01F60D    DE0D
loves    ?    128536    01F618    DE18
loves    ?    128149    01F495    DC95
loves    ?    128151    01F497    DC97
loves    ?    128155    01F49B    DC9B
loves    ?    128156    01F49C    DC9C
loves    ?    128157    01F49D    DC9D
loves    ?    128147    01F493    DC93
loves    ?    128139    01F48B    DC8B
loves    ❣️    10083    002763    2763
loves    ?    128158    01F49E    DC9E
loves    ?    128150    01F496    DC96
loves    ?    128159    01F49F    DC9F
loves    ?    128154    01F49A    DC9A
loves    ?    128152    01F498    DC98
loves    ?    128153    01F499    DC99
hahas    ?    128540    01F61C    DE1C
hahas    ?    128514    01F602    DE02
hahas    ?    128517    01F605    DE05
hahas    ?    128513    01F601    DE01
hahas    ?    128515    01F603    DE03
hahas    ?    128518    01F606    DE06
hahas    ?    128539    01F61B    DE1B
hahas    ?    128512    01F600    DE00
hahas    ?    128516    01F604    DE04
wows    ?    128563    01F633    DE33
wows    ?    128558    01F62E    DE2E
wows    ?    128559    01F62F    DE2F
sads    ?    128557    01F62D    DE2D
sads    ?    128546    01F622    DE22
sads    ?    128554    01F62A    DE2A
sads    ?    128555    01F62B    DE2B
sads    ?    128533    01F615    DE15
sads    ☹️    9785    002639    2639
sads    ?    128577    01F641    DE41
sads    ?    128543    01F61F    DE1F
likes    ?    128522    01F60A    DE0A
likes    ?    128077    01F44D    DC4D
likes    ?    128076    01F44C    DC4C
likes    ☺️    9786    00263A    263A
likes    ??    128079    01F44F    DC4F
angrys    ?    128534    01F616    DE16
angrys    ?    128530    01F612    DE12
angrys    ?    128580    01F644    DE44
angrys    ?    128548    01F624    DE24
angrys    ?    128545    01F621    DE21
angrys    ?    128544    01F620    DE20

Nach den 2 bytes in der letzten Spalte kann man eine Datei (gespeichert in UNICODE-Format) durchsuchen und zeilenweise auszählen.

mfg

(wird wohl nicht mehr benötigt)
Seiten: 1 2