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

spalten vergleichen und Wert feststellen

spalten vergleichen und Wert feststellen
29.03.2023 14:18:27
Fred


Hallo Excel Experten,
ich bin von letzter Nacht noch so richtig genervt und KO und schon steht neues an:
Mit Resize, Offset und anderen "Strickmustern" habe ich mich schon immer ganz schwer getan, und ist bei der nächsten Lösung wohl angesagt.
Beispiel:
Ich habe 2 Spalten mit Werten
SpA- SpD
20 - 10
22 - 12
28 - 16
29 - 18
30 - 20
SpalteA soll durchlaufen werden und festgestellt werden,
ob jeweiliger Wert 3 Spalten weiter einen Wert findet, der identisch ist oder bis zu einem Unterschied von +2 oder -2 vorkommt.
Wenn Ja, dann 1 --- Wenn Nein, dann 0

Bitte auf das angefügte Beispiel-Sheet schauen:
https://www.herber.de/bbs/user/158497.xlsb

Kann ein Experte bitte mal drauf schauen und mir eine Makro-Lösung anbieten?!

Gruss
Fred

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: spalten vergleichen und Wert feststellen
29.03.2023 14:57:29
Yal
Hallo Fred,

ich kann nicht so richtig nachvollziehen: soll es eine Formel sein oder VBA?
Dazwischen gäbe die User Defined Function: eine in VBA selbst definierte "Excel"-Formel. Solche Function kann man in Excel und in VBA verwenden.

In eine Modul ablegen:
Public Function IstZwischen(ByVal MinWert, ByVal MaxWert, ByVal Bereich As Range) As Long
Dim Z As Range
    For Each Z In Bereich
        If Z.Value >= MinWert And Z.Value = MaxWert Then
            IstZwischen = Z.Row
            Exit Function
        End If
    Next
End Function
Dann kann man in Excel:
=istzwischen(DA2-2;DA2+2;DD$2:DD$6)
oder
=(istzwischen(DA2-2;DA2+2;DD$2:DD$6)>0)*1
Die VBA-Version davon wäre leicht zu haben.

VG
Yal


Anzeige
AW: spalten vergleichen und Wert feststellen
29.03.2023 16:55:22
Fred
Hallo Yal,
vielen Dank für deine Mühe und der UDF,- werde mich sicherlich dem "cleveren" Thema; "selbstgebaute Funktionen" die nächste Zeit nähern.
Eigentlich sollte es eine VBA Lösung sein, aber mit der benutzer definierten Funktion bin ich auch sehr zufrieden. Lasse dann eben mit "FormulaLocal" die Formeln an gewünschter Stelle eintragen (ohne Resize, Offset und anderen "Strickmustern" :-) und wandel in Werte um! - Bekomme ich hin.

Nochmals Vielen Dank für deine zur Verfügung gestellte Kompetenz!

Gruss
Fred


AW: spalten vergleichen und Wert feststellen
29.03.2023 19:32:54
Fred
Hallo Yal,
aufbauend auf deine UDF habe ich mich nun auch dran gemacht. Im Prinzip soll die neue Funktion das gleiche machen, allerdings mit der Änderung, das ähnliche Werte nicht in Spalte DD2:DD6, sondern in DA2:DA6. gesucht werden.
Also:
Deine Formel war:
=(istzwischen(DA2-2;DA2+2;DD$2:DD$6)>0)*1
meine nun:
=(IstZwischen1(DA2-2; DA2+2; DA$2:DA$6)>0)*1
die "neue UDF" mit dem Namen "IstZwischen1" hat den Code:
Public Function IstZwischen1(ByVal MinWert As Double, ByVal MaxWert As Double, ByVal Bereich As Range) As Long
    Dim Z As Range
    For Each Z In Bereich
        If Abs(Z.Value - MinWert) = 2 And Abs(Z.Value - MaxWert) = 2 Then
            IstZwischen1 = Z.Row
            Exit Function
        End If
    Next
    IstZwischen1 = 0
End Function
Leider ist da wohl ein Fehler drinne, das Ergebnis ist immer 1, was falsch ist.
Kannst du mal prüfen und wenn du den Fehler entdeckst, mir bitte bescheid sagen?!

Gruss
Fred


Anzeige
AW: spalten vergleichen und Wert feststellen
29.03.2023 21:46:37
Yal
Hallo Fred,

es ist ncht ein Problem mit Excel, sondern eine logische Frage: wenn Du eine Zelle aus DA2:DA6 mit jede andere Zelle aus DA2:DA6 vergleichst, dann vergleicht sich diese einmal mit sich selbst, daher gibt es immer einen Treffer.
Mit normalen Formel heisst es Zirkelbezug und Excel verweigert die Verarbeitung

Ausserdem hast Du MinWert und MaxWert in Zusammenhang mit DA2 - 2 und DA2 + 2 nicht genau genug angeschaut.

So sieht die Funktion, wenn die übergebene Zelle nicht einbezogen werden darf: die Zelle muss dann als Bezug übergeben werden, also keine +/- 2 dazu. Diese Toleranz muss separat übermittelt werden.

Public Function IstZwischen(ByVal Zelle As Range, ByVal Toleranz As Double, ByVal Bereich As Range) As Long
Dim MinWert As Double
Dim MaxWert As Double
Dim Z As Range

    MinWert = Zelle.Value - Abs(Toleranz)
    MaxWert = Zelle.Value + Abs(Toleranz)
    For Each Z In Bereich
        If Zelle.Address > Z.Address Then
            If Z.Value >= MinWert And Z.Value = MaxWert Then
                IstZwischen = Z.Row
                Exit Function
            End If
        End If
    Next
End Function
VG
Yal

Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige