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

Per Logik Spalten verketten - hary

Per Logik Spalten verketten - hary
12.01.2016 08:15:26
Jens
Hallo,
ich habe diesen Code von hary um per Vorgabefelder eine Logik vorzugeben welche Spalten Inhalte miteinander verknüpft werden können.
Desweiterem, kann man auch das Trennzeichen vorgeben.
Bsp.
Vorgabe
A Leer / Leer B
Dann werden die Inhalte aus dem Bereich Spalt A mit einem Leerschritt, Schrägstrich verbunden, Leerschritt, Spalte B.
Das Leer gibt es so in der Funktion nicht.
Ich es irgendwie möglich die Funktion so zu erweitern, umzustellen, dass
1) Ein Leerschritt erst dann eingefügt wird, wenn im Vorgabebereich "Leer" in der Spalte steht?
2) Es soll möglich sein, dass mehrere Trennzeichen verwendet werden können.
Dabei soll die Vorgabe über einen weiteren Bereich gemacht werden können.
Bisher kann nur "/" verwendet werden.
Ich bräuchte aber mehrere Trennzeichen.
Function Kette2(Vorgabe As Range, Ketten As Range)
Dim Wert
Dim arr
Dim a As Boolean
Dim SpalteQ As Byte
arr = Vorgabe.Value
For Each Wert In arr
If Wert = "/" Or IsEmpty(Wert) Then GoTo weiter '--wenn / oder leer dann weiter
SpalteQ = Columns(Wert).Column
If IsNumeric(SpalteQ) Then
Kette2 = Kette2 & Ketten.Cells(SpalteQ)
Else
weiter:
Kette2 = Kette2 & IIf(IsEmpty(Wert), " ", Wert) '--wenn leer dann leer sonst Eintrag
End If
Next
End Function

Hat hierzu jemand eine Lösung?
Gruß

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW:wie geschrieben..
12.01.2016 09:08:29
hary
Moin
...lad mal eine Bsp.-Mappe hoch und bleib in einen Thread(kannst du auf offen setzen).Jetzt sind zig Threads zum Thema.
gruss hary

AW: AW:wie geschrieben..
12.01.2016 09:50:05
Daniel
Hi
probier mal folgenden Code:

Function Kette2(Vorgabe As Range, Ketten As Range, Optional Trennzeichen As String = "")
Dim Zelle As Range
Dim T As String
For Each Zelle In Vorgabe
T = Zelle.Value
Select Case T
Case "leer"
Kette2 = Kette2 & " "
Case ""
Kette2 = Kette2 & Trennzeichen
Case Else
If T Like "[A-Z]" Or T Like "[A-Z][A-Z]" Then
Kette2 = Kette2 & Ketten.Worksheet.Cells(Ketten.Row, T).Text
Else
Kette2 = Kette2 & T
End If
End Select
Next
End Function
die Funktionalität ist folgende:
steht in der Zelle von Vorgabe
- der Text "leer": es wird ein Leerzeichen eingefügt
- nichts: es wird als Trennzeichen der Text des 3. Parameters eingefügt (3. Parameter = Trennzeichen)
- ein Text aus ein oder zwei Grossbuchstaben: es wird der Text aus der jeweiligen Spalte des Zellbereichs "Ketten" eingefügt
- alle anderen Fälle: es wird der Text eingefügt, welcher in der vorgabe steht.
Gruß Daniel

Anzeige
AW: AW:wie geschrieben..
12.01.2016 10:05:27
Jens
Hallo,
danke für die Mühe.
Jetzt wo ich das so sehe, wäre es auch ohne Trennzeichen möglich, indem einfach sagt, man schreibt das Trennzeichen direkt in die Vorgabe rein.
Wenn nichts drin ist, wird auch nichts in der Verkettung übernommen.
Ich hätte versucht den Code zu ändern aber nun habe ich eine Fehler.
Was auch komisch ist, dass der verkettete Ausdruck immer in einer anderen Zelle ist, als in der in der ich die Funktion erstellt habe.
Irgendwie springt die Ausgabe.
Weist du warum?

AW: AW:wie geschrieben..
12.01.2016 10:20:11
Daniel
Hi
lade deine Datei mal hoch.
schreibe bitte auch dein von Hand erstelltes Wundschergebnis dazu.
was du mit dem letzen Problem meinst, verstehe ich nicht.
ich habe den Code so geschrieben, dass sich die Spaltenangabe A, B, C usw immer auf die Absolute Spalten A, B, C entsprechend dem Tabellenblatt bezieht unabhängig davon, welchen Zellbereich du bei "Ketten" angegeben hat.
Wenn es aber relativen Spalten sein sollen (A = erste spalte des angegebenen Bereichs, B = zweite Spalte des angegebenen Bereichs), dann müsstest du das schon sagen.
Wobei ich es hier praktischer finden würde, wenn man dann nicht den Spaltenbuchstaben, sondern die Spaltennummer angeben würdest.
Das wäre dann einfacher zu Programmieren und du könntest beides verwenden:
- Spaltenbuchstabe für die absolute Spaltenangabe
- Spaltennummer für die relative Spalteangabe
Gruß Daniel

Anzeige
AW:Frage
12.01.2016 10:03:04
hary
Moin Jens
Was heisst erlaubte Sonderzeichen? Was soll passieren wenn bei:



Vorgabe
 ABCDEFG
2Vorgabe der Spalten      
3Aleer:leerCleerD
4       
5       
6Erlaubte Sonderzeichen      
7'/.     

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

gruss hary

Anzeige
AW: AW:Frage
12.01.2016 10:08:07
Jens
Hallo,
das mit den Sonderzeichen ist egal musste ich gerade feststellen.
Es sollte so sein.
steht in der Zelle von Vorgabe
- der Text "leer": es wird ein Leerzeichen eingefügt
- nichts: es wird nichts in die Verkettungsfunktion übernommen. (auch kein Leerschritt)
- ein Text aus ein oder zwei Grossbuchstaben: es wird der Text aus der jeweiligen Spalte des Zellbereichs "Ketten" eingefügt
- alle anderen Fälle: es wird der Text eingefügt, welcher in der Vorgabe steht.
So wäre es super und perfekt.

Es gibt keinen ZellBereich 'Ketten', ...
12.01.2016 10:14:33
Luc:-?
…Jens(-Julia);
außerdem hatte ich dir genau so etwas in meinem letzten Bsp demonstriert, allerdings etwas mehr auf den Pkt gebracht!
Luc :-?

Anzeige
AW: Na gut...
12.01.2016 10:35:57
hary
Moin
Versuchen wir's mal anders.;-)



Vorgabe
 ABCDEFG
2Vorgabe der Spalten      
3A '/leerCleerD

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit




Datensatz
 ABCDEFG
2Datensatz     VERKETTETER DATENSATZ
3Hallo ist da  Hallo/ ist da

verwendete Formeln
Zelle Formel Bereich R1C1 für Add In
G3=ketten3(Vorgabe!A3:G3;A3: D3)  =ketten3(Vorgabe!RC[-6]:RC,RC[-6]:RC[-3])

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

Function ketten3(Vorgabe As Range, Ketten As Range)
Dim Regex As Object
Dim objMatch As Object
Dim zelle As Range
For Each zelle In Vorgabe
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.Pattern = "^[A-Z]+\b" 'Anfang nur Grossbuchstaben
.Global = True
Set objMatch = .Execute(zelle)
If objMatch.Count > 0 Then
ketten3 = ketten3 & Ketten.Columns(objMatch(0).Value)
Else
ketten3 = ketten3 & IIf(zelle = "leer", " ", zelle)
End If
End With
Next
End Function

Wenn du Bsp.-weise AB reinschreibst muss der Kettenbereich natuerlich entsprechend sein.
@Luc: ist nur zur uebung. ;-)
gruss hary

Anzeige
Ja, klar, Hary, aber seine/ihre Vorgabe ist ...
12.01.2016 11:27:27
Luc:-?
…doch der reinste Quatsch, nämlich „von hinten durch die Brust geschossen“. Wenn zu jeder Zelle des Datensatzes auch eine der Vorgabe existiert, nur zusätzlich noch ZwischenZellen für das jeweilige Verbindungszeichen, warum in aller Welt soll die Vorgabe dann so viele unnütze Zellen enthalten? Angenommen ein DSatz bestünde aus 100 Zellen (inkl leere), dann müsste hier die Vorgabe 199 Zellen lang sein! Dabei würden 100 Zellen auch schon reichen! Jede Zelle des DSatzes müsste nur mit jeder Zelle der Vorgabe verkettet und anschld dieses neue Datenfeld elementweise untereinander verbunden wdn.
So, wie es im Bsp aussieht, wird als Verbinder stets Leerzeichen benutzt, nur die DSatz-LeerZellen wdn anderweitig ersetzt. Dafür bräuchte man nicht mal einen VorgabeSatz, das kann viel einfacher erledigt wdn, zumal VJoin Leerzeichen (genau wie vbFkt Join!) als StandardVerbinder einsetzt - muss also nicht mal angegeben wdn. Wenn ein VorgabeSatz benutzt wird, allerdings schon - der Verbinder muss dann der Leer-String sein.
Für das Vorgabe-Modell sähe das dann so aus:
Inhalt Vorgabe!A4:D4: {" "."/ "." ".""}
Inhalt Datensatz!A4:D4: {"Hallo".""."ist"."da"}
Ergebnis: Hallo / ist da
Ergebnis-MatrixFml: {=VJoin(Datensatz!A4:D4&Vorgabe!A4:D4;"")}
Ohne VorgabeSatz so:
Ergebnis: Hallo / ist da
Ergebnis-MatrixFml: {=VJoin(WENN(ISTLEER(A4:D4);"/";A4:D4))}
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Ja, klar, Hary, aber seine/ihre Vorgabe ist ...
12.01.2016 12:17:46
Daniel
aber Luc, denk doch mal ein bisschen über deinen Tellerrand hinaus.
wer sagt denn, dass zu jedes Zelle des Datensatzes auch eine Vorgabe existieren muss?
Es sind ja auch wiederholende Vorgaben oder Vorgaben in geänderter Reihenfolge möglich, beispielsweise sowas:
ABACABA
oder
ACCEEEGGGG
also im Prinzip ein flexibler Baukasten, mit dem wenige Grundbausteine mit flexiblen Verbindungselementen in beliebiger Weise kombiniert werden können.
Gruß Daniel

Schönen Dank für deine Unverschämtheit ...
12.01.2016 13:20:10
Luc:-?
…und dito, Daniel;
wer sagt dir denn, dass das nicht so ist wie ich annehme? Wohl in deiner Glaskugel gesehen! Wenn sich jetzt Textteile wiederholen sollten, wofür nichts außer deiner Fantasie spricht, hätte mindestens ein solches Bsp dabei sein müssen! Stattdessen hat's 5-6 Threads gedauert, bis man sich Näheres zusammenreimen konnte. Und nun haben wir ein Bsp, bei dem zu einer Leerzelle im DSatz eine korrespondierende Zelle mit / im VorgabeSatz existiert…
Außerdem ändert deine durch nichts begründete arrogante Herablassung, die ich mir hiermit ein-für-allemal deinerseits aufs Schärfste verbitte, nichts an der Tatsache, dass die ZwischenZellen absolut überflüssig sind. Wundert mich, dass du das nicht mitbekommen hast, wo du doch so ein Verfechter manueller Tricks und einfacher Fmln bzw Fktt bist… :->
Übrigens hatte ich schon zuvor eine Variante gepostet, bei der den SpaltenBuchstaben die ZeilenNrn zugeordnet wdn, so dass eine Zeichenfolge erzeugt wird, auf die im Endeffekt AUSWERTEN angesetzt wdn kann, was mir letztlich überflüssige Mühe zu sein schien, denn so etwas wurde bisher in keinster Weise thematisiert. Mir scheint es hier eher um ganz was Anderes zu gehen…
Naja, wie soll auch jemand wie du, der quasi „von der Hand in den Mund“ pgmmiert, so etwas bemerken. (Pgmmatische) Nachhaltigkeit scheint dir ja ohnehin ein Fremdwort zu sein… :->
So, nun rate mal, wessen Horizont wohl weiter ist…
Luc :-?

Anzeige
AW: Na gut...
12.01.2016 17:06:01
Jens
Vielen Dank für die Hilfe
Funktioniert eiwandfrei.
Ein Problem kam jetzt auf.
Ich bin das ganze in eine große Tabelle ein.
Hier kann ich per Button Zeilen einfügen.
Sobald ich das mache, steht in der Zelle #Wert!.
Wenn ich nun in die Zelle klicke und Enter drücke funtioniert es wieder.
Kann man das irgendwie automatisieren?
Also irgendwie einen Refresh der Funktion vollziehen lassen?

AW: keine Probleme
13.01.2016 06:09:24
hary
Moin Jens
Bei mir geht es,wenn ich per Makro Zeilen einfuege.
Evtl. hilft wenn du vor der Schleife
Application.Volatile

einfuegst.
gruss hary

Anzeige
Wäre nett gewesen, du hättest auch dein ...
12.01.2016 10:07:34
Luc:-?
…Wunschergebnis eingefügt, Jens-Julia!
Außerdem wären etwas praxisnähere Daten sicher sinnvoll und der Grund, warum die Vorgabe so aussieht bzw aussehen muss oder ob die nur deinem Lösungsansatz geschuldet ist. Also bitte mal das eigentliche Problem nennen!
Hinweis: Die xlStandardFkt VERKETTEN fktioniert genauso wie der &-Operator, d.h., 2 Vektoren (Zeilen oder Spalten) wdn elementweise miteinander zu einem neuen Vektor verknüpft. Will man alle Elemente eines Vektors untereinander verknüpfen, egal ob Bereich oder aus einer Operation resultierendes bereichsloses Datenfeld, benötigt man VBA, bspw in Form einer sog selbst definierten Fkt (UserDefined Function ⇒UDF). Hary hatte dir eine nur für ZellBereiche vorgegeben (Kette2), ich hatte eine bereits im Archiv vorhandene (VJoin, zT basierend auf vbFkt Join, aber umfassender anwendbar, auch für Datenfelder!) vorgeschlagen. Was nun sinnvoller ist, hängt auch ganz davon ab, ob es dir im xten Thread doch noch gelingt, dein Anliegen verständlich genug zu machen, d.h., die offenen Fragen entsprd zu beantworten.
In mir festigt sich langsam der Eindruck, dass du nicht so recht mit Anlass und Modalitäten herausrücken willst oder kannst…
Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige