Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
984to988
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
984to988
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Array abhängig von Spaltenüberschriften erstellen

Array abhängig von Spaltenüberschriften erstellen
17.06.2008 17:57:00
Spaltenüberschriften
Hallo zusammen,
ich stehe vor einem - für mich - unlösbaren Problem.
Ich habe eine Tabelle mit 25 Spalten und 40 Zeilen. Nun möchte ich jede dieser Spalten mit den Werten der Zeilen in ein eigenes Array einlesen, welches den Namen der Spaltenüberschrift trägt. In den Zellen stehen NUR Zahlen.
Sinn der Sache ist, dass die Spalten evtl. verschoben werden. Das also die Spalte mit der Überschrift "Krit1" nicht mehr in Spalte A steht, sondern in Spalte C. Dann soll ein Code durchlaufen, der die Spaltenüberschriften mit den Arraynamen vergleicht, findet sich eine Übereinstimmung, sollen die Daten des Array in die Zeilen unter dem jeweiliegen Spaltennamen geschrieben werden.
Ich danke Euch herzlich für Eure Mühe!
Jonathan

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: wozu soll das gut sein?..
17.06.2008 19:14:15
Chris
Servus Jonathan,
wenn du die Spalten verschiebst, dann verschieben sich auch die Daten in der Spalte, ausser jemand ändert die Überschriften.
Aber was soll das Ganze bringen?
Ich kann deinem Gedankengang nicht wirklich folgen.
Gruß
Chris

AW: wozu soll das gut sein?..
17.06.2008 20:09:00
Jonathan
Hey Chris,
also:
in einer UF werde durch eine ListBox 1-25 Werte ausgewählt, welche dann nebeneinander in die Tabelle geschrieben werden. Diese sind dann die Spaltenüberschriften.
An späterer Stelle werden - auch via UF - Daten in die Zellen der Spaltenüberschriften hinzugefügt, so dass danach eine vollständige Tabelle erstellt wurde. Wenn nun aber nach Einagabe aller Daten auffällt, dass eigentlich eine Spalte mehr hätte gewählt werden sollen und wählt man diese nun in der Listbox aus, werden ja alle Spaltenüberschriften neu geschrieben. so kann es dann vorkommen, dass die Überschrift 1 nicht mehr an erster Stelle, sondern an zweiter Stelle steht. Die Daten, welche in der Spalte stehen, bleiben aber dort und werden dann nachher einer anderen Überschrift zugeordnet. Das geht natürlich nicht.
Daher dachte ich mir, ich könnte die ganzen Daten in ein Array einlesen und nach Neuvergabe der Spaltenüberschriften diesen dann zuordnen. So sind alle Daten wieder da, wo sie sein sollten.
Ich hoffe, es etwas verständlich erklärt zu haben?!
Jonathan

Anzeige
AW: wozu soll das gut sein?..
17.06.2008 20:44:58
Chris
Naja,
wenn schon Daten eingegeben wurden.
Option Explicit
Dim ArrayKrit1(39) As Variant ' 40 Zeilen incl. Überschrift

Sub ArrayEinlesen ()
Dim i as Long
For i = LBound(ArrayKrit1()) To UBound(ArrayKrit1())
ArrayKrit(i) = Cells(i + 1, 1) ' i+1, weil der Array bei 0 anfängt
Next i
End Sub



Sub ArrayAuslesen ()
Dim z As Long, k as Long
For z = 1 to 25 ' Spalten durchlaufen
If ArrayKrit1(0) = Cells(1, z) Then ' wenn Überschrift = erstes Element des Arrays(alte  _
Überschrift)
For k =Lbound(ArrayKrit1()) to UBound(ArrayKrit1())  ' dann schreibe Werte in diese  _
Spalte zurück
Cells(k+1, z) = ArrayKrit1(k)
Next k
Exit For
End if
Next z
End Sub


Vllt. hilfts. Für 25 Spalten musst du allerdings 25 Arrays definieren bzw. einen großen Array.
z.B. Dim ArrayX(1 to 40, 1 to 25) würde auch gehen. Dann hast du allerdings eine Doppelschleife. Als ich würde das Einfügen der neuen Spalten anders machen. Evtl ein Button " Was vergessen? und dann einfach das selektierte entweder hinten anhängen oder dazwischen einfügen.
Gruß
chris

Anzeige
AW: wozu soll das gut sein?..
17.06.2008 20:50:00
Daniel
Hi
du kannst Variablennamen mit VBA nicht Variabel anlegen, da musst du für jede Variable schon ne eingene Codezeile schreiben.
was dir vielleicht helfen könnte, wäre folgende Methode zur Zuweisung der Arrays:
Dim Krit1, Krit2, Krit3 '--- Das sind die Arrays
Krit1 = Rows(1).find(What:="Krit1").resize(40,1).value
Krit2 = Rows(1).find(What:="Krit2").resize(40,1).value
Krit3 = Rows(1).find(what:="Krit3").resize(40,1).value
somit bist du bei der Zuweisung der Arrays unabhänig von der Spaltenanordung, entscheidend ist jetzt nur noch die Überschrift in Zeile 1, diese dürfen jetzt Textlich natürlich nicht mehr geändert werden.
Gruß, Daniel

Anzeige
AW: Array abhängig von Spaltenüberschriften erstellen
17.06.2008 20:55:00
Spaltenüberschriften
Hallo Jonathan,
das ist doch alles Krampf.
Lege doch gleich alle Spalten an und blende die nicht benötigten aus. Alles andere geht sicher in die Hose.

Gruß Sepp



AW: Array abhängig von Spaltenüberschriften erstellen
17.06.2008 22:03:23
Spaltenüberschriften
Hey Ihr,
vielen Dank für die große Resonanz.
Ja, an die Varianten hatte ich auch schon gedacht. Der restliche - und sehr umfangreiche - Code ist aber fertig. Änder ich jetzt die Anordnung der Spalten, muss ich alles andere auch ändern.
Mal eine Frage vorab, das muss ich in meinen Überlegungen dann berücksichtigen:
Berücksichtigt VBA ausgeblendete Spalten? Also, wird z.B. beim Durchlaufen einer Schleife - beispielhaft
for i = 1 to 5
if cells(1,i) ...
next
die angenommene Spalte B (ausgeblendet) berücksichtigt?

Anzeige
AW: Array abhängig von Spaltenüberschriften erstellen
17.06.2008 22:06:07
Spaltenüberschriften
Hallo Jonathan,
ja, ausgeblendete Spalten werden berücksichtigt, aber das lässt sich leicht abfragen.
For i = 1 To 5
    If Columns(i).Hidden = False Then
        If cells(1,i) ...
    End If
Next


Gruß Sepp



Anzeige
AW: Array abhängig von Spaltenüberschriften erstellen
17.06.2008 22:32:00
Spaltenüberschriften
Hey,
gute Idee!
Ich habe jetzt die ganze Zeit versucht, eine Lösung zu finden, leider ohne Erfolg.
Klar, die Idee mit dem Butto "etwas vergessen" ist gut, damit könnte leicht abgefangen werden, wo (vor welcher Spalte) eine neue eingefügt werden muss. Das gefällt mir aber nicht. Der User wählt aus der Listbox verschiedene Werte aus (bis zu 25 möglich), welche dann nebeneinander in die Tabelle geschrieben werden. Wurden z.B. Werte 3,4,5,7 ausgewählt, und möchte der User nun Wert 6 zusättzlich wählen, müsste jetzt eine Spalte zwischen 5 und 7 eingefügt werden. Das ließe sich ja einfach über die Nummer des ausgewählten Eintrages des Listbox realisieren. Jetzt müsste aber irgendwie noch geprüft werden, ob der User bereits vorher Daten eingefügt hat. Ansonsten würden ja immer - auch bei der ersten Wahl - neue Spalten eingefügt werden.
Jonathan

Anzeige
AW: Array abhängig von Spaltenüberschriften erstellen
18.06.2008 14:49:06
Spaltenüberschriften
Hey,
habs jetzt hinbekommen - füge eine neue Spalte ein, lösche die letzte - so sind immer gleich viel Spalten in der vorgegebenen Tabelle vorhanden!
Danke Euch!

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige