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

UDF anpassen

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UDF anpassen
10.10.2017 16:56:26
Jens
Hallo
eine Anmerkungen.
Es könnte auch die nachfolgenden Spalte sein, falls das einfacher anzupassen wäre.
Deine Ausführungen sind widersprüchlich, ...
10.10.2017 19:36:56
Luc:-?
…Jens!
Du schreibst: In Tabelle2 gebe ich den Schlüssel vor wie die Daten zusammen gestellt werden sollen. Dabei gebe ich den Spaltenname ein.
In Tabelle2 steht {"A"."/"."C"."/"."E"}; deine UDF liefert in F1 aber 1/3/*! Wo ist da die Logik‽ Üblicherweise verkettet man auch stets so, dass das TrennZeichen nur zwischen den tatsächlich verbundenen Werten steht, nicht auch noch am Schluss. Dann müsste eine Leerzelle mit einbezogen wdn. Es muss auch nicht alles Mögliche in eine UDF gesteckt wdn, was in einem konkreten Fall ggf wünschenswert wäre; sie wird dadurch zu speziell und ist anderweitig kaum zu gebrauchen. So etwas kann man uU mit einer SubProzedur machen, falls sich das (durch relativ häufigen Bedarf) auch lohnt; bei einer UDF ist es idR Ressourcen-Ver­schwen­dung, wenn man für jeden SpezialFall eine eigene Version zV stellt (die müssten ja auch alle ordentlich dokumentiert wdn).
* Ich würde 1/3/5 mit dieser Fml erhalten: =MxJoin((A1;C1;E1);"/")
Wenn man eine UDF allgemein genug schreibt, kann man notwendige Auswahlen (wie bei vielen Xl-Fktt) auch direkt in der Fml durch einen Ausdruck (TeilFml)* als Argument der UDF vornehmen. Das ist bei deiner UDF nicht möglich, da du die Argumente auf ZellBereiche festgelegt hast.
* Das würde im 2.Fall 1/4 mit folgd Fml ergeben: =MxJoin(DataSet((A2;C2;E2);"-";-1;;1);"/") Und auch im 1.Fall würde so das genannte Ergebnis erzielt!
Erkennst du den Unterschied…‽
(Wenn unbedingt noch ein / am Ende oder statt Leerzellen erscheinen soll, kann ja der Fml noch ein &"/" nachgesetzt wdn. Bei nur Leerzellen lie­fert DataSet allerdings eine leere Menge, deren Symbol wählbar ist, aber stets zu einem Bezugs- bzw Wert-Fehler in MxJoin führt. Hier müsste also zusätzlich noch WENNFEHLER verwendet wdn.)
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
Aber falls du unbedingt eine Maske verwenden ...
11.10.2017 03:16:16
Luc:-?
…willst, Jens,
geht das natürlich auch, nur prädestiniere ich nicht deine UDF dafür, denn die scheint sich ja nicht an den widersprüchlichen Berei­chen ihrer beiden Argumente zu stören…
 ABCDEFGHIJK
1
123451/3/51/3/1/3/1/3/1/3/5F:=Kette2(Tabelle2!$A$1:$E$1;Tabelle1!A1:E1)12-341//41//1//1/1/4G:=Kette2(Tabelle2!$A$1:$D$1;Tabelle1!A1:E1)-123-/2//2//2//2/2H:{=VJoin(WENN(A1:D1="";"";WENN(A1:D1="-";"";WENN(VSplit("ABCD";"")=Tabelle2!A$1:D$1;A1:D1;Tabelle2!A$1:D$1)));"")}-1-23//3/////3I:{=WECHSELN(VJoin(WENN(A1:D1="";"";WENN(A1:D1="-";"";WENN(VSplit("ABCD";"")=Tabelle2!A$1:D$1;A1:D1;Tabelle2!A$1:D$1)));"");"//";"/")}1234-1/3/1/3/1/3/1/3/1/3J:{=WECHSELN(MaskOn(VJoin(WENN(A1:E1="";"";WENN(A1:E1="-";"";WENN(VSplit("ABCDE";"")=Tabelle2!A$1:E$1;A1:E1;Tabelle2!A$1:E$1)));"");"num");" ";"/")}
2
3
4
5
Trotzdem habe ich in der obenstehenden Tabelle mal deine Argu­mentie­rungs­Vorgabe in Spalten GHI benutzt. In F:G habe ich mei­nen Lösungen in H:J deine UDF mit Daniels Erweiterungen ggüber­gestellt. Daran ist zu sehen, dass das wohl nicht reicht (abge­sehen mal davon, dass ich von solchen speziellen „Eintags­fliegen“-UDFs nichts halte, denn sie sind oft schon beim nächsten ähn­lichen Problem nicht mehr ohne Ände­rungen ver­wend­bar, was nicht der Sinn einer guten UDF ist!).
In H habe ich die GrundFml (für A:D) eingetragen, die folglich dasselbe liefert wie deine UDF in G. In I wdn // auf / reduziert, sonst ist es das Gleiche. In J bin ich von weiteren Eventua­litäten aus­ge­gangen und habe deshalb die voll­ständigen Bereiche benutzt (wie in F). Wie man sehen kann, ergibt sich so eine anders gestaltete Lösung. Letzt­lich musst du aber wissen, was du brauchst.
Ich würde jedenfalls die Lösung in meinem 1.BT bevorzugen, falls es nicht ernsthafte Gründe für die Anwendung einer Ver­ket­tungs­Maske gäbe. Die (2.Fml!) liefert nämlich genau dasselbe Ergebnis wie in J, nur ist sie 1. kürzer und kommt 2. ohne eine Maske aus.
Morrn, Luc :-?
Besser informiert mit …
Anzeige
AW: UDF anpassen
10.10.2017 20:09:28
Daniel
Hi
probiers mal mit dieser kleinen Erweiterung:
...
If T Like "[A-Z]" Or T Like "[A-Z][A-Z]" Then
K = Ketten.Worksheet.Cells(Ketten.Row, T).Text
If K  "-" Then Kette2 = Kette2 & K
else
...
K ist eine zusätzliche Stringvariable, die habe ich eingeführt, weil ich den Wert aus "Ketten.Worksheet.Cells(Ketten.Row, T).Text" ja mehrfach brauche und somit den langen Ausdruck nicht wiederholen muss.
Gruß Daniel
AW: UDF anpassen
11.10.2017 07:37:06
Jens
Hallo Daniel,
Meinst du so? Geht aber nicht ganz. bringt mir einen Fehler.
Wie definiere ich dann K? Was muss ich hierfür als Grundlage in der neuen Formel angeben?

Function Kette2(Vorgabe As Range, Ketten As Range)
Dim Zelle As Range
Dim T As String
Dim K As String
Application.Volatile
For Each Zelle In Vorgabe
T = Zelle.Value
Select Case T
Case "leer"
Kette2 = Kette2 & " "
Case ""
Kette2 = Kette2 & ""
Case Else
If T Like "[A-Z]" Or T Like "[A-Z][A-Z]" Then
K = Ketten.Worksheet.Cells(Ketten.Row, T).Text
If K  "-" Then Kette2 = Kette2 & K
Else
Kette2 = Kette2 & T
End If
End If
End Select
Next
End Function

Anzeige
AW: UDF anpassen
11.10.2017 07:46:36
Jens

Function Kette2(Vorgabe As Range, Ketten As Range)
Dim Zelle As Range
Dim T As String
Application.Volatile
For Each Zelle In Vorgabe
T = Zelle.Value
Select Case T
Case "leer"
Kette2 = Kette2 & " "
Case ""
Kette2 = Kette2 & ""
Case Else
If T Like "[A-Z]" Or T Like "[A-Z][A-Z]" Then
K = Ketten.Worksheet.Cells(Ketten.Row, T).Text
If K  "-" Then Kette2 = Kette2 & K
Else
Kette2 = Kette2 & T
End If
End Select
Next
End Function

So wird der "-" nicht berücksichtigt. Aber es muss jetzt noch die nachfolgende oder davorliegende Spalte in der Verkettung nicht berücksichtigt werden. Dann würde es passen. Aber wie?
Anzeige
AW: UDF anpassen
11.10.2017 08:03:08
Jens
Also mit Spalte meine ich die nächste Spalte in der Vorgabematrix. Nicht in der Basisdatenmatrix
AW: UDF anpassen
11.10.2017 10:19:14
Daniel
das hier liefert jetzt das Ergebnis entsprechend deinen Wünschen, wie du sie in der Beispieldatei gezeigt hast:
Function Kette2(Vorgabe As Range, Ketten As Range)
Dim Zelle As Range
Dim T As String
Dim K As String
'Application.Volatile
For Each Zelle In Vorgabe
T = Zelle.Value
Select Case T
Case "leer"
Kette2 = Kette2 & " "
Case ""
Kette2 = Kette2 & ""
Case Else
If T Like "[A-Z]" Or T Like "[A-Z][A-Z]" Then
K = Ketten.Worksheet.Cells(Ketten.Row, T).Text
If K  "-" Then Kette2 = Kette2 & K
Else
If K  "-" Then Kette2 = Kette2 & T
End If
End Select
Next
End Function
Gruß Daniel
Anzeige
AW: UDF anpassen
11.10.2017 13:27:04
Jens
Super
Besten dank Funktioniert.
AW: UDF anpassen
11.10.2017 16:37:33
Luc:-?
Obwohl bei jeder AW eine Benachrichtigung an die von dir angegebene Mail-Adresse geht, Jens alias Matthias,
geruhst du unhöflicherweise, meine AWen zu ignorieren und beharrst stattdessen auf deiner zweifelhaften Lösung, worin dich Daniel gg alle (Office-Beratungs-)Vernunft auch noch unterstützt…
Du ziehst also eine hier unnötige und ungünstige Verfahrensweise, die auch von MS bei seinen neuesten Fktt wie TEXTVERKETTEN und TEXTKETTE nicht eingesetzt wird, dem Üblichen vor (ohne das zu begründen!), d.h., quasi die (lahme) „Ente“ dem Porsche, trotz Kostenlosigkeit beider. Falls du dich in VBA üben willst, mag das legitim sein, nicht aber die Ignoranz, denn mit der schadest du dir selbst und denen, die mal einen Wust spezieller UDFs von dir „erben“ wdn. Dann schreibe lieber spezielle SubProzeduren, keine UDFs!
Ich hätte dir diesen Text auch per Mail schicken können, was sicher die von Daniel gewohnten hämischen und endlosen Kommen­tare erspart hätte, aber ich bin nicht daran interessiert, dass Ignoranten wie du meine eMail-Adresse erhalten. Auf jeden Fall gibt's von mir keine weitere Hilfe, egal bei welchem künftigen Problem — allein wg deiner Ignoranz, nicht unbedingt deiner Wahl, die hier zugunsten des „Meisters des Trivialen“ ausgefallen ist…
Luc :-?
Anzeige
ROTFL
11.10.2017 18:13:08
Daniel
Damit bliebest du ja auch auf deinem Niveau! :->
11.10.2017 18:56:22
Luc:-?
(Boden)
Luc :-?
AW: Damit bliebest du ja auch auf deinem Niveau! :->
11.10.2017 19:14:55
Daniel
stimmt luc, auf das Verhaltensniveau, das du hier gerade an den Tag legst, möchte ich mich nicht hinabbegeben.
Gruß Daniel
Ach nee, von deinem kann man sich noch ...
14.10.2017 02:56:25
deinem
…„hinabbegeben“, Daniel…‽ :->
Wer sich lachend auf dem Boden wälzt, kann sich schon mal am Fußabtreter stoßen! Aber ansonsten schwingst du dich doch sicher gern durchs Geäst, sonst wären dir Vgle im diesbzgl KörperBereich wohl nicht so naheliegend. Aber die sind unter Primaten nur für M&M (Monkeys & Machos) wichtig, für südamerikanische sogar lebenswichtig (bspw Gorillas stehen da drüber)… :-]
Luc :-?
Und um dir das auszudenken, hast du ...
14.10.2017 06:59:38
Daniel
Volle drei Tage gebraucht?
Anzeige
Und um dir was auszudenken, hast du ...
14.10.2017 12:09:04
 
über 4 Stunden gebraucht?
In der Zeit konnte er nicht 'sündigen', ...
15.10.2017 02:33:46
Luc:-?
…weil schlafend… :->
Ich werde ihn viell noch'n bissken auf AW warten lassen, das beruhigt die Nerven. Lesen werde ich erst, wenn ich ggf auch antworten will (mache ich meist so)…
Gruß, Luc :-?
Kannst du dir vorstellen, dass derartige AWen ...
16.10.2017 23:38:23
Luc:-?
…von dir keinerlei Priorität bei mir haben, Daniel,
ich aber trotzdem mitunter meine AW auf deine künftige schon habe, bevor du überhaupt geantwortet hast? So auch jetzt wieder…! :-]
Alles Weitere konntest du ja schon weiter unten lesen.
Luc :-?
Danke Luc,
17.10.2017 07:22:31
Daniel
Du hast mir jetzt persönlich bestätigt, was ich schon lange vermutet habe und ich weiß jetzt, dass ich mit meiner Einschätzung über dich richtig liege.
Gruß Daniel
Anzeige
Ich sehe zwar keine Notwendigkeit, deine ...
17.10.2017 19:10:35
Luc:-?
…eingebildete Einschätzung meiner Person zu korrigieren, Daniel,
schließlich bist du ja wohl kein Psychologe und kannst dir folglich einbilden was du willst, nutzen wird's dir eh nichts…
Im Übrigen solltest du aber einen solchen aufsuchen, denn ich bemerke bei dir erhöhte Suchtgefahr, leider auch verbunden mit Anflügen von Größenwahn.
Nebenbei, die letzte recht stimmige Ferndiagnose war mE die von AH im WKII durch US-Psychologen und das waren Fachleute… :-]
Luc :-?
Nun Luc, nicht für jede Einschätzung
17.10.2017 19:16:09
Daniel
muss man Psychologe sein.
Manche Dinge sind auch einfach.
Oder eben trivial wie deine Motive... :->> owT
18.10.2017 02:51:13
Luc:-?
:-?
Luc, locker bleiben.
18.10.2017 08:02:05
Daniel
Letztlich ging es mir nur darum, dass ich die Frage, die du mit "Kannst du dir vorstellen...?" im Betreff eingeleitet hast, mit einem klaren: "ja, kann ich mir sehr gut vorstellen." beantworte.
Da musst du jetzt nicht tiefenpsychologisch werden.
Btw, was sind den deine Motive?
Anzeige
"hinabbegeben" geht bei Dir nicht mehr!
14.10.2017 06:22:03
 
 

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige