dani
Goto Top

Inhalt eines Kommentars pro Zelle zählen

Hallo zusammen,
ich habe eine Excel Tabelle, in der einige Werte stehen. Pro Zelle wurde per Kommentarfunktion einen bzw. mehreren Namen hinterlegt. Beispiel:
Müller
Maier
Schulz
Nun würde ich gerne die Anzahl der Einträge als Wert in die Zelle schreiben lassen:
740fb50205ae699f54193ce35889fab1

Ich würde fast Wetten, dass es über VB als Funktion möglich ist. Aber mir fehlt der Ansatz, wie man solch eine Funktion aufbaut. face-smile


Gruß,
Dani

Content-Key: 298043

Url: https://administrator.de/contentid/298043

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: 114757
Lösung 114757 03.03.2016, aktualisiert am 04.03.2016 um 18:13:30 Uhr
Goto Top
Moin Dani,
z.B. als Funktionsmakro das du als Formel benutzen kannst:
Public Function CountCommentLines(rng As Range) As Integer
    On Error GoTo Error
    If rng.Comment.Text <> "" Then  
        CountCommentLines = UBound(Split(rng.Comment.Text, vbLf)) + 1
    Else
        CountCommentLines = 0
    End If
    Exit Function
Error:
    CountCommentLines = 0
End Function
Formel ist dann z.B.
=CountCommentLines(A1)
Gruß jodel32
Mitglied: Dani
Dani 03.03.2016 um 12:35:46 Uhr
Goto Top
Hi jodel32,
du bist der Beste. Ich hätte es komplizierter vorgestellt.
Die Funktion läuft wie eine Eins. Allerdings wird nach Kommentaränderung die Zahl im Feld nicht aktualisiert, obwohl ich eigentlich mit ENTER ins nächste Feld springe. Ich denke mal, das ist eine Eigenheit bei den Kommentaren?!


Gruß,
Dani
Mitglied: 114757
114757 03.03.2016 aktualisiert um 12:44:18 Uhr
Goto Top
Zitat von @Dani:
Die Funktion läuft wie eine Eins. Allerdings wird nach Kommentaränderung die Zahl im Feld nicht aktualisiert, obwohl ich eigentlich mit ENTER ins nächste Feld springe. Ich denke mal, das ist eine Eigenheit bei den Kommentaren?!
Ja die triggern kein Update für die Berechnung von Formeln, ich überlege mir gleich mal einen Workaround dafür.
Mitglied: 116301
Lösung 116301 03.03.2016, aktualisiert am 04.03.2016 um 18:13:28 Uhr
Goto Top
Hallo Dani!

Wenn Du nach der Eingabe in eine andere Zelle wechselst, dann sollte es z.B. so gehen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Columns("B:B").Calculate  
End Sub
Und in den Formelcode noch das hier einfügen:
Application.Volatile

Gruß Dieter
Mitglied: Dani
Dani 04.03.2016 aktualisiert um 11:28:06 Uhr
Goto Top
Guten Morgen,
vielen Dank für die Ergänzung. Leider passiert nach wie vor nichts, beim Wechseln der Zelle. Der Code sieht aktuell so aus:
Public Function CountCommentLines(rng As Range) As Integer
    On Error GoTo Error
    If rng.Comment.Text <> "" Then  
        CountCommentLines = UBound(Split(rng.Comment.Text, vbLf)) + 1
    Else
        CountCommentLines = 0
    End If
    CountCommentLines = CountCommentLines - 1
    Application.Volatile
    Exit Function
Error:
    CountCommentLines = 0
End Function

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Columns("P1:P33").Calculate  
End Sub

Abgelegt habe ich das Ganze in einem Module.


Gruß,
Dani
Mitglied: 114757
Lösung 114757 04.03.2016 aktualisiert um 18:13:24 Uhr
Goto Top
Zitat von @Dani:
Abgelegt habe ich das Ganze in einem Module.
Das ist nicht richtig. Die Function kannst du dort lassen, aber die Worksheet_Selectionchange_Sub muss in den Codeabschnitt des Worksheets, damit das Event fired.

Und das Application.Volatile fehlt am Anfang der Function.
Mitglied: 116301
Lösung 116301 04.03.2016 aktualisiert um 18:13:23 Uhr
Goto Top
Hallo Dani!

Sorry, hätte ich besser erklären sollenface-sad, was Jodel erfreulicher Weise inzwischen nachgeholt hatface-smile

Gruß Dieter

PS.
ändere
Columns("P1:P33").Calculate   
nach
Columns("P:P").Calculate   
'oder  
Range("P1:P33").Calculate   
Mitglied: Dani
Dani 04.03.2016 um 15:28:36 Uhr
Goto Top
Hallo ihr zwei,
Und das Application.Volatile fehlt am Anfang der Function.
Wusste ich nicht, ich hab's wie oben gepostet einfach ans Ende gestellt. face-smile

aber die Worksheet_Selectionchange_Sub muss in den Codeabschnitt des Worksheets, damit das Event fired.
Ah... das war mich nicht klar. Danke.

Ich arbeite die Änderungen später ein und poste den funktionieren Code hier nochmals.


Gruß,
Dani
Mitglied: Dani
Dani 04.03.2016 aktualisiert um 18:13:52 Uhr
Goto Top
Untenstehend die finale Lösung für meine Frage.

Zerst habe ich ein neues Modul in der betroffenen Exceldatei angelegt mit folgenden Inhalt:
Public Function CountCommentLines(rng As Range) As Integer
    Application.Volatile
    On Error GoTo Error
    If rng.Comment.Text <> "" Then  
        CountCommentLines = UBound(Split(rng.Comment.Text, vbLf)) + 1
    Else
        CountCommentLines = 0
    End If
    CountCommentLines = CountCommentLines - 1
    
    Exit Function
Error:
    CountCommentLines = 0
End Function

In der jeweiligen Arbeitsmappe per Doppelklick aufrufen und diesen Code einfügen:
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
    Columns("A:Z").Calculate  
End Sub

In Zeile 2 kann der Bereich entsprechend verkleinert bzw. vergrößtert werden.

Vielen Dank nochmal an euch beide! Schönes Wochende!


Gruß,
Dani