Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
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

Loop trägt falsche Werte ein

Loop trägt falsche Werte ein
26.02.2017 17:49:30
Lisa
Hallo zusammen,
ich stecke mal wieder fest und konnte auch nach mehrstündigem Probieren und Forschen keine Lösung für mein Problem finden.
Mit dem unten stehenden Befehl, will ich zunächst Summen und Hits zusammenrechnen über verschiedene Tabellenblätter und drei andere Kriterien (stim, kat, rkat). Das funktioniert an sich mit dem Befehl auch schon ganz gut. Ich habe mir auch über eine Messagebox schon rausgeben lassen, nach welchen Kriterien er in jedem Loop sucht und wo er die dann einträgt und das stimmt alles. Nur leider bekomme ich an einigen Stellen falsche Werte angegeben und unter "meinpos" trägt er gar nichts ein. Vielleicht kann ja jemand hier den Knoten in meinem Kopf lösen.
Liebe Grüße,
Lisa
Der Code:
Sub  Test()
Dim q As Worksheet, Z As Worksheet
Dim QC As Range, QD As Range, QF As Range
Dim o As Integer, p As Integer, r As Integer, s As Integer
Dim t As Integer, u As Integer, v As Integer, w As Integer
Dim x As Integer, y As Integer, aa As Integer
'Löschen aller Werte in der Tabelle
Set Z = ActiveWorkbook.Worksheets("Berechnung")
For o = 3 To Z.UsedRange.Columns.Count
For p = 2 To Z.UsedRange.Rows.Count
Z.Cells(p, o).Value = ""
Next p
Next o
'berechnet die Summe der Reaktionszeiten und die Anzahl an Hits
For r = 2 To Worksheets("Berechnung").UsedRange.Rows.Count
stim = Worksheets("Berechnung").Range("B" & r).Value
For s = 3 To ActiveWorkbook.Worksheets.Count
Set q = Worksheets(s)
Set QC = q.Range("C:C")
Set QD = q.Range("D:D")
Set QF = q.Range("F:F")
With WorksheetFunction
t = 2 + Worksheets("Angaben").Range("E1").Value
u = -1
v = 0
w = 11
x = 12
For aa = 1 To 3
kat = Worksheets("Angaben").Range("B" & aa).Value
u = u + 4
v = v + 4
If u  0 Then
Z.Cells(r, u).Value = Z.Cells(r, u).Value + .SumIfs(QF, QC, "*" & stim & "*" _
, QD, kat)
Z.Cells(r, v).Value = Z.Cells(r, v).Value + .CountIfs(QC, "*" & stim & "*",  _
QD, kat)
End If
End If
For y = 3 To t
rkat = Worksheets("Angaben").Range("E" & y).Value
w = w + 4
x = x + 4
If w > 14 And x > 16 Then
If .CountIfs(QC, "*" & stim & "*", QC, "*" & rkat & "*", QD, kat) > 0 Then
Z.Cells(r, w).Value = Z.Cells(r, w).Value + .SumIfs(QF, QC, "*" & stim & "*" _
, QC, "*" & rkat & "*", QD, kat)
Z.Cells(r, x).Value = Z.Cells(r, x).Value + .CountIfs(QC, "*" & stim & "*",  _
QC, "*" & rkat & "*", QD, kat)
End If
End If
Next y
Next aa
End With
Next s
Next r
Set QC = Nothing: Set QD = Nothing: Set QF = Nothing: Set q = Nothing
End Sub
PS. Um zu verdeutlichen, wie das Ganze aussehen soll, habe ich hier einen Screenshot hochgeladen: http://666kb.com/i/dh1mwdis6qyh4rtjq.png

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Loop trägt falsche Werte ein
26.02.2017 19:10:53
Hajo_Zi
mir ist das zu aufwendig.
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Schau mal hier
Eine hochgeladene Arbeitsmappe erhöht die Wahrscheinlichkeit, dass Du eine Lösung für Dein Problem erhältst.
Erstelle folglich bitte eine Demomappe, aus der deine Aufgabenstellung klar erkennbar ist und lade diese Mappe mit einem aussagekräftigen Dateinamen hoch.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, solltest du diese Daten anonymisieren bzw. pseudonymisieren.
Falls Du den Download des Forums nicht benutzen möchtest beachte bitte: von unsicheren Servern file-upload lade ich keine Datei herunter (lt. Einschätzung meines Virenprogramms)

Anzeige
AW: Loop trägt falsche Werte ein
26.02.2017 19:52:09
Lisa
Hallo Hajo,
vielen Dank für deine Antwort erstmal!
Leider weiß ich nicht, inwiefern ich überhaupt Daten in dieser Art hochladen darf, da es für meine Arbeit ist. Ich müsste da also erstmal am Dienstag nachfragen, ob das überhaupt geht.
Ich hatte gehofft, dass vielleicht in meinem Code ein offensichtlicher Fehler steckt, den ich einfach nur übersehe. Der Screenshot war nur dafür gedacht, um zu zeigen, wie das Endergebnis am besten aussehen soll (z.B. dass immer nur in jeder 4. Spalte RT bzw. Hits eingetragen werden sollen). Falls sich das aber so nicht lösen lässt und ich am Dienstag das okay bekomme, dann lade ich noch eine Demomappe hoch.
Liebe Grüße,
Lisa
Anzeige
AW: Loop trägt falsche Werte ein
27.02.2017 11:06:49
Piet
Hallo,
ich habe mir aus Neugier das Bild geladen, aber ohne die Datei als Beispiel zu sehen ist es schwer da etwas nachzuvollziehen. Zwei Dinge sind mir aufgefallen. Man könnte einen Teil des Code nach oben setzen. Die Variable t holt offenbar immer denselben Wert aus Zelle E1. Ist das so richtig? Dann kann sie auch ganz oben stehen!
Und mich macht die komplizierte Löschung über zwei For Next Schleifen stutzig. M.E. viel zu kompliziert gedacht. Ich sage das nur deswegen, weil dieser Code nach meiner Ansicht gutes Fachwissen voraussetzt. Aber ohne ein paar Daten aus 1-2 Tabellen wird man nur durch Code ansehen den Fehler sicher nicht finden. Es können ja Fantasiedaten und Fantasie Überschriften sein. Hauptsache man erkennt Zusammenhaenge.
Ein kleiner Praktiker Tipp zum Selbst suchen. Wenn ich feststecke baue ich mir in den Code MsgBoxen zum Testen ein, manchmal nach dem unteren Code über GoSub. Das hat den Vorteil das ich jederzeit Abbrechen kann. Manchmal markiere ich auch vorher Bereiche über Select, wenn ich den Verdacht habe das mein Offset-Bereich nicht stimmt. Irgendwann findet man immer etwas.
mfg Piet
  'Löschen aller Werte in der Tabelle
Set Z = ActiveWorkbook.Worksheets("Berechnung")
Z.UsedRange.ClearContents  'Wert t aus E1 laden
t = 2 + Worksheets("Angaben").Range("E1").Value

'diesen Teil zum Testen in For Next einbauen
msg = "Test Kat": GoSub zeigen
'GoSub Programm mit Return oder Programm Ende
zeigen:  ok = MsgBox(u & " / " & v & "  " & msg, vbOKCancel)
If ok = vbOK Then Return
End Sub

Anzeige
AW: Loop trägt falsche Werte ein
27.02.2017 12:18:10
Lisa
Hallo Piet (& alle anderen),
vielen Dank für deine Antwort. Hast du spontan schon eine Idee, wie man den 4fachen Loop auflösen könnte?
Dein Code zum Löschen der Inhalte ist zwar schön einfach, allerdings sollen die Bezeichnungen am Rand stehen bleiben, daher funktioniert der so nicht ganz gewollt.
Ich lade jetzt mal eine Demomappe mit hoch, da habe ich das Experiment gerade durchgeführt, das ist laut meinem Chef erlaubt, da das ja meine eigenen Daten sind. Zur Erklärung dazu: in dem Experiment reagieren Personen auf bestimmte Stimuli, die werden im Tabellenblatt "Berechnung" in der Spalte B dargestellt und stehen im Tabellenblatt jeder Person auch in der Spalte C ("Code"). In der Spalte D wird die Reaktion der Person angezeigt, wobei 14 positiv, 13 neutral und 12 negativ (kat) ist. In der Spalte F steht dann die Reaktionszeit der Person. Mit dem Befehl hier möchte ich jetzt bis zur Spalte Q auf dem Blatt Berechnung, dass alle Reaktionszeiten addiert und die Anzahl dieser berechnet werden, wenn die Person auf den Stimuli positiv, neutral bzw. negativ reagiert hat. Ab der Spalte O kommt eine weitere Bedingung dazu und zwar die Referenzkategorie (rkat), also das Wort, das vor dem Stimuli steht, das auch in der Spalte C in jedem Tabellenblatt steht. Was SD und SE damit zu tun haben kommt erst wesentlich später in meinem Code & ich würde gerne erst dieses Problem lösen, bevor das auftaucht. Ich hoffe, das ist so verständlich.
Liebe Grüße,
Lisa
Demomappe: https://www.herber.de/bbs/user/111794.xlsx
Anzeige
Problem Gelöst
27.02.2017 14:59:37
Lisa
Nach weiterem stundenlang probieren habe ich das Problem nun doch selbstständig lösen könne. Eigentlich war die Lösung ganz einfach: Den äußeren If-Befehl im y-Loop entfernen und zack, schon funktioniert´s. Ich könnte mich eigentlich selber schlagen, dass diese Lösung so lange gedauert hat.
Vielen Dank nochmal an Hajo & Piet für die Mühe!!
Liebe Grüße,
Lisa

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige