HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
Basiskenntnisse in Excel
Christian
15.06.2026 12:31:48
AW: Makro berücksichtigt nicht alle Zeilen
Hallo Robert,

danke dir für den Code

Für mein konkretes Problem löst sie es aber leider nicht, weil der Fehler nicht im AZN‑Makro liegt, sondern schon vorher bei der Berechnung der Prozentwerte entsteht:

Der Wert, der später als 10 % angezeigt wurde, ist intern 0,1000122.
RoundUp(...,2) macht daraus 0,10, obwohl der Wert eigentlich auf 0,11 hätte gehen müssen.
Da der interne Wert aber größer als 0,1 ist, fällt die Zeile beim Vergleich korrekt raus.

Ich muss daher zuerst das Ursprungs‑Makro korrigieren, das die Prozentwerte erzeugt – danach funktioniert auch die AZN‑Auswertung wieder sauber.

Gruß
Christian
Als Antwort auf diesen Beitrag
Robert Pilz
15.06.2026 10:44:38
AW: Makro berücksichtigt nicht alle Zeilen
Hallo Christian;


Ich denke mal so.

Sub SchreibeAZN_A_bis_C()


Dim wsCodes As Worksheet, wsLeute As Worksheet, wsAZN As Worksheet
Dim lastRow As Long, i As Long
Dim arrCodes As Variant
Dim nameMatch As Variant
Dim codeVal As String, nameVal As Variant, dateVal As Variant
Dim valF As Double
Dim dictAZN As Object
Dim key As Variant
Dim arrOut() As Variant

Set wsCodes = ThisWorkbook.Worksheets("Codes")
Set wsLeute = ThisWorkbook.Worksheets("Leute")
Set wsAZN = ThisWorkbook.Worksheets("AZN")
Set dictAZN = CreateObject("Scripting.Dictionary")

'--- Codes D:F einlesen ---
lastRow = wsCodes.Cells(wsCodes.Rows.Count, "D").End(xlUp).Row
If lastRow < 1 Then Exit Sub

arrCodes = wsCodes.Range("D1:F" & lastRow).Value

'--- AZN-Daten sammeln ---
For i = 1 To UBound(arrCodes, 1)

codeVal = Trim(CStr(arrCodes(i, 1))) 'Spalte D
dateVal = arrCodes(i, 2) 'Spalte E

If IsNumeric(arrCodes(i, 3)) Then 'Spalte F
valF = CDbl(arrCodes(i, 3))

If valF <= 0.1 And valF > 0 And codeVal <> "" Then

If Not dictAZN.Exists(codeVal) Then

nameMatch = Application.VLookup(codeVal, wsLeute.Range("B:C"), 2, False)

If Not IsError(nameMatch) Then
nameVal = nameMatch
Else
nameVal = ""
End If

dictAZN.Add codeVal, Array(nameVal, dateVal)

End If

End If
End If

Next i

'--- Ausgabe in AZN!A:C ---
wsAZN.Range("A:C").ClearContents

If dictAZN.Count > 0 Then

ReDim arrOut(1 To dictAZN.Count, 1 To 3)

i = 1
For Each key In dictAZN.Keys
arrOut(i, 1) = key
arrOut(i, 2) = dictAZN(key)(0)
arrOut(i, 3) = dictAZN(key)(1)
i = i + 1
Next key

wsAZN.Range("A1").Resize(dictAZN.Count, 3).Value = arrOut

End If

End Sub
Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.