Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Verkettung aus Kombinationen mehrere Listen
#1
Hallo an alle, :)
ich soll eine Liste erstellen die eine Verkettung aller Kombinationen der Werte von Liste1, Liste2 und Liste3 sein soll.
Beispiel:


Code:
Liste1  Liste2  Liste3  Ergebnis
x1      a       1       x1>a>1
x2      b       2       x1>a>2
       c       3       x1>a>3
               4       x1>a>4
                       x1>b>1
                       x1>b>2
                       x1>b>3
                       x1>b>4
                       x1>c>1
                       x1>c>2
                       x1>c>3
                       x1>c>4
                       x2>a>1
                       x2>a>2
                       x2>a>3
                       x2>a>4
                       x2>b>1
                       x2>b>2
                       x2>b>3
                       x2>b>4
                       x2>c>1
                       x2>c>2
                       x2>c>3
                       x2>c>4


Meine methode wäre die Verkettungsformel immer abändern. Ist aber viel Arbeit und wenn sich die Anzahl der Werte von Liste1-3 abändert ist alles neu zu machen.
Könnte mir jemand helfen?
MfG,
Philipp
Antworten Top
#2
Hallo Philipp,

um wieviel Einträge handelt es sich maximal?

Ich würde eine VBA-Lösung empfehlen (insbesondere bei tausenden von Einträgen).
In der Analge aber erst einmal ein Formelbeispiel:


Angehängte Dateien
.xlsx   Verkettung.xlsx (Größe: 22,1 KB / Downloads: 5)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#3
Und einmal mit Makro:


Angehängte Dateien
.xlsm   Verkettung.xlsm (Größe: 37,73 KB / Downloads: 10)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#4
Hallo

anbei eine Beispieldatei mit zwei Makro Lösungen.  Zum auflisten der verknüpften Werte oder zum Formeln einfügen.
Die Spalten 1-3 können in der Const Anweisung manuell geaendert werden, ebenso die Ergebnis Spalte, bei mir "I" gewaehlt.

mfg  Gast 123


Angehängte Dateien
.xlsm   Verkettung F.xlsm (Größe: 40,2 KB / Downloads: 4)
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • philzo187
Antworten Top
#5
Hallo Philipp,

in der Anlage eine kleine Korrektur, wenn die benannte Liste vollständig gefüllt ist.

@ Gast
du solltest mehr im Speicher arbeiten. Das erhöht ein wenig den Schreibaufwand, verkürzt aber die Laufzeiten erheblich.


Bei 24*24*24 Einträgen benötigt dein Programm weit mehr als eine Minute und meins weniger als 0,1 Sekunden.


Angehängte Dateien
.xlsm   Verkettung.xlsm (Größe: 174,39 KB / Downloads: 7)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • philzo187
Antworten Top
#6
Hi,

und mit Formeln geht das so ganz einfach:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEF
1x1a1234
2x2b2x1>a>1  
3 c3x1>a>2  
4  4x1>a>3  
5   x1>a>4  
6   x1>b>1  
7   x1>b>2  
8   x1>b>3  
9   x1>b>4  
10   x1>c>1  
11   x1>c>2  
12   x1>c>3  
13   x1>c>4  
14   x2>a>1  
15   x2>a>2  
16   x2>a>3  
17   x2>a>4  
18   x2>b>1  
19   x2>b>2  
20   x2>b>3  
21   x2>b>4  
22   x2>c>1  
23   x2>c>2  
24   x2>c>3  
25   x2>c>4  

ZelleFormel
D1=ANZAHL2(A:A)
E1=ANZAHL2(B:B)
F1=ANZAHL2(C:C)
D2=INDEX(A:A;KÜRZEN((ZEILE(A1)-1)/$E$1/$F$1;)+1)&">"&INDEX(B:B;REST(KÜRZEN((ZEILE(A1)-1)/$F$1;);E$1)+1)&">"&INDEX(C:C;REST(ZEILE(A1)-1;$F$1)+1)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#7
Hallo Ego

ich muss bewğndernswert vor dir den Hut abziehen wie schnell dein Programm arbeitet. Bin beeindruckt.
Mein einfaches Volksschüler Wissen reicht leider nicht aus deinen Code logisch nachvollziehen zu können!
Mich stört auch nicht das freimütig zuzugeben. Ich weiss das mein Programmier Wissen begrenzt ist.

Als altem Praktiker fiel mir auf das bei dir alle drei Listen gleich lang sind!  Darum war ich aber neugierig was passiert wenn dein Programm mit den Original Werten wie in meinem Beispiel arbeiten muss.  Irgenwas stimmt zum Schluss nicht?? Unsinnige Daten!  Ich kann aber nicht nachvollziehen woran das liegt.

Letztendlich muss der :Frager selbst entscheiden welche Lösung er nimmt.  Aber es hat Spass gemacht mit an einer Lösung zu tüfteln.

mfg  Gast 123
Antworten Top
#8
Hi,

das Makro von Ego ist sehr unflexibel, da es nur auf gleichlange Listen ausgelegt ist.

Bei dem Makro von Gast123 ist die Variablendeklaration schlecht, da mit einer Ausnahme alle als Variant deklariert sind. Das ginge aber kürzer so:

Code:
Sub Liste_mitFormel_verketten()
Dim lzA As Long
Dim lzB As Long
Dim lzC As Long
Dim A As Long
Dim B As Long
Dim C As Long
Dim Z As Long
lzA = Application.WorksheetFunction.CountA(Columns(1))
lzB = Application.WorksheetFunction.CountA(Columns(2))
lzC = Application.WorksheetFunction.CountA(Columns(3))
Z = 0
For A = 2 To lzA
   For B = 2 To lzB
      For C = 2 To lzC
         Cells(Z + 2, 5) = Cells(A, 1) & ">" & Cells(B, 2) & ">" & Cells(C, 3)
         Z = Z + 1
      Next
   Next
Next
End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • philzo187
Antworten Top
#9
Hallo,
zu
Zitat: Irgenwas stimmt zum Schluss nicht?? Unsinnige Daten!  Ich kann aber nicht nachvollziehen woran das liegt
und
Zitat: Irgenwas stimmt zum Schluss nicht?? Unsinnige Daten!  Ich kann aber nicht nachvollziehen woran das liegt

Leider ist mir bei der Korrektur des ersten Fehlers ein zweiter unterlaufen, ich habe häufig eine Leerzelle mit ausgewertet. In der Anlage die Korrektur.


@Gast
zu
Zitat:ich muss bewundernswert vor dir den Hut abziehen wie schnell dein Programm arbeitet. Bin beeindruckt.
Mein einfaches Volksschüler Wissen reicht leider nicht aus deinen Code logisch nachvollziehen zu können!
Ich hoffe, dass meine Bemerkung nicht zu lehrmeisterlich angekommen ist.
Im Prinzip sind doch alle Lösungen gleich, eine dreifach geschachtelte Schleife.
Ich wollte dich nur auf eine Technik hinweisen, die ich auch erst in diesem Forum (von Attila und Fennek) gelernt habe:

Bei grossen Datenlisten
1) die Eingangslisten in einem Befehl aus dem Datenblatt in ein Variant-Array übernehmen,
2) die Verarbeitung im Speicher in Arrays durchzuführen und
3) das Ausgangsarray in einem Befehl ins Datenblatt schreiben.
Eine Zeitersparnis >99% ist doch Grund genug diese Technik zu nutzen.


Angehängte Dateien
.xlsm   Verkettung.xlsm (Größe: 35,19 KB / Downloads: 3)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#10
Hallo zusammen

@ Ego  dur hast Recht mit der Verarbeitungsgeschwindigkeit, das ist ein klarer Pluspunkt!  Mit Arrays habe ich bisher fast nie gearbeitet, da kenne ich mich nicht aus.  Damit zu arbeiten muss ich mir erst noch angewöhnen.  (Der Mensch ist ein Gewohnteitstier !)

@ Edgar  stimmt, meine Variablen waren als Variant deklariert.  Die Frage schlecht ist relativ??  Bei einem heutigen RAM  gleich welcher Grösse spielt es sicher keine Rolle ob eine Variable mit 2, 4, 8 oder 16 Byt deklariert wird. Das sehe ich gelassen, denn die Funktion ist auf jeden Fall gegeben. Manchmal nehme ich absichtlich Variant, wenn ich z.B. nicht genau weiss ob ich es mit Test, Zahl, Datum oder Bool Wert zu tun habe?  Da gibt es bei Variant keinen Laufzeifehler!

mfg  Gast 123
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste