Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
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

Problem beim joinen

Problem beim joinen
23.07.2016 10:41:45
Udo
Hallo Allerseits,
ich habe in einer Zelle der 1. Registerkarte folgende Formel:
=(joinen(Personal!AW2:AW99;", "))&", "&P26&", "&T26
Hier werden dann alle Namen aufgeführt die in der Registerkarte "Personal" in den Zellen AW2:AW99 stehen sowie die Namen die in der Registerkarte 1 in den Zellen P26 und T26 stehen.
Mein Problem besteht jetzt darin, dass mir der Fehler "#Wert!" angezeigt wird wenn im Tabellenblatt "Personal" keine Namen in den Zellen AW2:AW99 stehen. Durch die Fehlermeldung werden dann auch die Namen in den Zellen P26 und T26 der Registerkarte 1 nicht angezeigt. Diese sollen mir aber angezeigt werden.
Ich hoffe das jemand von Euch eine Lösung für das Problem kennt.
Gruss
Udo

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem beim joinen
23.07.2016 10:44:21
Udo
Sorry, habe den Post versehentlich doppelt abgeschickt. Ich weiß nicht ob und wie ich einen der beiden löschen kann.
AW: Problem beim joinen
23.07.2016 10:44:47
ransi
HAllo Udo,
Das liegt bestimmt an der Funktion =joinen()
Lade doch mal eine abgespeckte Beispieltabelle mit der UDF hoch.
ransi
AW: Problem beim joinen
23.07.2016 10:52:27
Udo
Es liegt definitiv an der Funktion joinen. Selbst wenn ich nur die Formel
=(joinen(Personal!AW2:AW99;", ")) verwende wird der Fehler #WErt! angezeigt wenn in den zellen aw2:aw99 des Tabellenblatts Personal keine Namen eingetragen sind.
Das hochladen einer abgespeckten Version wird etwas schwierig da in der Registerkarte Personal sehr viele Formeln ineinandergreifen und ich nicht einfach einen Teil davon löschen kann ohne das es nur noch so vor Fehlern hagelt. Da die Datei im kompletten über 800 kb groß ist kann ich diese auch nicht komplett hochladen. Ich werde mal versuchen diese zu schrumpfen.
Anzeige
AW: Problem beim joinen
23.07.2016 10:58:29
Hajo_Zi
das Problem kannst nur Du lösen. Da nur wenige Deine Datei sehen und den Hinweis von ransi eine Datei zu verlinken wurde ignoriert.

AW: Problem beim joinen
23.07.2016 10:58:55
ransi
Hallo,
Die Funktion =joinen() ist eine benutzerdefinierte Funktion.
D.h da hat jemnad ein Makro geschrieben.
Den PRogrammcode bräuchten wir.
ICh nutze auch eine Funktion =joinen().
Eine Überprüfung beahndelt den Fall das nur leere Zellen verkettet werden sollen:
' **********************************************************************
' Modul: Verketten Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function joinen(Bereich As Range, Optional Trenner As String = ", ") As String
    Dim strTmp() As Variant
    Dim zellen As Range
    Dim L As Long
    Redim strTmp(Bereich.Cells.Count)
    For Each zellen In Bereich.Cells
        If zellen.Text <> "" Then
            strTmp(L) = zellen.Text
            L = L + 1
        End If
    Next
    If L = 0 Then
        joinen = ""
        Else:
        Redim Preserve strTmp(L - 1)
        joinen = Join(strTmp, Trenner)
    End If
End Function


ransi
Anzeige
AW: Problem beim joinen
23.07.2016 11:08:30
Udo
Ich arbeite noch an der Verkleinerung der Datei, so dass ich diese hochladen kann. Sobald ich es geschafft habe die Datei auf unter 300 kb zu verkleinern lade ich diese hier hoch.
AW: Problem beim joinen
23.07.2016 11:36:42
Udo
So, nach langem hin und her habe ich es jetzt geschafft die Datei zu verkleinern und ich kann diese hier hochladen.
Jetzt noch mal zur Erläuterung:
Wenn ich beispielsweise in den Feldern "FA" Namen aus der Dropdownliste auswähle werden diese im Tabellenblatt "Personal" in der Spalte AW nicht mehr angezeigt und dementsprechend auch im Tabellenblatt "Dienstplan" in der Zelle I34 nicht mehr angezeigt, da hier die Namen aus der Spalte AW des Tabellenblatts Personal über die Funktion joinen angezeigt werden.
Die Namen die in den Dropdownfeldern "Verfüger" im Tabellenblatt ausgwählt werden, werden trotzdem in der Zelle I34 angezeigt.
Egal ob in den beiden Verfügerfeldern jetzt namen ausgewählt wurden oder nicht, sobald in der Spalte AW des Tabellenblatts keine Namen mehr vorhanden sind wird der Fehler "#Wert!" in der Zelle I34 angezeigt. Das sollte nach Möglichkeit nicht so sein, da die Namen aus den beiden Zellen Verfüger nach wie vor angezeigt werden sollen.
Das ganze klingt jetzt sicher sehr verwirrend. Ich bekomme es aber nicht einfacher erklärt. Ich hoffe Ihr blickt durch und könnt mir helfen.
Gruss
Udo
Anzeige
AW: Problem beim joinen
23.07.2016 13:56:07
Udo
Hallo Ransi,
vielen Dank für Deine Hilfe. Die Fehlermeldung ist schon mal verschwunden und die Namen aus den beiden Verfügerzellen werden angezeigt. Allerdings hat sich jetzt ein kleiner anderer Fehler eingeschlichen.
Um es übersichtlicher anzuzeigen habe ich die Namen in die Ziffern 1-9 geändert.
Der Fehler ist folgender:
Wenn ich in einer Zelle anfange und z.B. die "1" auswähle verschwindet diese nicht in der Zelle "Im Frei". Die 1 verschwindet erst wenn ich im nächsten Feld z.B. die "2" eintrage. Jetzt verschwindet natürlich die 2 nicht. Diese verschwindet erst wenn ich die nächste Zelle mit einer Auswahl(3-9) fülle. usw.
https://www.herber.de/bbs/user/107186.xls
Gruss
Udo
Anzeige
Das ist i.W. ein Problem deiner Fml, ...
23.07.2016 17:15:41
Luc:-?
…Udo,
dass durch die mir unverständliche Hinzunahme von P/T26 verursacht wird, wobei die UDF auch zu schleppend reagiert. Mit folgenden Fmln hättest du diese Probleme nicht.
1. MatrixFml mit 1er UDF:
{=VJoin(WAHL(ZEILE(A1:A3);MTRANS(Wachabteilung);WENN(P26="";"";P26);WENN(T26="";"";T26));", ";-1)}
2. NormalFml mit 3 UDFs:
=VJoin(DataSet(Wachabteilung;VSplit(P26&" "&T26;;1);2;;1);", ";-1)
Alle UDFs sind im Archiv zu finden. Letztpublizierte Versionen sind:
1.4 (VJoin, nur in hochgeladenen BspDateien!), 1.1 (VSplit), 1.2 (DataSet)
Falls du dich für 1. entscheiden solltest, müsstest du entweder den ZellVerbund aufheben oder die VerbundZelle nachträglich durch FormatÜbertragung einer MusterZelle mit dem FormatPinsel erzeugen.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Das ist i.W. ein Problem deiner Fml, ...
23.07.2016 20:12:25
Udo
Hallo Luc,
vielen Dank für Deine Antwort und Deine Hilfe.
leider merke ich an Deiner Antwort mal wieder was für eine Nullnummer ich dann doch in Sachen Excel bin. Das was Du geschrieben hast hört sich ja wirklich gut an, nur leider blicke ich von vorne bis hinten nicht durch :-) Das hört sich für mich in etwa so an als würdest Du chinesisch mit mir sprechen.
Das einzige was ich Dir erklären kann ist die Dir unverständliche Hinzunahme von P/T26:
In den Feldern P/T26 muss immer je ein Name eingetragen werden. Diese beiden Namen verschwinden dann automatisch auf der Registerkarte "Personal" in der Spalte AW. Somit werden diese Namen dann auch mit der joinen Funktion nicht mehr im Tabellenblatt "Dienstplan" aufgeführt.
Diese beiden Namen in P/T26 müssen aber aufgeführt werden. Daher habe ich diese dann über den & Befehl der Zelle hinzugefügt.
Auch wenn ich durch die von Dir genannte Matrixformel nicht durchblicke würde ich diese ja gerne nutzen. Allerdings ist hier das Ende der Fahnenstange schon wieder an dem Punkt erreicht an dem Du schreibst:
"Falls du dich für 1. entscheiden solltest, müsstest du entweder den ZellVerbund aufheben oder die VerbundZelle nachträglich durch FormatÜbertragung einer MusterZelle mit dem FormatPinsel erzeugen.
"
Ich weiß nicht was Du damit meinst.
Bitte entschuldige das es wohl den Eindruck erweckt hat das ich bessere Excelkenntnisse besitze.
Gruss
Udo
Anzeige
Das mit den VerbundZellen wissen inzwischen ...
24.07.2016 02:31:57
Luc:-?
…ja schon Etliche, Udo,
aber längst nicht die Mehrheit, da es nicht gelehrt wird. Das Wissen darum gehört deshalb auch nicht unbedingt zu dem von dir gewählten Xl-Level. Dazu gehört aber die Kenntnis des Nur-Formate-Aufkopierens mittels Icon (Format-)Pinsel (bzw des entsprd Menü-Befehls).
Du müsstest also deine VerbundZelle kopieren und per Pinsel dieses Format einer beliebigen, unbenutzten Zelle zuweisen. Dadurch entsteht eine Muster-VerbundZelle, die außer den Formaten des Originals nichts enthält. Dann löst du den Verbund des Originals auf und trägst darin die Fml ein. Anschließend überträgst du das Format der MusterVerbundZelle wieder auf diese FmlZelle (auf diese Weise kann man übrigens auch mehrere Werte in einer VerbundZelle erreichen, von denen aber nur der erste angezeigt wird). Das ist erforderlich, weil Xl normalerweise keine MatrixFmln in VerbundZellen zulässt, da seine Pgmmierer wohl davon ausgingen, dass diese idR mehrere Zellen auf 1× belegen, was in regulären VerbundZellen nicht möglich wäre.
Aber das wäre nicht unbedingt erforderlich, da mit einer etwas erweiterten Fml auf Basis der UDFs TxRows (ebenfalls im Archiv!) und VSplit der ErgebnisText auf mehrere Zeilen aufgeteilt wdn könnte.
Aber wie gesagt, die UDF-Pgmm befinden sich im Archiv und du musst sie erst per RECHERCHE suchen! Für VJoin (und VSplit) habe ich dir das hier mal abgenommen.
Morrn + schöSo, Luc :-?
Anzeige
AW: Das mit den VerbundZellen wissen inzwischen ...
26.07.2016 09:53:01
Udo
Hallo Luc,
vielen Dank für Deine ausführliche Erläuterung. Ich muß wohl noch einiges lernen...
Ich verstehe zwar jetzt so weit alles was Du mir geschrieben hast und würde gerne von Dir vorgeschlagene Lösung mit der Verbundzelle umsetzen.
Jetzt setze ich zwar wahrscheinlich meiner Unverständnis die Krone auf, aber sag mir doch bitte welche Zelle Du mit "Verbundzelle" meinst? Oder sind damit die verbundenen Zellen I34:AG38 gemeint?
Gruss
Udo
Ja, genau die, in deren 1. d.Fml stehen soll! owT
26.07.2016 13:39:19
Luc:-?
:-?
AW: Das ist i.W. ein Problem deiner Fml, ...
26.07.2016 16:22:41
Udo
Hallo Luc,
ich habe es jetzt genau so gemacht wie von Dir beschrieben. Jetzt erhalten ich die Fehlermeldung "#NAME?".
Mit meinem Fachlatein habe ich versucht den Fehler selber zu finden. O.K., ich habe auch nicht wirklich erwartet diesen zu finden :-)
Aber ich finde im ersten Teil Deiner Formel (=VJoin(WAHL(ZEILE(A1:A3);MTRANS(Wachabteilung)auch nicht den Verweis auf die Registerkarte "Personal" und die dortige Spalte "AW".
Ist das richtig so?
Ich Lade die Datei mit der von mir vorgenommenen Änderung hier noch mal an.
https://www.herber.de/bbs/user/107251.xls
Gruss Udo
Anzeige
Du hast die UDF's von Luc eingebaut?
26.07.2016 16:34:10
Luc
Alle UDFs sind im Archiv zu finden. Letztpublizierte Versionen sind:
1.4 (VJoin, nur in hochgeladenen BspDateien!), 1.1 (VSplit), 1.2 (DataSet)
wahrscheinlich nicht :-(
Gruß
robert
AW: Du hast die UDF's von Luc eingebaut?
26.07.2016 16:54:44
Luc
Hallo Robert,
auch Dir vielen Dank für Deine Antwort.
Ich habe folgende von Luc vorgeschlagene Matrixformel verwendet:
{=VJoin(WAHL(ZEILE(A1:A3);MTRANS(Wachabteilung);WENN(P26="";"";P26);WENN(T26="";"";T26));", ";-1)}
So wie Luc schrieb sollte es mit dieser einen Matrixformel funktionieren (So habe ich es zumindest verstanden). Aber da ich inzwischen vor lauter Experimentiererei mit kompetentem Halbwissen den Überblick verliere blicke ich so langsam gar nicht mehr durch.
Ich vermute mal das ich die Matrixformel noch anpassen muß. Allerdings weiß ich leider nicht genau wie und an welcher Stelle ich die Änderungen vornehmen muß weil die ganze Matrixformel meinen bescheidenen Excelhorizont überschreitet.
Gruss Udo
Anzeige
Noch einmal- die UDF's von Luc eingebaut?
26.07.2016 16:59:20
Luc
Hi,
die Formel nützt Dir nichts, wenn Du die UDF's von Luc nicht hast!
Luch schreibt doch, wo Du sie finden kannst...
Gruß
robert
AW: Noch einmal- die UDF's von Luc eingebaut?
26.07.2016 17:42:40
Luc
Hallo Robert,
jetzt hat es schon mal einen kleinen "Klick" in meinem Kopf gegeben.
Ich hatte die UDF`s natürlich nicht eingebaut(Mir war bisher der Begriff UDF neu und ich dachte die Formel sei die UDF).
Jetzt habe ich versucht die UDF`s einzubetten und stehe wieder vor einer Wand...
Ich habe, wenn ich das ganze richtig Blicke jetzt folgendes eingefügt:
Option Explicit
Public Enum cxTriState: cxAsUsed = -2: cxRTrue: cxFalse: cxPTrue: End Enum
Rem Verbinden aller Elemente 1es belieb Vektors
' (Arg3 fehlt/0) bzw 1er Matrix (Arg3>0/ ' Arg1: ZBereich or DatenFeld (aus Ausdruck);
' Arg2: BindeTxt - fehlt LeerZchn, leer ohne,
' Fwert lokListTrenn; Arg3: fehlt/0/ ' ±1 ohne leere u.Wdholgg, -1 ganze Elemente,
' -2 alle ganzen ohne leere, >0 auch Element-
' Teile, abhängig v.ihrer AuftrittsReihfolge.
' Achtung! Benötigt Enum[eration] cxTriState!
' Vs1.4 -LSr -cd:20130904 -1pub:20130905herber -lupd:20150716n
Function VJoin(Bezug, Optional ByVal BindeZ, Optional ByVal NurUngl As cxTriState)
Dim lix As Long, pix As Long, erg, xBez As Variant
On Error Resume Next: NurUngl = Sgn(NurUngl) + CInt(NurUngl  "" Then
pix = 0: pix = .Match(xBez, erg, 0)
If pix = 0 Then ReDim Preserve erg(lix): _
erg(lix) = xBez: lix = lix + 1
ElseIf xBez  "" Then
erg(0) = xBez: lix = lix + 1
End If
ElseIf Not IsEmpty(erg) Then
If NurUngl = cxAsUsed Or (xBez  "" And _
InStr(erg, xBez) = 0) Then erg = erg & BindeZ & xBez
ElseIf xBez  "" Then
erg = xBez
End If
Next xBez
ElseIf IsError(LBound(Bezug, 2)) Then
erg = Join(Bezug, BindeZ)
Else: Bezug = .Transpose(Bezug)
If IsError(LBound(Bezug, 2)) Then
erg = Join(Bezug, BindeZ)
Else: erg = CVErr(xlErrRef)
End If
End If
End With
If NurUngl = cxRTrue Then VJoin = Join(erg, BindeZ) Else VJoin = erg
End Function

Rem MatrixFmlFähig Splitten (ggf in 1zelZchn - Arg2="") m.Umwandl v.TextZahlen in inZahl;
' wenn nicht alle Werte in Arg1-DFeld gleichlg sind, kann ggf F-Wert zurückgegeben wdn!
' Vs1.1 -LSr -cd:20130904 -1pub:20130905herber -lupd:20130904n
Function VSplit(Bezug, Optional ByVal TrennZ As String = " ", Optional inZahl As Boolean)
Dim ix As Long, p As Long, TrZ As String, bez, erg, vx, zwErg As Variant
On Error Resume Next
If IsArray(Bezug) Then
bez = Bezug: TrZ = TrennZ: ReDim erg(UBound(bez) - LBound(bez))
For Each Bezug In bez
Go

Sub eb: p = 0: TrennZ = TrZ: erg(ix) = VSplit: ix = ix + 1
Next Bezug
VSplit = erg: Exit Function
End If
eb: If TrennZ = "" Then
TrennZ = Chr(0): Bezug = CStr(Bezug)
While p 

Wobei Ich natürlich beide UDF`s in seperaten Modulen habe. Aber natürlich funktioniert es nach wie vor nicht. Meine Synapsen in Sachen Excel sind wohl noch nicht ausreichend verknüpft. Wahrscheinlich sind das die verkehrten UDF`s die ich da genutzt habe.
Na ja, wie schon erwähnt muß ich wohl noch seeeehrt viel lernen in Sachen Excel.
Um Euch nicht noch weiter mit meiner Unwissenheit auf den Wecker zu gehen habe ich jetzt zu einer Notlösung gegriffen:
Ich habe in der Registerkarte Personal einen Namen angelegt. Dieser besteht nur aus einem Leerzeichen. Diesen Namen habe ich dann Mit einem x der Wachabteilung zugeteilt und die Namen wieder alphabetisch sortiert. Hierdurch steht er ganz oben. Da dieser "Dummy" ja nie in den Drop Down Feldern ausgewählt wird findet die Funktion "joinen" auch immer einen Eintrag (nämlich das Leerzeichen) und gibt mir somit keine Fehlermeldung aus. Die beiden Namen in den "Verfügerzellen" werden somit auch immer angezeigt.
Ich weiß... das ist natürlich schön gefuddelt und befriedigt mich und vor allem meinen Ehrgeiz überhaupt nicht. Im Grunde ärgere ich mich schon die ganze Zeit über meine doch minimalistischen Kenntnisse in Excel.
Aber ich gelobe in sofern Besserung, das ich bei einer nächsten Frage hier im Forum ganz sicher meine Kenntnisse in Excel nicht mehr als "gut" einstufe...
Vielen Dank für Eure Geduld.
Gruss Udo
Das sind schon die richtigen UDFs, ...
27.07.2016 01:20:37
Luc:-?
…Udo,
und wenn du dich an der BspDatei orientiert und ein allgemeines Modul in die anwendende Datei eingefügt hast, sollte es auch fktionieren.
Übrigens ist es egal, wieviel Pgmm in einem Modul stehen, solange dessen ZeichenAnzahl­Limitierung nicht überschritten wird. Bei mir können's schon mal Dtzde sein…
Die UDF VSplit wird in der von dir gewählten FmlVariante übrigens nicht benötigt.
Hinweis: Du solltest zur Darstellung von PgmCode die <pre>-Tags benutzen, weil sonst die ForumsSoftware die Darstellung (zer-)stören kann, was bei VSplit auch geschehen ist. Die reagiert nämlich auf die beiden engl Begriffe, die die beiden VBA-Hpt-ProzedurTypen bezeichnen.
Luc :-?
AW: Das sind schon die richtigen UDFs, ...
29.07.2016 16:50:03
Udo
Hallo Luc,
ich stecke zur Zeit ein wenig im Stress und bin erst jetzt dazu gekommen mich noch mal um die Sache zu kümmern. Zur Zeit bekomme ich es aber nicht hin. Ich belasse es jetzt erst mal bei meiner "Notlösung" mit dem Namenseintrag "Leerzeichen" und werde mich noch mal an die Sache heransetzen wenn ich wieder etwas mehr Zeit und Ruhe habe.
Ich möchte noch mal für Deine Hilfe bedanken und wünsche Dir und allen anderen hier noch viel Spass.
Gruss
Udo
Bitte sehr, gern geschehen! owT
29.07.2016 16:52:41
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige