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

Interessenten-Info zum WE

Interessenten-Info zum WE
05.08.2016 04:22:21
Luc:-?
Morrn, Folks;
im Folgenden geht's mir primär um den ZusatzTeil der Aufgabe(n) in untenstehender Tabelle. Weil der sich auf die Daten der LösungsAlternative einer spezifischen Aufgabe lt dieser Anfrage bezieht, habe ich das komplett mit übernommen. Hier kann man dann auch sehen, wie die aktuelle (noch unveröffentlichte) Version1.5 der UDF VSplit bei unter­schied­licher Argumen­tierung im Zusammenspiel mit MaskOn arbeitet. in der alternativen Aufgabe zeige ich eine alte, unpubli­zierbare UDF, die den QuellText quasi aus- bzw umrechnet. Einen Teil­Aspekt davon kann man auch mit der letzten Fml erreichen (TxEval mit MaskOn, beide im Archiv):
 PQRSTUVWXYZ
1Textklass LösungUDF-Lösung1UDF-Lösung2UDF-Lösung3Alternative1Alternative2Eigentliche Aufgabe: Extraktion der 1.Zahl
220X3St2020202060 St60Alternative Aufgabe: Berechnung des 1.Zahlwerts
31St11111 St1Formeln (klassisch: excelformeln.de, Fmln 100; VSplit Vs1.5)
40.5ml0,50.50,50.50,5 ml0,5Q2[:Q9]:=VERWEIS(9^9;1*LINKS(WECHSELN(P2;".";",");SPALTE(A1:IQ1)))
510St1010101010 St10R2[:R9]:=VSplit(MaskOn(P2;"zw");;2)
615X1ST1515151515 ST15S2[:S9]:=VSplit(MaskOn(P2;"zw");;1)
70.5g0,50.50,50.50,5 g0,5T2[:T9]:=VSplit(MaskOn(P2;"zw"))
86X0.5ml66663 ml3U2[:U9]:=T2Form(WECHSELN(WECHSELN(P2;"X";"×");".";","))
910X5g1010101050 g50V2[:V9]:=TxEval(MaskOn(WECHSELN(P2;"X";"*");"zw";"*"))
10Abgeleitete Zusatzaufgabe: Auswahl beliebiger60, 10, 15, 50=VJoin(DataSet((V2;V5:V6;V9);"";-2;;1);", ";-1)← singMxFml m.UDFs VJoin 1.4 u. DataSet 1.3
11Zellen u.ihre Verbindung duale MatrixFml m.VJoin60, 10, 50, 15{=WAHL(SPALTE(A1:B1);VJoin(INDEX((V2;V5:V6;V9);ZEILE(A1:A2);1;SPALTE(A1:C1))*1^SPALTE(A1:C1);", ";-2);CFormA(T11;1))}

In der ZusatzAufgabe* zeigt die 1.Fml das Zusammenwirken der UDFs VJoin (Archiv-Vs1.4 ausreichend) und DataSet, die nun in der hier verwendeten Vs1.3 vorliegt. Diese kann jetzt auch unzu­sammen­hängende Bereiche verarbeiten, was VJoin (bisher) nicht kann, weshalb sie hier eingesetzt wurde, um einen von VJoin verarbeit­baren Datenfeld­Vektor zu erzeugen.
Mit der 2.Fml demonstriere ich erneut die Einsatz­Möglichkeiten einer dualen MatrixFml, durch die INDEX hier veranlasst wird, (in Kombination mit dem anschließenden Zusatz) alle Werte zurückzugeben, was mit einer singularen MatrixFml nicht möglich wäre. Die Verwendung von 2 Zellen für die Fml kann man nur an der Fml erkennen, da in HTML alle Zellen, über die sich ein überlanger Text in Xl erstreckt, miteinander verbunden wdn müssen. Die Beson­derheit ist hier, dass per WAHL die Ergebnis­Ausgabe auf die 1. der beiden Zellen beschränkt wird (das alleinige Ergebnis würde sonst durch die Xl-Steuerung verdoppelt wdn), während die 2. hier gleich für die Anzeige der zugrunde­liegenden MatrixFml (per UDF CFormA, die in höheren XlVss durch die neue XlFkt FORMELTEXT ersetzt wdn könnte) genutzt wird, was so wie hier nicht zu einem Zirkel­Bezugs­Fehler führt.
* Diese ist an dieser Aufgabe orientiert.
Sachliche Kommentare sind durchaus erwünscht! ;-)
Gruß + schöWE, Luc :-?
Besser informiert mit …

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bspp für DataSet-Einsatz (Version 1.3)
10.08.2016 13:39:30
Luc:-?
Im letzten Abschnitt tritt ein besonderes Phänomen auf, dass lt roter Anmerkung behandelt wurde:
 ABCDEFGHIJKLMNOPQRSTU
12Menge1Menge2G-MengeV-MengeD-Menge symD-Menge1D-Menge2S-MengeDataSet-Formeln:
13DataSet ohne AuswahlBedingg6 6 4211C14:D18: {=WENN(ZEILE(C1:C5)>MAX(1;ANZAHL(DataSet(A14:A18;B14:B17;2;1;;-1))/2);#NV;DataSet(A14:A18;B14:B17;2;1;;-1))}
140,10,10,10,10,10,20,50,20,50,20,1E14:F18: {=WENN(ZEILE(E1:E5)>MAX(1;ANZAHL(DataSet(A14:A18;B14:B17;;-1;;-1))/2);#NV;DataSet(A14:A18;B14:B17;;-1;;-1))}
150,50,10,50,20,5-00,3-00,3#NV#NVG14:H18: {=WENN(ZEILE(G1:G2)>MAX(1;ANZAHL(DataSet(A14:A18;B14:B17;-2;-1;;-1))/2);#NV;DataSet(A14:A18;B14:B17;-2;-1;;-1))}
160,30,20,3-00,3-0#NV#NV#NV#NV#NVI14:J18: {=WENN(ZEILE(I1:I2)>MAX(1;ANZAHL(DataSet(A14:A18;B14:B17;-1;1;;0)));#NV;DataSet(A14:A18;B14:B17;-1;1;;0))}
170,10,1#NV#NV#NV#NV#NV#NV#NV#NV#NVJ14:K18: {=WENN(ZEILE(J1:J2)>MAX(1;ANZAHL(DataSet(B14:B17;A14:A18;-1;1;;0)));#NV;DataSet(B14:B17;A14:A18;-1;1;;0))}
180,1 #NV#NV#NV#NV#NV#NV#NV#NV#NVK14:L18: {=WENN(ZEILE(K1:K2)>MAX(1;ANZAHL(DataSet(A14:A18;B14:B17;1;-1;;0)));#NV;DataSet(A14:A18;B14:B17;1;-1;;0))}
19DataSet mit AuswahlBedingg >> DFeld16 14 14671          
201,21,21,21,21,21,13,51,13,51,11,2C20:D29: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);2;1;;-1))/2);#NV;DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);2;1;;-1))}
213,51,13,51,13,51,41,71,41,71,4#NVE20:F29: {=WENN(ZEILE(E1:E10)>MAX(1;ANZAHL(DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);;-1;;-1))/2);#NV;DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);;-1;;-1))}
221,71,41,71,41,731,331,33#NVG20:H29: {=WENN(ZEILE(G1:G6)>MAX(1;ANZAHL(DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);-2;-1;;-1))/2);#NV;DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);-2;-1;;-1))}
231,331,331,32,22,72,22,72,2#NVI20:J29: {=WENN(ZEILE(I1:I6)>MAX(1;ANZAHL(DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);-1;1;;0)));#NV;DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);-1;1;;0))}
241,22,22,72,22,701,601,60#NVJ20:K29: {=WENN(ZEILE(I1:I6)>MAX(1;ANZAHL(DataSet(B20:B27*(B20:B27<7);A20:A29*(A20:A29>0,9);-1;1;;0)));#NV;DataSet(B20:B27*(B20:B27<7);A20:A29*(A20:A29>0,9);-1;1;;0))}
252,77,71,601,621212#NVK20:L29: {=WENN(ZEILE(I1:I6)>MAX(1;ANZAHL(DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);1;-1;;0)));#NV;DataSet(A20:A29*(A20:A29>0,9);B20:B27*(B20:B27<7);1;-1;;0))}
261,621212,8#NV#NV#NV#NV#NV          
271,62,8-02,8#NV#NV#NV#NV#NV#NV#NV          
281,2 #NV#NV#NV#NV#NV#NV#NV#NV#NV          
291 #NV#NV#NV#NV#NV#NV#NV#NV#NV          
41-- dito >> diskrete Bereiche (NoErrRange)14 14 12661          
421,21,21,21,21,21,13,51,13,51,11,2C42:D51: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);2;1;;-1))/2);#NV;DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);2;1;;-1))}
433,51,13,51,13,51,41,71,41,71,4#NVE42:F51: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);;-1;;-1))/2);#NV;DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);;-1;;-1))}
441,71,41,71,41,731,331,33#NVG42:H51: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);-2;-1;;-1))/2);#NV;DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);-2;-1;;-1))}
451,331,331,32,22,72,22,72,2#NVI42:J51: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);-1;1;;0)));#NV;DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);-1;1;;0))}
461,22,22,72,22,721,621,62#NVJ42:K51: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet(NoErrRange(B20:B27;;B20:B27<7);NoErrRange(A20:A29;;A20:A29>0,9);-1;1;;0)));#NV;DataSet(NoErrRange(B20:B27;;B20:B27<7);NoErrRange(A20:A29;;A20:A29>0,9);-1;1;;0))}
472,721,621,62,812,812,8#NVK42:L51: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);1;-1;;0)));#NV;DataSet(NoErrRange(A20:A29;;A20:A29>0,9);NoErrRange(B20:B27;;B20:B27<7);1;-1;;0))}
481,62,812,81-0#NV#NV#NV#NV#NV          
491,6#NV#NV#NV#NV#NV#NV#NV#NV#NV#NV          
501,2 #NV#NV#NV#NV#NV#NV#NV#NV#NV          
511 #NV#NV#NV#NV#NV#NV#NV#NV#NV          
63DataSet m.diskreten Bereichen (direkt)6 4 2012C64:D68: {=WENN(ZEILE(C1:C5)>MAX(1;ANZAHL(DataSet((A65;A67);(B64;B66;B68);2;1;;-1))/2);#NV;DataSet((A65;A67);(B64;B66;B68);2;1;;-1))}
640,10,10,20,10,20,3-00,3Ø0,30,2E64:F68: {=WENN(ZEILE(C1:C5)>MAX(1;ANZAHL(DataSet((A65;A67);(B64;B66;B68);;-1;;-1))/2);#NV;DataSet((A65;A67);(B64;B66;B68);;-1;;-1))}
650,210,10,30,1-0#NV#NV#NV#NV0,1G64:H68: {=WENN(ZEILE(C1:C5)>MAX(1;ANZAHL(DataSet((A65;A67);(B64;B66;B68);-2;-1;;-1))/2);#NV;DataSet((A65;A67);(B64;B66;B68);-2;-1;;-1))}
660,30,3-00,2#NV#NV#NV#NV#NV#NV#NVI64:J68: {=WENN(ZEILE(C1:C5)>MAX(1;ANZAHL(DataSet((A65;A67);(B64;B66;B68);-1;1;;0)));#NV;DataSet((A65;A67);(B64;B66;B68);-1;1;;0))}
670,10,1#NV#NV#NV#NV#NV#NV#NV#NV#NVJ64:K68: {=WENN(ZEILE(C1:C5)>MAX(1;ANZAHL(DataSet((B64;B66;B68);(A65;A67);-1;1;;0)));#NV;DataSet((B64;B66;B68);(A65;A67);-1;1;;0))}
68 0,2#NV#NV#NV#NV#NV#NV#NV#NV#NVK64:L68: {=WENN(ZEILE(C1:C5)>MAX(1;ANZAHL(DataSet((A65;A67);(B64;B66;B68);1;-1;;0)));#NV;DataSet((A65;A67);(B64;B66;B68);1;-1;;0))}
69DataSet für Matrizen (über spaltenweise Zerlegung in diskrete Bereiche im Wechsel M1/1,M1/2;M2/1,M2/2)** nur hier Problem bei Erstberechnung → Lösung: Zweitberechnung und dann rückgängig machen!
70Matrix1(M1+M2=18) 18 18 12643          
716,81,26,84,16,84,16,84,16,84,11C71:D80: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);2;1;;-1))/2);#NV;DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);2;1;;-1))}
722,31,22,312,31,32,31,32,31,32,6E71:F80: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);;-1;;-1))/2);#NV;DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);;-1;;-1))}
733,62,63,62,63,61,13,61,13,61,11,7G71:H80: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);-2;-1;;-1))/2);#NV;DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);-2;-1;;-1))}
743,41,73,41,33,42,83,42,83,42,8#NVI71:J80: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);-1;1;;0)));#NV;DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);-1;1;;0))}
7515,911,11-01,2-01,2#NV#NVJ71:K80: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet((A77:A80;B77:B80);(A71:A75;B71:B75);-1;1;;0)));#NV;DataSet((A77:A80;B77:B80);(A71:A75;B71:B75);-1;1;;0))}
76Matrix2 1,21,71,2-05,9-05,9#NV#NVK71:L80: {=WENN(ZEILE(C1:C10)>MAX(1;ANZAHL(DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);1;-1;;0)));#NV;DataSet((A71:A75;B71:B75);(A77:A80;B77:B80);1;-1;;0))}
774,11,12,62,82,6-0#NV#NV#NV#NV#NV          
7811,71,7-01,7-0#NV#NV#NV#NV#NV          
792,61,75,9-05,9-0#NV#NV#NV#NV#NV          
801,32,8#NV#NV#NV#NV#NV#NV#NV#NV#NV          
PgmCode folgt demnächst! Luc :-?
Anzeige
Nachtrag NoErrRange
10.08.2016 13:43:25
Luc:-?
Die UDF NoErrRange ist in Version 1.3 hier zu finden.
Luc :-?
Nachtrag DataSet
12.08.2016 00:00:33
Luc:-?

Public Enum cxSetType: cxSymDiff = -2: cxDiff: cxUnite: cxInterSect: cxCollect: End Enum
Public Enum cxTriState: cxAsUsed = -2: cxTrue: cxFalse: cxCTrue: End Enum
Public Enum xlTriState: xlTrue = -1: xlFalse: xlCTrue: End Enum

Rem Bildet 1 DatenMenge aus 2en nach 5 praxisrelevanten OperationsTypen
'   Arg1/2: 1./2.Menge (ZBereichsBezugs- or Datenfeld-VEKTOR), bde dürf
'   LeerMengg sein, leere Elemtt wdn b.Arg30), fehlt/0 keine Elemtt
'   entfern; Arg5: wahr/±1 horiz ErgebnVekt (wird ggf automat transpon,
'   wn mehrere Zeilen ausgewählt wdn), fehlt/falsch/0 vertVekt aus Ele-
'   mentPaaren bd Mengg (1 Elemt ggf leer, nur Arg3=0/±2); Arg6: fehlt/
'   leer LeerMg|LeerWert=Zeich12|leer (idR 0 gezeigt), 0 LMg|LWt=Ø|#NV,
'   1 LMg|LWt=LeerTxt m.|o.Länge, -1 LMg|LWt=LTx o.Lg|-0 (echte neg 0).
'   Achtung! Verwendet intern WshFct Transpose (MTRANS, ElementeAnzahl-
'   Limitierung!) u.SpezialEnumeratt cxSetType, cxTriState, xlTriState!
'   Hinw1: Fkt kann b.DatFeldern nicht zwischen durch Anwend 1er Beding
'   erzeugter u.ursprgl 0 untscheid, hier ggf LeerTxt or TeilBer vwend!
'   Hinw2: Bei mehreren (untschiedl) Spalten(/Zeilen) d.TeilMengg einer
'   Menge kann uU 2mal-Berechn u.RückgänggMachen d.letzt erforderl wdn!
'   Hinw3(Zähl): -0 idR nicht m.ANZAHL vwendn (ANZ~2 zählt stets alle)!
'   Vs1.3 -LSr:CyWorXxl -cd:20160711 -1pub:h20160713-15 -lupd:20160730t
Function DataSet(Menge1, Menge2, Optional ByVal ErgMengTyp As cxSetType, Optional _
ByVal nurUnikate As xlTriState, Optional ByVal kPaare As Boolean, _
Optional ByVal LeerErsatz As cxTriState = cxAsUsed)
Const ucLeerMalt1 As Long = 0, ucLeerMalt2 As Long = 65279, _
ucLeerMdef As Long = 12, ucLeerMsym As Long = 8709
Dim ik As Integer, ix As Long, iz As Long, erg, ersZ(1) As Variant, _
M1, M2, tEVgl, tM, xEl As Variant, wf As WorksheetFunction
On Error Resume Next: Set wf = WorksheetFunction
If LeerErsatz  cxAsUsed Then LeerErsatz = LeerErsatz Mod 2
ersZ(0) = ChrW(Array(ucLeerMdef, ucLeerMalt1, ucLeerMsym, ucLeerMalt2)(LeerErsatz + 2))
ersZ(1) = Array(Empty, -CDbl(0), CVErr(xlErrNA), "")(LeerErsatz + 2)
nurUnikate = nurUnikate Mod 2: ErgMengTyp = ErgMengTyp Mod 3
If nurUnikate = xlTrue And ErgMengTyp = cxCollect Then ErgMengTyp = cxUnite
kPaare = CBool(ErgMengTyp Mod 2) Or kPaare
If TypeName(Menge1) = "Range" Then
If Menge1.Areas.Count > 1 Then
For Each tM In Menge1.Areas
If IsArray(tM) Then
tM = wf.Transpose(wf.Transpose(tM))
If IsError(LBound(tM, 2)) Then Else tM = wf.Transpose(tM)
If IsError(LBound(tM, 2)) Then Else Exit For
If Not IsEmpty(M1) Then
iz = UBound(M1): ReDim Preserve M1(1 To iz + UBound(tM))
For ix = 1 To UBound(tM): M1(iz + ix) = tM(ix): Next ix
Else: M1 = tM
End If
ElseIf Not IsEmpty(M1) Then
iz = UBound(M1): ReDim Preserve M1(1 To iz + 1): M1(iz + 1) = tM
Else: ReDim M1(1 To 1): M1(1) = tM
End If
Next tM
If Not IsEmpty(tM) Then DataSet = CVErr(xlErrRef): GoTo xx
ElseIf IsArray(Menge1) Then
M1 = wf.Transpose(wf.Transpose(Menge1))
Else: ReDim M1(1 To 1): M1(1) = Menge1
End If
ElseIf Not IsArray(Menge1) Then
ReDim M1(1 To 1): M1(1) = Menge1
Else: M1 = Menge1
End If
If IsError(LBound(M1, 2)) Then Else M1 = wf.Transpose(M1)
If IsError(LBound(M1, 2)) Then Else DataSet = CVErr(xlErrRef): GoTo xx
If CBool(nurUnikate) Then
ix = LBound(M1): ReDim tM(UBound(M1) - ix): ik = Abs(ix = 0): iz = 0
For Each xEl In M1
If wf.Match(xEl, M1, 0) = ix + ik Then tM(iz) = xEl: iz = iz + 1
ix = ix + 1
Next xEl
ReDim Preserve tM(iz - (2 * iz) \ (iz + 1)): M1 = tM
Else: ReDim Preserve M1(UBound(M1) - LBound(M1))
End If
If TypeName(Menge2) = "Range" Then
If Menge2.Areas.Count > 1 Then
For Each tM In Menge2.Areas
If IsArray(tM) Then
tM = wf.Transpose(wf.Transpose(tM))
If IsError(LBound(tM, 2)) Then Else tM = wf.Transpose(tM)
If IsError(LBound(tM, 2)) Then Else Exit For
If Not IsEmpty(M2) Then
iz = UBound(M2): ReDim Preserve M2(1 To iz + UBound(tM))
For ix = 1 To UBound(tM): M2(iz + ix) = tM(ix): Next ix
Else: M2 = tM
End If
ElseIf Not IsEmpty(M2) Then
iz = UBound(M2): ReDim Preserve M2(1 To iz + 1): M2(iz + 1) = tM
Else: ReDim M2(1 To 1): M2(1) = tM
End If
Next tM
If Not IsEmpty(tM) Then DataSet = CVErr(xlErrRef): GoTo xx
ElseIf IsArray(Menge2) Then
M2 = wf.Transpose(wf.Transpose(Menge2))
Else: ReDim M2(1 To 1): M2(1) = Menge2
End If
ElseIf Not IsArray(Menge2) Then
ReDim M2(1 To 1): M2(1) = Menge2
Else: M2 = Menge2
End If
If IsError(LBound(M2, 2)) Then Else M2 = wf.Transpose(M2)
If IsError(LBound(M2, 2)) Then Else DataSet = CVErr(xlErrRef): GoTo xx
If CBool(nurUnikate) Then
ix = LBound(M2): ReDim tM(UBound(M2) - ix): ik = Abs(ix = 0): iz = 0
For Each xEl In M2
If wf.Match(xEl, M2, 0) = ix + ik Then tM(iz) = xEl: iz = iz + 1
ix = ix + 1
Next xEl
ReDim Preserve tM(iz - (2 * iz) \ (iz + 1)): M2 = tM
Else: ReDim Preserve M2(UBound(M2) - LBound(M2))
End If
ix = 0: iz = 0
ReDim erg(IIf(kPaare, UBound(M1) + UBound(M2) + 1, wf.Max(UBound(M1), UBound(M2))))
For Each xEl In M1
If IsEmpty(xEl) Then
If ErgMengTyp = cxCollect Then xEl = ersZ(1) Else GoTo nx
End If
Select Case ErgMengTyp
Case cxSymDiff, cxDiff
If IsError(wf.Match(xEl, M2, 0)) Then erg(ix) = xEl: ix = ix + 1
Case cxUnite, cxCollect
erg(ix) = xEl: ix = ix + 1
Case cxInterSect
If IsError(wf.Match(xEl, M2, 0)) Then Else erg(ix) = xEl: ix = ix + 1
End Select
nx: Next xEl
If ErgMengTyp Mod 2 = 0 Then
If kPaare Then iz = ix
For Each xEl In M2
If IsEmpty(xEl) Then
If ErgMengTyp = cxCollect Then xEl = ersZ(1) Else GoTo nz
End If
Select Case ErgMengTyp
Case cxSymDiff, cxUnite
If IsError(wf.Match(xEl, M1, 0)) Then
If kPaare Then erg(iz) = xEl Else erg(iz) = Array(erg(iz), xEl)
iz = iz + 1
End If
Case cxCollect
If kPaare Then erg(iz) = xEl Else erg(iz) = Array(erg(iz), xEl)
iz = iz + 1
End Select
nz:     Next xEl
If wf.Max(ix, iz) > 0 Then
ReDim Preserve erg(wf.Max(ix, iz) - 1)
Else: ReDim Preserve erg(0)
End If
If Not kPaare Then
If ix > iz Then
For iz = iz To ix - 1
erg(iz) = Array(erg(iz), ersZ(1))
Next iz
ElseIf LeerErsatz > cxAsUsed Then
If ix  cxAsUsed Then
If iz = 0 Then erg(0) = ersZ(1)
End If
ElseIf ix > 0 Then
ReDim Preserve erg(ix - 1)
Else: erg = ersZ(1)
End If
If IsArray(erg) Then
If IsArray(erg(0)) Then
If IsError(erg(0)(0) = erg(0)(1)) Then
DataSet = erg
ElseIf erg(0)(0) = erg(0)(1) Then
tEVgl = erg(0)(0): GoTo vx
Else: DataSet = erg
End If
Else: tEVgl = erg(0): GoTo vx
End If
Else: tEVgl = erg
vx:     Select Case LeerErsatz
Case cxAsUsed
If IsEmpty(tEVgl) Then DataSet = ersZ(0) Else DataSet = erg
Case cxTrue
If tEVgl = ersZ(1) Then DataSet = ersZ(0) Else DataSet = erg
Case cxFalse
If wf.IsNA(tEVgl) Then DataSet = ersZ(0) Else DataSet = erg
Case cxCTrue
If tEVgl = ersZ(1) Then DataSet = ersZ(0) Else DataSet = erg
End Select
End If
ex: If IsError(DataSet) Then GoTo xx
With Application
If kPaare And .ThisCell.HasArray Then
If .Caller.Rows.Count > 1 Then DataSet = wf.Transpose(DataSet)
End If
End With
xx: erg = Empty: M1 = Empty: M2 = Empty: tM = Empty: Set wf = Nothing
End Function
Viel Erfolg & schöWE, Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige