Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
980to984
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
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zahelnreihen vergleichen, nicht Lotto!

Zahelnreihen vergleichen, nicht Lotto!
27.05.2008 11:14:47
Axel
Hi,
ich habe im Archiv leider nicht die Lösung für meine Herausforderung gefunden.
Ich habe in Spalte A Zahlenwerte stehen, in Spalte B die Differenz der Werte zum jeweils vorherigen, die positiv, neutral oder negativ sein kann:
A
1000
1005
1010
995
B
0
5
5
-15
Ich möchte von max 10 Zahlenwerten die Differenz mit den Differenzen aus der Spalte B im gesamten Tabellenblatt vergleichen lassen und zwar nur die Vorzeichen. Also wenn ich 5 Differenzen habe ++0-+, dann soll identifiziert werden, ob irgendwo in Spalte B dieselbe Reihenfolge vorkommt.
Die Treffer könnten farblich markiert werden (z.B. über eine bedingte Formatierung).
Bin für jede Idee dankbar.
Vielen Dank
Axel

32
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahelnreihen vergleichen, nicht Lotto!
27.05.2008 11:17:00
Renee
Hi Axel,
Nur die Anzahl Vorzeichenwechsel oder die Werte der Differenzen? Deine Anforderung ist nicht ganz klar, klar ist aber das eine Beispielmappe entscheidend zum Verständnis der Aufgabe beitragen würde.
GreetZ Renée

AW: Zahelnreihen vergleichen, nicht Lotto!
27.05.2008 11:28:00
Axel
Hi Renée,
danke für Deine schnelle Antwort.
Nein nicht die Anzahl Vorzeichenwechsel sondern die Vorzeichenreihenfolge will ich identifizieren. Wenn ich bei den 5 Werten, von denen ich die Vorzeichen vergleichen will ++0-+ als Ergebnis habe, will ich im Tabellenblatt suchen, ob irgendwo in der Spalte B auch die Vorzeichenfolge ++0-+ (also von oben nach unten gelesen) vorkommt.
Ich habe noch keine Mappe angelegt, weil ich erst einmal herausfinden will, ob das mit Excel überhaupt geht.
Hilft es Dir, wenn Du beispielhaft die obigen Zahlen mal in Excel eingibst? Dann hast Du in Spalte B von oben nach unten die Vorzeichen ++- stehen (ab B2). Ich stelle mir das so vor, dass ich in einem anderen Tabellenblatt 10 Eingabefelder habe, in die die Werte kommen, dahinter die Differenzen errechnet werden. Dann brauche ich eine Schaltfläche "Suche" oder so ähnlich, hinter der vielleicht ein Makro liegt.
Ich bin überfragt, ob das möglich ist, wie ich es mir vorstelle.
Hilft Dir das?
Axel

Anzeige
AW: Zahelnreihen vergleichen, nicht Lotto!
27.05.2008 11:30:00
Renee
Hi Axel,
Hilft es Dir, wenn Du beispielhaft die obigen Zahlen mal in Excel eingibst?
Nein das hilft mir nicht. Wieso soll ich eine Mappe bauen, wenn du es nicht kannst.
Ich kann sie gar nicht so bauen, wie du es erwartest, weil ich (z.B. Glück) nicht in dein Gehirn sehen kann ;-)
GreetZ Renée

AW: Zahelnreihen vergleichen, nicht Lotto!
27.05.2008 11:43:00
Axel
Hi Renée,
nein Du sollst keine Mappe bauen. Vielleicht haben wir uns misverstanden.
Ich habe hier leider kein Screenshotprogramm für Excel und weiss auch nicht, wie ich eine Excelmappe anhängen kann.
Also exemplarisch für ein Tabellenblatt 2:
Spalte A von oben nach unten:
1000
1005
1010
995
990
1000
In Spalte B stünde dann folgendes (ab B2):
+5
+5
-15
-5
+10
Dann hätte ich im Tabellenblatt 1 10 Felder (A1-A10), in die ich Zahlenwerte eingebe (z.B. 5000, 5020, 5010, 5015...) und in Spalte B würden die Differenzen ausgerechnet stehen (ab B2: +20, -10, +5...)
Dann möchte ich feststellen, ob in der Spalte B des Tabellenblattes 2 irgendwo untereinander die Vorzeichenfolge +-+ erscheint. Dafür benötige ich eine Vergleichmöglichkeit.
Ich hoffe das hilft Dir weiter.
Vielen Dank
Axel

Anzeige
AW: Hier der Link...
27.05.2008 12:11:21
David
Ich denke mal, ich weiß was er meint. Ich würde das über 2 Hilfsspalten realisieren.
Schau dir das mal an:
https://www.herber.de/bbs/user/52646.xls
Leider weiß ich nicht, mit welcher Funktion man eine Matrix innerhalb einer anderen Matrix suchen kann (VERGLEICH und SVERWEIS gingen nicht, oder ich hatte die falsche Syntax), wenn es die gibt, gehts sicher noch einfacher.
Gruß
David

Anzeige
AW: Hier der Link...
27.05.2008 12:19:41
Axel
Hi David,
danke für Deine Antwort. Das ist es noch nicht so ganz. Ich habe eine Mappe hochgeladen, die hoffentlich aussagekräftig ist.
Vielen Dank schon mal, dass Du Dich kümmerst.
Gruß
Axel

AW: Hier der Link...
27.05.2008 12:25:48
David
es fehlt noch die Info, wieviel aufeinanderfolgende Elemente verglichen werden sollen...

AW: Hier der Link...
27.05.2008 13:00:00
Axel
Ist es möglich, zwischen 5 und 10 Elemente zu vergleichen oder muss eine bestimmte Anzahl festgelegt werden? Für den zweiten Fall schlage ich 6 Elemente vor, deren Reihenfolge verglichen werden soll.
Vielen Dank
Axel

Anzeige
Für + - + funktioniert das so
27.05.2008 13:18:00
WF
Hi Axel,
soundso oft kommt diese Vorzeichenfolge vor:
=SUMMENPRODUKT((A2:A100>A1:A99)*(A3:A101<A2:A100)*(A4:A102>A3:A101))
Salut WF

AW: Für + - + funktioniert das so
27.05.2008 13:25:00
Axel
Danke für die Info. Ich melde mich später zum Thema, muss etwas Eiliges erledigen.

AW: Hier der Link...
27.05.2008 14:44:00
Axel
Hi Renée,
Danke für den Lösungsvorschlag. Dazu habe ich Verständnisfragen:
Die 4 in der Zelle E3 bedeutet, dass 4 Übereinstimmungen gefunden wurden, oder? Ich möchte gerne die Stellen im Tabellenblatt "Datenbasis" farblich hervorheben lassen.
Ich habe die Formel übertragen in meine Datei, bekomme aber kein Ergebnis, sondern #NAME?
Was muss ich noch machen?
Du hattest im ersten Tabellenblatt in der Spalte B zwei Zahlen manuell eingefügt und nicht die Differenz errechnen lassen. Was ist der Hintergrund?
Vielen Dank schon mal. Ich denke, wir kommen der Lösung näher.
Axel

Anzeige
AW: Hier der Link...
27.05.2008 14:52:00
Renee
Hi Axel,
Die 4 in der Zelle E3 bedeutet, dass 4 Übereinstimmungen
NEIN. Die 4 bedeutet das nach 4 aufeinanderfolgenden Vorzeichen aus dem Source-Bereich im Zielbereich gesucht wird. Verändere die Zahl und du siehst was mit dem Resultat passiert.
Ich möchte gerne die Stellen im Tabellenblatt "Datenbasis" farblich hervorheben lassen.
Das geht leider nicht mit einer UDF. Dann müsste das Ganze auf eine Prozedur umgeschrieben werden, aber dann muss auch die genaue Struktur deiner Zielmappe bekannt sein!
Ich habe die Formel übertragen in meine Datei, bekomme aber kein Ergebnis, sondern #NAME?
Du hast nicht den VBA-Code im Modul meiner Beispielmappe übertragen.
...der Spalte B zwei Zahlen manuell eingefügt...
Ich hab nur rumgespielt. Das war zum Testen. Was immer du in Source/Zielbereich schreiben willst, mach es.
GreetZ Renée

Anzeige
AW: Hier der Link...
27.05.2008 15:02:00
Axel
Hi Renée,
alles klar, jetzt komme ich zurecht. Danke vielmals für Deine Hilfe. Jetzt werde ich mal eine Menge Daten in die Tabellen pumpen und mal schauen, wie sich das in der Praxis bewährt. Was passiert, wenn mehrere Übereinstimmungen gefunden werden? Ich werde es sehen.
Darf ich bei Fragen erneut auf Dich zukommen?
Viele Grüße
Axel

AW: Hier der Link...
27.05.2008 15:20:18
Axel
Hi Renée,
ich habe mal 2500 Zahlenwerte eingefügt und bekomme jeweils 1 Ergebnis. Was muss gemacht werden, damit alle Übereinstimmungen angezeigt werden?
Auf jeden Fall funktioniert das, was Du gebastelt hast super!
Danke
Axel

Anzeige
AW: Hier der Link...
27.05.2008 15:41:00
Renee
Hi Alex,
Wenn sehr viele Übereinstimmungen auftreten, hat das Resultat u.U. nicht mehr in einer Zelle Platz:

Public Function SignComparison(rSource As Range, rTarget As Range, iNumber As Integer) As  _
String
'   Compares a consecutive number (iNumber) of the Signs (+,0,-)
'   of an inputrange (rSource) with a targetrange (rTarget)
'   Result: cell-range of source(s) and cell-range of target(s)
Application.Volatile
Dim arrSource(), arrSrcPart(), arrTarget()
Dim ixT As Integer, ixS As Integer, ixP As Integer
Dim bDone As Boolean
arrSource = rSource
arrTarget = rTarget
ReDim arrSrcPart(1 To iNumber)
For ixS = 1 To UBound(arrSource, 1) - UBound(arrSrcPart) + 1
For ixP = 1 To UBound(arrSrcPart)
arrSrcPart(ixP) = arrSource(ixS + ixP - 1, 1)
Next ixP
For ixT = 1 To UBound(arrTarget, 1)
bDone = False
For ixP = 1 To UBound(arrSrcPart)
bDone = (Format(arrSrcPart(ixP), """+"";""-"";0") = _
Format(rTarget(ixT + ixP - 1, 1), """+"";""-"";0"))
If Not bDone Then Exit For
Next ixP
If bDone Then _
SignComparison = SignComparison & IIf(Len(SignComparison) = 0, "", Chr(10)) & _
ActiveSheet.Cells(rSource.Row + ixS - 1, _
rSource.Column).Address(0, 0) & ":" & _
ActiveSheet.Cells(rSource.Row + ixS + iNumber - 2, _
rSource.Column).Address(0, 0) & _
" = " & rTarget.Worksheet.Name & "!" & _
ActiveSheet.Cells(rTarget.Row + ixT - 1, _
rTarget.Column).Address(0, 0) & ":" & _
ActiveSheet.Cells(rTarget.Row + ixT + iNumber - 2, _
rTarget.Column).Address(0, 0)
Next ixT
Next ixS
If Len(SignComparison) = 0 Then SignComparison = "Keine Übereinstimmung"
End Function


GreetZ Renée

Anzeige
AW: Hier der Link...
28.05.2008 09:49:00
Axel
Guten Morgen Renée,
ich habe mich gestern und heute mit Deiner Lösung beschäftigt. Was Du da gezaubert hast, ist in meinen Augen echt beachtlich!
Mitlerweile habe ich 62525 Daten im Tabellenblatt "Datenbasis". Ich kann in der Zelle E4, wo Du die UDF hinterlegt hast, nur bis ca 30000 gehen. Wie kann ich den Suchrahmen auf alle Zellen erweitern?
Vielen Dank schon mal
Axel

UDF Vorzeichenvergleich, vereinfacht
28.05.2008 11:14:24
Renee
Hi Axcel,
Ja das ist halt, wenn man schnell was zusammenfrickelt. Integer statt Longwerte führt halt zu solchen Fehlern, dabei predige ich genau das im Forum... ;-)
Ich hab jetzt die UDF ein bisschen umgeschrieben.
Angenommen du hast einen Bereich B5:B15 mit den Quellwerten und willst in den Zielwerten (z.B. C2:C50000) alle Übereinstimmungen suchen. Die Adressen der Übereinstimmung sollen z.b. In D2...Dx stehen. Dann schreibst du in D2 die Formel:
=SignCompare(B$5:B$15;D$2:D$50000;ZEILE()-1)
Quell- und Zielbereich sind klar ? oder..
Der letzte Parameter ist optional und gibt an welche Übereinstimmung du sehen willst (Default =1).
Da im Beispiel die Formel in D2 steht, bedeutet ZEILE()-1 in D2 die erste Übereinstimmung.
Wenn du die Formel nun runterkopierst, erhälst du für D3 die zweite und für D4 die dritte etc... bis"Keine Übereinstimmung" mehr kommt.
Zu deinem Verständnis, eine UDF funktioniert wie ein 'normale' Excelformel (z.B. SUMME) und hat nichts mit der Zelle in der sie steht zu tun. D.h. du klickst das = (Gleichheitszeichen) in der Bearbeitungsleiste und schreibst SignCompare( und schon springt der Formel-Assistent an. Damit bestimmst du die Bereiche.
Und hier der modifizierte Code:

Public Function SignCompare(rSource As Range, rTarget As Range, Optional lMatchNr As Long = 1)  _
As Variant
'   Compares the Signs (+,0,-)
'   of an inputrange (rSource) with a targetrange (rTarget)
'   lMatchNr determines the which match is returned on multiple matches
'   Result:  address of cell-range of targetrange
'            that match the signs of the inputrange
Application.Volatile
Dim arrSource(), arrTarget()
Dim ixT As Long, ixS As Long
Dim lMatchCount As Long
Dim bDone As Boolean
arrSource = rSource
arrTarget = rTarget
For ixT = 1 To UBound(arrTarget, 1) - UBound(arrSource, 1) + 1
bDone = False
For ixS = 1 To UBound(arrSource, 1)
bDone = (Format(arrSource(ixS, 1), """+"";""-"";0") = _
Format(arrTarget(ixT + ixS - 1, 1), """+"";""-"";0"))
If Not bDone Then Exit For
Next ixS
If bDone Then
lMatchCount = lMatchCount + 1
If lMatchNr = lMatchCount Then
SignCompare = IIf(Len(SignCompare) = 0, "", SignCompare & Chr(10)) & _
rTarget.Worksheet.Name & "!" & _
rTarget.Worksheet.Cells(rTarget.Row + ixT - 1, _
rTarget.Column).Address(0, 0) & ":" & _
rTarget.Worksheet.Cells(rTarget.Row + ixT + UBound(arrSource, 1) - 2, _
rTarget.Column).Address(0, 0)
Exit Function
End If
End If
Next ixT
If Len(SignCompare) = 0 Then SignCompare = "Keine Übereinstimmung"
End Function


PS: Wenn du den Code in eine Modul der Personl.xls kopierst, steht die Formel (Funktion) in allen Arbeitsmappen automatisch zur Verfügung.
GreetZ Renée

Anzeige
AW: UDF Vorzeichenvergleich, vereinfacht
28.05.2008 11:17:00
Renee
Axcel,
kleiner Nachtrag, der dritte Parameter gibt also nicht mehr an, wie gross der Bereich der Vorzeichen ist.
Der Bereich der Vorzeichen ist jetzt allein durch die Grösse (Anzahl) des Quellbereichs definiert. Alles klar ?
GreetZ Renée

AW: UDF Vorzeichenvergleich, vereinfacht
28.05.2008 11:28:20
Axel
OK, habe soweit alles verstanden, denke ich auf den ersten Blick. Bin heute nicht so oft an meinem Platz, viel unterwegs, werde mir aber heute mal alles in Ruhe anschauen und melde mich dann wieder bei Dir.
Ich habe mal versucht, mehr als 10 zu vergleichen (bis 20) , aber Ausgabe ist immer 10.
Also bis später und schon mal wieder vielen Dank, weil das ist echt sehr fett, was Du da gebastelt hast!!!

AW: UDF Vorzeichenvergleich, vereinfacht
28.05.2008 12:18:38
Renee
Axel,
Ein Beispiel mit der Anwendung der Formel in verschiedenen Ausprägungen.
Schau dir die gelb-hinterlegten Formeln an. Alle beruhen auf der UDF
signCompare(Quellbereich; Zielbereich;, [VergleichNr])
https://www.herber.de/bbs/user/52668.xls
GreetZ Renée

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 10:25:58
Axel
Guten Morgen Renée,
vielen Dank für die vielen Beispiele. Mitlerweile klappt bei mir das nicht mehr, was ich will.
In der letzten Datei 52668 fehlt die Auswahl der zu vergleichenden Zeichenfolgen (Feld E3 in der 52649). Ich weiss nicht, ob das VBA Skript aus der 52668 trotzdem funktioniert und ich nur die Formel umstellen muss.
Ich habe eine Datei mit Daten befüllt und dort steht in der Zelle F4: =SignCompare(B4:B15;Datenbasis!B3:B62545;F3). Wenn ich aus der Zelle gehe, erscheint dort allerdings #NAME?
Ich habe folgendes VBA Skript dort eingefügt:

Public Function SignComparison(rSource As Range, rTarget As Range, iNumber As Integer) As _
String
'   Compares a consecutive number (iNumber) of the Signs (+,0,-)
'   of an inputrange (rSource) with a targetrange (rTarget)
'   Result: cell-range of source(s) and cell-range of target(s)
Application.Volatile
Dim arrSource(), arrSrcPart(), arrTarget()
Dim ixT As Integer, ixS As Integer, ixP As Integer
Dim bDone As Boolean
arrSource = rSource
arrTarget = rTarget
ReDim arrSrcPart(1 To iNumber)
For ixS = 1 To UBound(arrSource, 1) - UBound(arrSrcPart) + 1
For ixP = 1 To UBound(arrSrcPart)
arrSrcPart(ixP) = arrSource(ixS + ixP - 1, 1)
Next ixP
For ixT = 1 To UBound(arrTarget, 1)
bDone = False
For ixP = 1 To UBound(arrSrcPart)
bDone = (Format(arrSrcPart(ixP), """+"";""-"";0") = _
Format(rTarget(ixT + ixP - 1, 1), """+"";""-"";0"))
If Not bDone Then Exit For
Next ixP
If bDone Then _
SignComparison = SignComparison & IIf(Len(SignComparison) = 0, "", Chr(10)) _
& _
ActiveSheet.Cells(rSource.Row + ixS - 1, _
rSource.Column).Address(0, 0) & ":" & _
ActiveSheet.Cells(rSource.Row + ixS + iNumber - 2, _
rSource.Column).Address(0, 0) & _
" = " & rTarget.Worksheet.Name & "!" & _
ActiveSheet.Cells(rTarget.Row + ixT - 1, _
rTarget.Column).Address(0, 0) & ":" & _
ActiveSheet.Cells(rTarget.Row + ixT + iNumber - 2, _
rTarget.Column).Address(0, 0)
Next ixT
Next ixS
If Len(SignComparison) = 0 Then SignComparison = "Keine Übereinstimmung"
End Function


Bitte verzeih mir, wenn ich Dich wieder damit nerve. Ich denke, ich habe da irgendetwas zusammenkopiert, was nicht zusammen gehört.
Kannst Du mir noch ein letztes mal helfen bitte?
Danke schon mal
Axel

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 10:37:12
Renee
Hi Axel,
Wenn du das neue Script verwenden willst, muss du auch dieses (und nicht das alte) kopieren:
Also:

Public Function SignCompare(rSource As Range, _
rTarget As Range, _
Optional lMatchNr As Long = 1) As Variant
'   Compares the Signs (+,0,-)
'   of an inputrange (rSource) with a targetrange (rTarget)
'   lMatchNr determines the which match is returned on multiple matches
'   Result:  address of cell-range of targetrange
'            that match the signs of the inputrange
Application.Volatile
Dim arrSource(), arrTarget()
Dim ixT As Long, ixS As Long
Dim lMatchCount As Long
Dim bDone As Boolean
arrSource = rSource
arrTarget = rTarget
For ixT = 1 To UBound(arrTarget, 1) - UBound(arrSource, 1) + 1
bDone = False
For ixS = 1 To UBound(arrSource, 1)
bDone = (Format(arrSource(ixS, 1), """+"";""-"";0") = _
Format(arrTarget(ixT + ixS - 1, 1), """+"";""-"";0"))
If Not bDone Then Exit For
Next ixS
If bDone Then
lMatchCount = lMatchCount + 1
If lMatchNr = lMatchCount Then
SignCompare = IIf(Len(SignCompare) = 0, "", SignCompare & Chr(10)) & _
rTarget.Worksheet.Name & "!" & _
rTarget.Worksheet.Cells(rTarget.Row + ixT - 1, _
rTarget.Column).Address(0, 0) & ":" & _
rTarget.Worksheet.Cells(rTarget.Row + ixT + UBound(arrSource, 1) - 2, _
rTarget.Column).Address(0, 0)
Exit Function
End If
End If
Next ixT
If Len(SignCompare) = 0 Then SignCompare = "Keine Übereinstimmung"
End Function


Die Beispieldatei ist mit diesem aufgebaut. Alt-F11 für VBE und den Code im Modul anschauen (kopieren)!
GreetZ Renée

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 10:55:00
Axel
Hi Renée,
ich habe das Script reinkopiert, hat aber keine Änderung herbeigeführt. Obwohl ich bis auf wenige Zeilen alle Daten gelöscht habe, hat die Datei 2,67 MB und somit kann ich sie nicht hochladen.
Wo liegt der Fehler? (sitzt wahrscheinlich vor dem Rechner ;-)
Axel

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 11:06:00
Renee
Hi Axel,
Ich habe im Post für das neue Script zu erklären versucht, dass es anders funktioniert.
Bei dieser Funktion kann man nicht mehr angeben, wieviele Zeichen aus der Quelle man vergleichen will. Das ist m.E. auch nicht sehr sinvoll. Es werden jetzt immer alle Zeichen aus der Quelle verglichen, d.h. je nachdem, wie gross man diese wählt, kann die Zeichenfolge 'beliebig' klein/gross sein.
Der letzte Parameter der Funktion hingegeben gibt an, welches Resultat aus den Vergleichen (wenn mehrere zutreffen) man in der Zelle angezeigt haben will. Studier nochmal den Post und die Beispielmapppe.
GreetZ Renée

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 11:39:00
Axel
Hi Renée,
jetzt weiss ich, woran es liegt:
Das Script in Deiner Antwort vom 27.05. 15:41 hatte bei 32500 Datensätzen Schluss gemacht. Daraufhin hast Du das Script und die Formel in Deiner Antwort vom 28.05. 11:14 überarbeitet, so dass nun alle Zeilen der Datenbasis berücksichtigt wurden bei der Suche nach Übereinstimmungen, dafür aber nicht mehr die Anzahl der Vorzeichenreihenfolge vorgegeben werden konnte.
Das ist für mich schon wichtig. Optimal wäre die Lösung: das Script von Deiner Antwort vom 27.05. 15:41 und alle 62525 Zeilen werden berücksichtigt. Oder geht das nicht?
Und noch einmal zum Verständins bei der Formel =SignCompare(B$4:B$13;Datenbasis!B$2:B$50000;ZEILE()-1) Wenn ich diese runterkopiere, mus ich dann die -1 in -2, -3 usw ändern Oder muss ich etwas zwischen die Klammern schreiben?
Danke
Axel

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 11:49:33
Renee
Hi Axel,
Wenn du mit dem alten arbeiten willst, ändere alle
Dim variable As Integer in Dim variable As Long, dann müsste es alle Zeilen berücksichtigen.
Für die ZEILE()-1 funktioniert das, wenn die Formel ab Zeile 2 eingesetzt wird. Sie kann dann ohne Anpassung nach unten kopiert werden.
GreetZ Renée

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 12:10:48
Axel
Renée, ich kriegs nicht hin. Habe nun folgendes Script am Start:

Public Function SignComparison(rSource As Range, rTarget As Range, iNumber As Integer) As _
String
'   Compares a consecutive number (iNumber) of the Signs (+,0,-)
'   of an inputrange (rSource) with a targetrange (rTarget)
'   Result: cell-range of source(s) and cell-range of target(s)
Application.Volatile
Dim arrSource(), arrSrcPart(), arrTarget()
Dim ixT As Long, ixS As Long, ixP As Long
Dim bDone As Boolean
arrSource = rSource
arrTarget = rTarget
ReDim arrSrcPart(1 To iNumber)
For ixS = 1 To UBound(arrSource, 1) - UBound(arrSrcPart) + 1
For ixP = 1 To UBound(arrSrcPart)
arrSrcPart(ixP) = arrSource(ixS + ixP - 1, 1)
Next ixP
For ixT = 1 To UBound(arrTarget, 1)
bDone = False
For ixP = 1 To UBound(arrSrcPart)
bDone = (Format(arrSrcPart(ixP), """+"";""-"";0") = _
Format(rTarget(ixT + ixP - 1, 1), """+"";""-"";0"))
If Not bDone Then Exit For
Next ixP
If bDone Then _
SignComparison = SignComparison & IIf(Len(SignComparison) = 0, "", Chr( _
10)) & _
ActiveSheet.Cells(rSource.Row + ixS - 1, _
rSource.Column).Address(0, 0) & ":" & _
ActiveSheet.Cells(rSource.Row + ixS + iNumber - 2, _
rSource.Column).Address(0, 0) & _
" = " & rTarget.Worksheet.Name & "!" & _
ActiveSheet.Cells(rTarget.Row + ixT - 1, _
rTarget.Column).Address(0, 0) & ":" & _
ActiveSheet.Cells(rTarget.Row + ixT + iNumber - 2, _
rTarget.Column).Address(0, 0)
Next ixT
Next ixS
If Len(SignComparison) = 0 Then SignComparison = "Keine Übereinstimmung"
End Function


und folgende Formel: =SignComparison(B4:B13;Datenbasis!B4:B62525;E3)
Als Ergebnis kommt #WERT!

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 13:15:42
Renee
Hi Alex,
Sorry kann auch nicht weiterhelfen. Habs ausprobiert mit ebensovielen Werten. Funktioniert.
Das Problem ist das diese Routine alles in eine Zelle schreibt. Wenn du zuviele Übereinstimmungen hast, dann wird der Inhalt der Zelle zu gross und damit erscheint #WERT. Darum hab ich die verbesserte Version geschrieben, welche nur noch jeweils 1 Resultat pro Zelle ausgibt.
GreetZ Renée

AW: UDF Vorzeichenvergleich, vereinfacht
29.05.2008 14:00:00
Axel
Hi Renée,
Du hast mir sehr weitergeholfen. Vielen Dank auch für Deine Geduld. Deine Antworten waren wertschätzend und kompetent. Ich habe jetzt Deine Datei 52668 als Basis genommen. Das funktioniert auf jeden Fall. Die Berechnungen dauern halt, aber wenigstens bekomme ich Ergebnisse.
Also nochmals vielen Dank für alles.
Gruß
Axel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige