Anzeige
Archiv - Navigation
1148to1152
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

mit einer UDF zwei Bereiche auswerten

mit einer UDF zwei Bereiche auswerten
Peter
Guten Tag
Gerd L hat mir vor einiger Zeit eine super Funktion gezimmert, mit der mit eine UDF die Zellen eines Bereiches zurückgibt, die ausgeblendet sind und in denen Zahlen enthalten sind (vgl. Beispiel hochgeladene Datei).
Nun suche ich eine "ähnliche" Lösung für ein anders gelagertes Problem.
Ausgangslage:
zwei gleich grosse Bereiche (jeweils 1 Spalte und mehrere Zeilen).
Ich sollte auswerten können, auf welcher Zeile im ersten Bereich eine NULL oder nichts steht und gleichzeitig im zweiten Bereich eine Zahl oder ein String, der sich in eine Zahl umwandeln lässt.
Die Problemstellung habe ich ebenfalls in der hochgeladenen Datei illustriert.
Wäre toll, wenn mir da jemand weiterhelfen könnte.
Danke und Gruss, Peter
https://www.herber.de/bbs/user/68776.xls
AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 16:20:59
ChrisL
hi Peter
Viel Spass damit, Formel =peterspezial(Zahl_A)
cu Chris
Public Function PeterSpezial(rng As Range) As String
Application.Volatile
Dim Zelle As Range
Dim strResultat As String
For Each Zelle In rng
If Zelle = 0 And (IsNumeric(Zelle.Offset(0, 1)) And Zelle.Offset(0, 1)  0) Then
If strResultat = "" Then
strResultat = Zelle.Row
Else
strResultat = strResultat & " ¦ " & Zelle.Row
End If
End If
Next
PeterSpezial = strResultat
End Function

AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 16:56:36
Peter
Hallo Chris
Vielen Dank! Das ist super. Ich habe noch eine kleine Anpassung gemacht, damit die Function die aufrufende Tabelle erkennt und ich diese in einem Modul platzieren kann (damit kann ich die Function aus verschiedenen Tabellen innerhalb der gleichen Datei auferufen).
Nun ist es so, dass die Bereiche "Zahl_A" und "Zahl_B" in der Regel nicht in Spalten nebeneinander sind.
Hast du eine Idee, wie ich anstelle mit Offset(0,1) den Bereich "Zahl_B" angesprechen könnte?
Danke und Gruss, Peter
Public Function PeterSpezial(Rng As Range, Dummy As Date) As String
Dim Wks As Worksheet
Dim Zelle As Range
Dim strResultat As String
Set Wks = Rng.Parent
With Wks
For Each Zelle In Rng
If Zelle = 0 And (IsNumeric(Zelle.Offset(0, 1)) And Zelle.Offset(0, 1)  0) Then
If strResultat = "" Then
strResultat = Zelle.Row
Else
strResultat = strResultat & " ¦ " & Zelle.Row
End If
End If
Next
End With
PeterSpezial = strResultat
End Function

Anzeige
AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 17:09:43
ChrisL
Hi Peter
Versuchs mal mit dem Vorschlag von Peter Feustel. Er ermittelt die Spalte aus dem Bereich B mittels Left()
cu
Chris
AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 16:47:55
Peter
Hallo Peter,
versuch es hiermit:
Public Function NullNichts() As String
Dim sSpalte  As String
Dim rZelle   As Range
sSpalte = Left(Range("Zahl_B").Address(0, 0), 1)
For Each rZelle In Range("Zahl_A")
If Trim(rZelle.Value) = "" Or rZelle.Value = 0 Then
If IsNumeric(Range(sSpalte & rZelle.Row).Value) Then
If NullNichts = "" Then
NullNichts = rZelle.Row
Else
NullNichts = NullNichts & "|" & rZelle.Row
End If
End If
End If
Next rZelle
End Function

Aufruf: =NullNIchts()
Gruß Peter
Anzeige
AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 17:08:02
Peter
Hallo Peter
Vielen Dank.
Das hilft mir auch ziemlich weiter. Folgende Probleme bestehen noch: wenn auf einer Zeile sowohl in Bereich1 als auch in Bereich2 eine 0 oder nichts eingetragen ist, soll die entsprechende Zeilennummer nicht zurückgegeben werden.
Im Moment konnte ich mir noch nicht genügend Zeit nehmen, um die Anpassung selbst zu realisieren - falls du dazu gerade eine Lösung hast, wäre das hilfreich.
Zu meinem Verständnis:
Was bewirkt die Zeile
sSpalte = Left(Range("Zahl_B").Address(0, 0), 1)
?
Gruss, Peter
AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 17:28:00
Peter
Hallo Peter,
dann nimm diese Version
Public Function NullNichts() As String
Dim sAdresse As String
Dim iIndx    As Integer
Dim sSpalte  As String
Dim rZelle   As Range
'     die Spalte für den benannten Bereich "Zahl_B" suchen
sAdresse = Range("Zahl_B").Address(0, 0)
For iIndx = 1 To Len(sAdresse)
If IsNumeric(Mid(sAdresse, iIndx, 1)) Then Exit For
If sSpalte = "" Then
sSpalte = Mid(sAdresse, iIndx, 1)
Else
sSpalte = sSpalte & Mid(sAdresse, iIndx, 1)
End If
Next iIndx
For Each rZelle In Range("Zahl_A")
If Trim(rZelle.Value) = "" Or rZelle.Value = 0 Then
If Trim(Range(sSpalte & rZelle.Row).Value)  "" And _
Range(sSpalte & rZelle.Row).Value  0 Then
If IsNumeric(Range(sSpalte & rZelle.Row).Value) Then
If NullNichts = "" Then
NullNichts = rZelle.Row
Else
NullNichts = NullNichts & "¦" & rZelle.Row
End If
End If
End If
End If
Next rZelle
End Function

Da die Zahl_B (auch wenn sie so heißt) nicht neben Zahl_A liegt, wird erstmal gesucht, in welcher Spalte Zahl_B denn zu finden ist.
Gruß Peter
Anzeige
AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 17:26:00
IngGi
Hallo Peter,
jetzt habe ich ne ganze Weile rumgestrickt, da stell ich auch meine Version noch mit rein, obwohl mir gleich 2 Leute nun zuvorgekommen sind. Meine Version berücksichtigt auch die 0 / 0 - Konstellation:
Public Function myUDF(strA As String, strB As String) As String
Dim rngA As Range
Dim rngB As Range
Dim rng As Range
Dim wb As Workbook
Dim na As Name
Dim lngZelle As Long
Dim strAusgabe As String
For Each wb In Application.Workbooks
For Each na In wb.Names
If na.Name = strA Then
Set rngA = na.RefersToRange
Exit For
End If
Next 'na
Next 'wb
If rngA Is Nothing Then
myUDF = "Erster Bereich nicht definiert!"
Exit Function
End If
For Each wb In Application.Workbooks
For Each na In wb.Names
If na.Name = strB Then
Set rngB = na.RefersToRange
Exit For
End If
Next 'na
Next 'wb
If rngB Is Nothing Then
myUDF = "Zweiter Bereich nicht definiert!"
Exit Function
End If
If rngA.Columns.Count > 1 Or rngB.Columns.Count > 1 Then
myUDF = "Nur eine Spalte pro Bereich zulässig!"
Exit Function
ElseIf rngA.Cells.Count  rngB.Cells.Count Then
myUDF = "Die Bereiche sind unterschiedlich groß!"
Exit Function
End If
For lngZelle = 1 To rngA.Cells.Count
If rngA.Cells(lngZelle, 1) = 0 Or rngA.Cells(lngZelle, 1) = "" Then
If IsNumeric(rngB.Cells(lngZelle, 1)) Then
If rngB.Cells(lngZelle, 1)  0 Then
strAusgabe = strAusgabe & rngA.Row + lngZelle - 1 & " ¦ "
End If
End If
End If
Next 'lngZelle
If Len(strAusgabe) > 0 Then
myUDF = Left(strAusgabe, Len(strAusgabe) - 3)
Else
myUDF = "Keine entsprechende Zelle gefunden!"
End If
End Function
Gruß Ingolf
Anzeige
AW: mit einer UDF zwei Bereiche auswerten
25.03.2010 08:53:20
Peter
Hallo Ingolf
Nochmals besten Dank für deine Lösung. Diese enthält noch einige weitere Checks, die ich sehr wertvoll finde. Ich habe noch eine kleine Umstellung versucht, die mir aber - wohl mangels Syntaxverständnis - nicht gelungen ist. Und zwar möchte ich die übergebenen Parameter gerne ohne Anführungszeichen "", also nicht als Strings sondern als Range übergeben.
Ich kann jedoch nicht abschätzen, ob das eine grössere Operation ist.
Gruss, Peter
AW: mit einer UDF zwei Bereiche auswerten
25.03.2010 16:45:00
IngGi
Hallo Peter,
das macht die Sache sogar noch einfacher, da kann man einiges löschen.
Public Function myUDF(Optional rngA As Range = Nothing, _
Optional rngB As Range = Nothing) As String
Dim lngZelle As Long
Dim strAusgabe As String
If rngA Is Nothing Then
myUDF = "Erster Bereich nicht definiert!"
Exit Function
End If
If rngB Is Nothing Then
myUDF = "Zweiter Bereich nicht definiert!"
Exit Function
End If
If rngA.Columns.Count > 1 Or rngB.Columns.Count > 1 Then
myUDF = "Nur eine Spalte pro Bereich zulässig!"
Exit Function
ElseIf rngA.Cells.Count  rngB.Cells.Count Then
myUDF = "Die Bereiche sind unterschiedlich groß!"
Exit Function
End If
For lngZelle = 1 To rngA.Cells.Count
If rngA.Cells(lngZelle, 1) = 0 Or rngA.Cells(lngZelle, 1) = "" Then
If IsNumeric(rngB.Cells(lngZelle, 1)) Then
If rngB.Cells(lngZelle, 1)  0 Then
strAusgabe = strAusgabe & rngA.Row + lngZelle - 1 & " ¦ "
End If
End If
End If
Next 'lngZelle
If Len(strAusgabe) > 0 Then
myUDF = Left(strAusgabe, Len(strAusgabe) - 3)
Else
myUDF = "Keine entsprechende Zelle gefunden!"
End If
End Function
Gruß Ingolf
Anzeige
AW: mit einer UDF zwei Bereiche auswerten
25.03.2010 17:05:48
Peter
Hallo Ingolf
herzlichen Dank! funktioniert einwandfrei.
Gruss, peter
AW: mit einer UDF zwei Bereiche auswerten
24.03.2010 17:32:38
Peter
Hallo an alle geschätzten Antworter
Vielen Dank für den Support. Aus den Beiträgen werde ich meine Lösung ableiten können.
Beste Grüsse, Peter

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige