Clever-Excel-Forum

Normale Version: Ursprüngliche Zahlen finden?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
hallo atilla,

nochmals DANKE !!!

Vielen lieben 1000facher DANK !!!


Ich werde morgen dann testen.
Konnte aber bisher keine Fehler sehen.

Ich melde mich morgen nochmals.

Vorab nochmals DANKE !!!

LG
Angelina
hallo lieber schauan,

auch dir 1000 facher DANK !!!

Deinen letzten Beitrag verstehe ich nicht ganz.

Kannst du mir das kurz mal erklären?


DANKE :100:

LG
Angelina
Hallo Angelina,

23 15 22 Treffer in $F$6
23: Prüfung für Zeile 23
15: Gesucht wird Zahl 15
22: die 15 aus O22:Z22
Treffer in $F$6: Zahl bei Suche von unten nach oben (ab Zeile 22 bis Zeile 1) zuerst in Zelle F6 gefunden

23 39 22 Treffer in $H$4
23: Prüfung für Zeile 23
39: Gesucht wird Zahl 39
22: die 39 aus O22:Z22
Treffer in $H$4: Zahl bei Suche von unten nach oben (ab Zeile 22 bis Zeile 1) zuerst in Zelle H4 gefunden

23 4 21
23: Prüfung für Zeile 23
4: Gesucht wird Zahl 4
21: die 4 aus O21:Z21
---> Zahl ist offen bei Suche von unten nach oben (ab Zeile 22 bis Zeile 1)

23 10 21
23: Prüfung für Zeile 23
10: Gesucht wird Zahl 10
21: die 10 aus O21:Z21
---> Zahl ist offen bei Suche von unten nach oben (ab Zeile 22 bis Zeile 1)

usw.
hallo atilla,


ich kann nur gutes berichten - kann keine Unstimmigkeiten
zu meinen Handberechnungen feststellen.

Ich würde sagen ... dann ist die Aufgabe mit Hilfe von dir und schauan
absolut perfekt - für mich - erledigt worden.

Unglaublich ... das dies überhaupt möglich war.

DANKE DANKE DANKE

In der Spalte M hattest du (in welchem deiner VBCode auch immer)
vormals die Ausgabe/Anzeige der "Anzahl farblich markierter"
Also sind z.B. in einer Zeile D:I eine Zahl gelb dann stand dort
- glaube ich - in Spalte M die Zahl 1 ... ebenso wenn 2,3 oder mehr
farblich waren.
Wichtig!!! Wenn keine farblich ist - also Null - dann soll die 0 auch erscheinen!!!


Frage:
Könntest du das bitte wieder einrichten - jedoch nicht in der Spalte M
sondern in der Spalte AO also direkt neben AN
Gelegentlich ... wenn mal Luft dafür ist.

Also nochmals DANKE DANKE DANKE :65:

LG
Angelina
Hallo Angelina,

trotzdem noch mal die Frage. Warum zählt die 5 bei der 15 und der 39, und bei der 4, 10 und 32 nicht? Zufälligerweise sind die so oder so offen, denn sie fehlen im ganzen zutreffenden Bereich.

Für welche Zahlen gilt denn die "ominöse" 5 und für welche nicht?
Ich hatte ja zuletzt den Eindruck, dass die nur für die Zahlen gilt, die in Zeile 5 in O:Z definiert wurden. Ich dachte, wenn die Zahlen in Zeile 6 ausgeschlossen werden sollen, steht dort eben eine 6 statt der 5.
Alle anderen Zahlen hatte ich im vorgesehenen Bereich gesucht, die Lösung hatte im kleinen Beispiel gepasst.

Datum, 440 usw. gab es in den ersten Beispielen ja noch nicht.

Nun gilt die 5 für die Zahlen in O:Z Zeile 22. Da frag ich mich nun, wieso die nicht für die Zahlen in O:Z in Zeile 21 gilt oder all die anderen Zahlen Sad Oder gilt die 5 etwa doch für alle? Ich hab da noch keine allgemeingültige Regel erkannt, vermute aber inzwischen, dass die 5 bei allen Zahlen zu berücksichtigen ist. Entsprechend müssten bei diesem Eintrag die Bereiche ab der Zeile geprüft werden, in der die Zahl steht. Ob da nun eine 5, 1 oder 99 steht, wäre unerheblich. Erheblich ist, dass da was steht.
HAllo Angelina,

ich glaube, das war's. Ich hab das nun umgesetzt und auch die 14 Wink
Für den Farbvergleich hab ich jetzt aus dem vorhandenen Makro die RGB-Farbe genommen: RGB(255, 204, 0) Dadurch ist die "Hilfszelle" AO1 mit der Farbe nicht mehr nötig.
Hallo Andre,

ich bekomme andere Ergebnisse als Du

Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
1SchauanAtilla
21414
31313
41114
51212
699
71415
81313
999
101516
111212
121313
131111
141212
151212
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Wenn ich ehrlich sein soll, dann habe ich nicht wirklich verstanden, wie gezählt werden soll. :19:

Das es laut Angelina funktioniert, liegt nur daran, dass ich das anfänglich erwähnte manuelle Löschen per Code durchführe und den Code von xlph einsetze, welcher dann immer bis zur Löschzeile im Bereich O:Z Zahlen ungefärbt stehen lässt.

Ich vermute, dass immer bis eine Zeile vor der Dreierfärbung immer ab der Zeile der gesuchten Zahl gesucht wird.


@Angelina

ersetze Sub zählen2() mit folgendem Code, dann hast Du die Anzahl in Spalte AN:


Code:
Sub zählen2()
Dim lngLetzteZeile As Long
Dim i As Long, j As Long, k As Long, p As Long

Columns("M:N").ClearContents
lngLetzteZeile = LetzteBeschriebeneZeile(Range("D:I"))

For i = 1 To lngLetzteZeile
 For j = 4 To 9
   If Cells(i, j).Interior.ColorIndex <> xlColorIndexNone Then
     k = k + 1
   End If
 Next j
 
 If k >= 3 Then
   Cells(i, 41) = k
   Cells(i, 13) = Application.Max(Columns("M")) + 1
   Range(Cells(i, 1), Cells(i, 3)).Interior.ColorIndex = 3
 Else
   Cells(i, 41) = k
 End If
 k = 0
 
Next i
End Sub
hallo schauan,

gerne möchte ich deine Frage noch beantworten.

Zu welcher Datei genau bezieht sich deine Frage?


Ich kann aber erst morgen wieder antworten!

LG
Angelina


@atilla

danke dir - vielen DANK

LG
Angelina
Hallo Angelina,

es dürfte jetzt alles geklärt sein. Getestet haben wir aber noch nicht den Fall, das in AM1 nix steht.

Hallo Atilla,

danke für den Hinweis. Jetzt stimmt es, siehe Anhang.

Die Regeln gehen so, ich hoffe, das ich damit alles erfasst habe. Wird fast schon wieder etwas kompliziert Sad

Finde eine Zeile mit 3 markierten Zahlen im Datenbereich D:I

Vergleiche die Liste der verwendeten Zahlen aus dem Quellbereich O:Z (bis zur Zeile mit 3 markierten Zahlen im Datenbereich D:I) mit allen Zahleneinträgen im Datenbereich D:I (oberhalb der Zeile mit 3 markierten Zahlen)

Wenn in AM1 keine Zahl steht, dann
Zähle sie als als offen wenn
- die Zahl in O:Z nicht anders gefärbt ist als die Grundfarbe von O:Z (RGB...) * siehe Anmerkung
- die Zahl nicht im Datenbereich vorhanden ist
- die Zahl im Datenbereich zwar vorhanden, aber nicht eingefärbt ist

Wenn in AM1 eine Zahl steht, dann
Zähle sie als als offen wenn
- die Zahl in O:Z nicht anders gefärbt ist als die Grundfarbe von O:Z (RGB...) * siehe Anmerkung
- die Zahl nicht im Datenbereich D:I ab der Zeile ihres Eintrage in O:Z vorhanden ist
- die Zahl im Datenbereich zwar vorhanden, aber nicht eingefärbt ist

Trage das Ergebnis in AN in der Zeile mit den 3 Markierungen ein und finde die nächste Zeile, weiter am Anfang

Anmerkung:
Die verwendeten Zahlen und ihre Position im Quellbereich werden anhand ihres ersten Auftretens im Quellbereich vom Ende, also der höchsten Zeilennummer im Quellbereich, zum Anfang, also der niedrigsten Zeilennummer im Quellbereich, ermittelt und in die Liste / Collections aufgenommen.
Das beeinflusst dann auch die Feststellung, ob eine Zahl im Quellbereich anders gefärbt ist als die Grundfarbe oder nicht. Bewertet wird nur, wie sie bei Aufnahme in die Liste aussieht.
Ein Bereich in diesem Sinne ist immer der durch eine Zeile mit 3 markierten Zahlen im Datenbereich D:I bzw. die darüber liegende Zeile begrenzte Bereich bis zur Zeile 1.

In meiner Lösung ermittle ich nacheinander die jeweiligen Zeilen mit min. 3 Markierungen. Wenn ich eine solche Zeile gefunden habe, übergebe ich die Zeilennummer an meine Zählfunktion. Darin baue ich bezogen auf die Zeile die Liste der Zahlen und ihre Position über zwei Collections mit Key's auf. Dadurch verhindere ich Duplikate in der Liste. Und dann vergleiche ich die Collectioneinträge mit den Dateneinträgen im Bereich oberhalb der Trefferzeile, in Abhängigkeit von einem Eintrag in AM. Da ich mit Hilfe der Trefferzeile den Datenbereich einschränke. brauche ich die Zeilen ab der Trefferzeile nicht zu löschen.
Hallo Angelina,

mann, mann, mann.....

Du hast auch mal besser Erklärt, aber ich muss gestehn, es nicht einfach zu erklären.

Andre, ich habe jetzt verstanden, wie gezählt wird. 
Und es ist gar nicht so kompliziert, wie wir uns das gedacht haben. :26:

Wenn wir ein paar Ausdrücke festlegen, dann kann man das besser veranschaulichen.

-Blockanzahl soll der Wert in AM1 sein
-Suchfeld sollen die Spalte D:I sein.
-Dreierzeile sollen die Zeilen sein, bei denen im Suchfeld in einer Zeile drei Zellen farbigen Hintergrund haben.

-Anfangszeile soll die Zeile in D:I sein, in der gerade in O:Z eine Zelle betrachtet wird
-Endzeile soll die Zeile in D:I sein, welche  eine Zeile vor der  Dreierzeile ist!!!!!

Es werden alle Zellen in O:Z betrachtet und es gilt:
1. wenn nicht leer und nicht grau oder gelb, dann wird gezählt.

2. wenn gelb, dann wird im Suchfeld von der Anfangszeile bis zur Endzeile geschaut, ob die Zahl dort enthalten, wenn nicht, dann wird gezählt.

3. wenn grau, dann braucht nicht von der Anfangszeile bis zur Endzeile  gesucht werden!

Hier kommt jetzt der Wert aus AM1 die Blockanzahl ins Spiel.
Man betrachtet im Suchfeld nur die Zeilen von  Endzeile -(Blockanzahl-1) bis Endzeile


Beispiel: Zeile 23 ist eine Dreierzeile. In AM1 steht 5. Dann braucht man nur die Zeilen 19:22 betrachten.
Also solange wir nicht in Zeile 19 angelangt sind, brauchen die grauen Zellen nicht untersucht werden. Ab Zeile 19 geht es wie für Gelb.

Mit anderen Worten grau bedeutet, dass der betrachtete Wert in den nächsten 5 (Blockanzahl) Zeilen ab der betrachteten Zeile auf jeden Fall auftauchen wird.

4. Für die Dreierzeile gilt: alle Zahlen in O:Z in der Dreierzeile werden grundsätzlich gezählt.

5. Alle Zählungen natürlich ohne doppelte.


Nach diesen Erkenntnissen, kann der Code natürlich wesentlich einfacher aufgebaut werden und vor allem arbeitet der dann auch wesentlich schneller.


So Angelina, nun bist Du wieder an der Reihe.

Unten den Code (den gesamten Code!) in ein Modul kopieren und nur zählen1() ausführen. Dann bitte unbedingt  berichten, dass alles richtig ist, und das der Code keinen Wimpernschlag braucht!!!!! :@


Code:
Option Explicit
Public arr()

Sub zählen1()

  Dim i As Long, j As Long, pp As Long
  Dim strgSammlung As String
 
  Application.ScreenUpdating = False
  Columns("AN").ClearContents

  zählen2
  If IsEmpty(arr(0)) Then Exit Sub

  For pp = 0 To Application.Max(Columns("M")) - 1
    For i = 1 To arr(pp)
      For j = 15 To 26
        If Cells(i, j) <> "" Then
            If Cells(i, j).Interior.ColorIndex = 6 Then
              If Application.CountIf(Range(Cells(i, 4), Cells(arr(pp), 9)), Cells(i, j)) = 0 Then
                If InStr(1, strgSammlung, Format(Cells(i, j), "00"), vbTextCompare) = 0 Then strgSammlung = strgSammlung & "#" & Format(Cells(i, j), "00")
              End If
            ElseIf Cells(i, j).Interior.ColorIndex = 15 Then
              If i >= arr(pp) + 2 - Cells(1, 39) Then
                If Application.CountIf(Range(Cells(i, 4), Cells(arr(pp), 9)), Cells(i, j)) = 0 Then
                  If InStr(1, strgSammlung, Format(Cells(i, j), "00"), vbTextCompare) = 0 Then strgSammlung = strgSammlung & "#" & Format(Cells(i, j), "00")
                End If
              End If
            Else
                If InStr(1, strgSammlung, Format(Cells(i, j), "00"), vbTextCompare) = 0 Then strgSammlung = strgSammlung & "#" & Format(Cells(i, j), "00")
            End If
        End If
      Next j
    Next i
    For j = 15 To 26
      If Cells(i, j) <> "" Then
          If InStr(1, strgSammlung, Format(Cells(i, j), "00"), vbTextCompare) = 0 Then strgSammlung = strgSammlung & "#" & Format(Cells(i, j), "00")
      End If
    Next j
    If UBound(Split(strgSammlung, "#")) > 0 Then
      Cells(arr(pp) + 1, 40) = UBound(Split(strgSammlung, "#"))
      Cells(arr(pp) + 1, 14) = Replace(Join(Split(strgSammlung, "#"), ", "), ", ", "", 1, 1)
    Else
      Cells(arr(pp) + 1, 40) = 0
    End If
    strgSammlung = ""
  Next pp
 
  Erase arr
 
  Application.ScreenUpdating = True
 
End Sub

Sub zählen2()

  Dim lngLetzteZeile As Long
  Dim i As Long, j As Long, k As Long, p As Long
 
  Columns("M:N").ClearContents
  lngLetzteZeile = LetzteBeschriebeneZeile(Range("D:I"))
  ReDim arr(0 To 0)
  For i = 1 To lngLetzteZeile
    For j = 4 To 9
      If Cells(i, j).Interior.ColorIndex <> xlColorIndexNone Then
        k = k + 1
      End If
    Next j
    If k >= 3 Then
    ReDim Preserve arr(0 To p)
      arr(p) = i - 1
      p = p + 1
      Cells(i, 41) = k
      Cells(i, 13) = Application.Max(Columns("M")) + 1
      Range(Cells(i, 1), Cells(i, 3)).Interior.ColorIndex = 3
    Else
      Cells(i, 41) = k
    End If
    k = 0
  Next i
 
End Sub

Public Function LetzteBeschriebeneZeile(ByRef rngBereich As Range) As Long
   On Error Resume Next
   LetzteBeschriebeneZeile = rngBereich.Find("*", , xlFormulas, xlWhole, xlByRows, xlPrevious).Row
End Function
Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14