Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1564to1568
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zähler der Kettenlänge

Zähler der Kettenlänge
16.06.2017 13:18:45
Sabine
Hallo,
ich versuche für meine Masterarbeit die Anzahl an Wiederholungen (Ketten) einer Kategorie herauszufinden. Dafür hab ich jetzt auch schon was geschrieben, aber leider funktioniert es nicht richtig. Er schein richtig anzufangen und dann aber irgendwie nicht weiter zu laufen, ich weiß nicht warum. Vielleicht könnt ihr mir ja helfen, das wäre toll.
Danke
Sabine
https://www.herber.de/bbs/user/114310.xlsm
Die Daten sein eigentlich so lang wie die 0en in Spalte A, also über 3000 Einträge

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Link futsch?
16.06.2017 13:40:38
Max2
Hallo,
ich kann deine Datei leider nicht runterladen.
Bekomme ständig einen Fehler.
AW: richtiger Link, owT
16.06.2017 15:44:32
Sabine
Danke für den neuen Link Klaus!
Hier ein Code
16.06.2017 15:05:42
Max2
Hallo,
hier ein Code der geht:
Option Explicit
Sub countValues()
Dim ws As Worksheet
Dim cRow As Long
Dim i As Long, j As Long
Dim temp As String
Dim counter As Long
Set ws = ThisWorkbook.Sheets(1)
With ws
cRow = .Cells(.Rows.count, 1).End(xlUp).Row
i = cRow
Do Until i = 1
temp = .Cells(cRow, 1).Value
For j = 4 To cRow
If .Cells(j, 1).Value = temp Then
counter = counter + 1
.Cells(j, 1).Value = ""
End If
Next j
Debug.Print temp & " wurde: " & counter & " mal gezählt"
cRow = .Cells(.Rows.count, 1).End(xlUp).Row
counter = 0
i = cRow
Loop
End With
End Sub

Der Löscht dir allerdings die Daten raus.
Anzeige
AW: Hier ein Code
16.06.2017 15:55:37
Sabine
Hallo Max,
danke erstmal für deine Quelltest. Nur leider funktioniert in meiner Datei dein Code nicht, es sind nur alle meine Daten in Spalte A weg *Kopfkratz*.
Ich arbeite bei mir mit einem Array. Ich möchte also nachher wissen, wie oft welcher Text (String) mit welcher Kettenlänge in der Spalte aufgetaucht ist. Die möglichen Texte stehen dabei fest und habe ich deswegen bei Select Case festgelegt, weil einfacher.
Kettenlänge 1 2 3 4 usw
Text A 2 4 0 6
Text B 0 5 10 2
usw
Die ersten Auszählungen klappen ja bei mir schon, verstehe nur nicht warum er dann plötzlich nicht weiter macht, also keine Ketten mehr erkannt werden. Der Code dürfte auch nicht allzu schwer sein, wenn ich ihn sogar verstehe ^^.
Danke schonmal im vorraus.
Sabine
Anzeige
AW: Hier ein Code
16.06.2017 20:32:27
Max2
Hallo,
hier ein Code der dir die Daten ins Sheet schreibt:
Option Explicit
Private Function getName(ByVal str As String) As String
Dim i As Integer
i = Len(str)
If Left(str, 2) = "TN" Then
str = Mid(str, 3, i - 2)
str = LTrim(str)
ElseIf Left(str, 3) = "Mod" Then
str = Mid(str, 4, i - 3)
str = LTrim(str)
End If
getName = str
End Function
Private Sub IntoSheet(ByVal ws As Worksheet, _
arrNamen() As String, _
arrDaten() As Long)
Dim i As Integer, j As Integer
Dim ref As String
With ws
i = 2
Do
ref = .Cells(i, 2).Value
ref = getName(ref)
For j = 0 To UBound(arrNamen)
If arrNamen(j) = ref Then
.Cells(i, 3).Value = arrDaten(j)
Exit For
End If
Next j
i = i + 1
Loop Until i = 10
End With
End Sub
Sub countValues()
Dim ws As Worksheet
Dim cRow As Long, counter As Long
Dim i As Long, j As Long, ii As Long
Dim temp As String
Dim arrNamen() As String, arrCounter() As Long
Set ws = ThisWorkbook.Sheets(1)
With ws
cRow = .Cells(.Rows.Count, 1).End(xlUp).Row
i = cRow
Do Until i = 1
temp = .Cells(cRow, 1).Value
For j = 4 To cRow
If .Cells(j, 1).Value = temp Then
counter = counter + 1
.Cells(j, 1).Value = ""
End If
Next j
ReDim Preserve arrNamen(ii)
ReDim Preserve arrCounter(ii)
arrNamen(ii) = temp
arrCounter(ii) = counter
ii = ii + 1
cRow = .Cells(.Rows.Count, 1).End(xlUp).Row
counter = 0
i = cRow
Loop
End With
IntoSheet ws, arrNamen, arrCounter
End Sub
Bei deinem Code sind, soweit ich das sehen kann, die "Ketten" Falsch.
Mit Ketten, hast du einen Counter aber du verwendest Ketten auch als Index.
Ich habe den Code aber nur kurz überflogen.
Leider muss gestehen... das ich mir ungern ewig lang fremden Code anschaue, der nach kurzer Zeit abbricht.
Den Code selbst oder anders zu schreiben, geht meistens schneller bei mir.
Wo ist überhaupt der Sinn bei der Kategorien Zahl?
Für mich wirkt das zusammenhangslos und willkürlich.
Kannst du mir das Bitte erklären.
Anzeige
AW: Hier ein Code
17.06.2017 00:02:43
Sabine
Hallo Max,
vielen Dank, probier ich morgen gleich aus. Hab gerade kein PC zur Hand. Kann ich verstehen, in etwas von anderen rein arbeiten ist immer schwerer, da ich vba voraussichtlich auch nicht häufiger anwenden werde, zählt das lernen Argument auch nicht.
Ich mache sozusagen eine Gesprächsanalyse, mit einer bestimmten Gesprächstechnik (Motivierende Gesprächsführung). Da vergibt man zu jeder Aussage eine Kategorie, Change-Talk ist zb alle Aussagen, die für eine Veränderung sprechen oder schon Schritte der Plaung in diese Richtung. Sustain-Talk sind Aussagen gegen eine Veränderung. Nun gibt es Aussagen des Therapeuten und Patient und diese beeinflussen sich gegenseitig, auch frühere Aussagen des Patient beeinflussen die späteren. Das ganze untersuche ich noch in Gruppen, also nur nicht ein Patient.
Mit der statistischen Prüfung mittel Lag Sequential Analyse kann man leider nur die Abhängigkeit von 2 Aussagen zueinander auf signifikanz prüfen (also das eine Aussage überzufällig häufig auf eine andere folgt), zb von Aussage 0 auf die Aussage 2 weiter, nur weiß ich dann nicht was dazwischen liegt. Und wenn Aussage 1 auf 2 signifikant und Aussage 1 auf 3 signifikant ist dann wird immer von Ketten ausgegangen, ich möchte aber gern sehen ob es diese tätsächlich gibt und wie häufig die sind.
So hoffe das ist verständlich ^^.
Sabine
Anzeige
AW: Hier ein Code
17.06.2017 14:13:19
Max2
Ich vermute mal Psychologie, oder Soziologie?
Für Stochastik und Daten Auswertung, bieten sich Sprachen wie: R, Python, MATLAB an.
Mit diesen Sprachen, kann man auch wunderbar, die gesammelten Daten grafisch darstellen.
Nach deiner Erläuterung, scheint es, du musst die genannten Techniken und deren
Ergebnisse empirisch belegen.
Wenn du die gesammelten Daten anderen Vorstellen sollst/musst, wäre eine grafische Darstellung
natürlich etwas schicker ;)
R: https://www.r-project.org/
Python: https://www.python.org/downloads/
MATLAB: https://de.mathworks.com/programs/trials/trial_request.html?requestedDomain=www.mathworks.com
Anzeige
AW: Hier ein Code
21.06.2017 09:24:42
Sabine
Hallo Max,
leider hat dein Code immer noch nicht funktioniert, nach wie vor waren in der ersten Spalte alle Daten weg und es wurden auch nur einzelne Vorkommen gezählt. Da ich deinen Code auch nicht verstanden habe, habe ich bei mir nochmal Prüfroutinen eingebaut, also mal die Länge der Datenzeile ausgegeben, siehe da ich hatte ausversehen Spalte B als Zähler für die Datenreihe und dann hat er so auch nur bis nur bis Zeile 10 gearbeitet. Und dann habe ich noch die Summen zusammen gezählt und mit der Anzahl der Einträge verglichen, hat auch nicht gepasst. Also war das Eintragen der letzten Zeile nach Beenden der Schleife auch überflüssig. Jetzt funktioniert alles tadellos.
Trotzdem danke nochmal für deine Mühe.
Ja ich studiere Psychologie, R habe ich auch aber da habe ich noch nie was eigenes mit gemacht und habe auch nicht die Zeit mich damit auseinander zu setzen. Da gibt es sogar eine bessere Analyse - Ngram - aber die läuft bei mir leider fehlerhaft.
Hier nochmal der richtige Quelltext, für alle die es interessiert.
Sub Ketten()
Dim Zeile As Integer          ' Variable für Zeile
Dim Spalte As Integer         ' Variable für Spalte
Dim Ketten As Integer         ' Anzahl der Wiederholungen in Kette
Dim Inhalt As Integer         ' Zuordnung von Kategorie zu Array Feld
Dim Werte(9, 15) As Integer   ' Array für die Werte
Dim ZAnzahl As Long           ' letzte belegte Zeile
' Bildschirmaktualisierung aus
Application.ScreenUpdating = False
' letzte Zeile ermitteln
ZAnzahl = Range("A65536").End(xlUp).Row
Cells(12, 2) = ZAnzahl 'Kontrollausgabe der letzten Zeile in Datenspalte
Ketten = 1
' Schleife über alle belegten Zellen der Spalte A
For Zeile = 4 To ZAnzahl
' Zellen sind gleich
If Cells(Zeile, 1) = Cells(Zeile + 1, 1) Then
' Kette um 1 erhöhen
Ketten = Ketten + 1
Else
' Zuordnung Kategrie zu Arrayfeld
Select Case Cells(Zeile, 1)
Case "Change Talk"
Inhalt = 0
Case "Sustain Talk"
Inhalt = 1
Case "Neutral Talk"
Inhalt = 2
Case "Reflexion"
Inhalt = 3
Case "Neutral"
Inhalt = 4
Case "MI Konsistent"
Inhalt = 5
Case "Neutral (keine Evokation)"
Inhalt = 6
Case "Change Talk evozierend"
Inhalt = 7
Case "Sustain Talk evozierend"
Inhalt = 8
Case "0"
Inhalt = 9
End Select
Werte(Inhalt, Ketten) = Werte(Inhalt, Ketten) + 1
' Kette für neue Zählung wieder auf 1 setzen
Ketten = 1
End If
Next Zeile
' Werte in Zellen schreiben
For Zeile = 0 To 9
For Spalte = 0 To 15
Cells(Zeile + 2, Spalte + 3) = Werte(Zeile, Spalte)
Next Spalte
Next Zeile
' Bildschirmaktualisierung ein
Application.ScreenUpdating = True
End Sub

Anzeige
Schöner Code und viel Erfolg
21.06.2017 09:41:08
Max2
Hallo,
ich habe mir deinen Code in dieser Version nochmal angeschaut.
Gefällt mir, hast du smart gelöst.
Die aufpolierten Daten, die durch das Excel Makro erhälst, könntest du in einer CSV-Datei speichern.
R kann mit CSV gut arbeiten.
Solltest du also doch die Zeit und lust finden, könntest du deine Aufbereiteten Daten in R nochmal darstellen.
Viel Erfolg im Studium und danke das du den fertigen Code mit uns teilst. (tuen leider zu wenige)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige