Variablen erstellen sich aus Array selbstständig

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Variablen erstellen sich aus Array selbstständig
von: Sören
Geschrieben am: 28.09.2015 10:11:10

Hallo zusammen!
Folgende Idee habe ich und weiß nicht, ob man sie überhaupt verwirklichen kann.
Ich möchte Spaltenbezeichnungen in eine Array einlesen und diese Bezeichnungen dann als Parameter einsetzen, um ihnen die Spaltenzahl zuzuordnen.
Das Makro soll seine Variablen also selber erstellen/dimen können.
Ist dies möglich?
Danke Gruß Sören

Bild

Betrifft: AW: Variablen erstellen sich aus Array selbstständig
von: ChrisL
Geschrieben am: 28.09.2015 11:05:11
Hi Sören
Etwa so...

Sub t()
Dim iSpalten As Integer
Dim i As Integer
iSpalten = Range("IV1").End(xlToLeft).Column
ReDim ar(iSpalten - 1)
For i = 0 To iSpalten - 1
    ar(i) = Cells(1, i + 1)
Next i
End Sub

(Achtung Array zählt ab null)
Zeile 1 wird gelesen, Annahme keine leeren Spalten.
cu
Chris

Bild

Betrifft: Variablen erstellen sich aus Array selbstständig
von: Sören
Geschrieben am: 28.09.2015 11:26:27
Hi Chris
Den ersten Schritt habe ich bereits analog auch zu deinem Beitrag gemacht. Der entscheidende Schritt fehlt jedoch noch.
Die eingelesenen Werte (z.B.: "Bem") sollen nur zur Variablen deklariert werden.
Diesen Variablen weise ich dann die Spalten zu, in welcher der Text sich befindet. Dadurch sollen meine künftigen Makro flexibler sein, wenn ich Spalten hinzufüge. Statt der Spaltenzahl verwende ich dann den Parameter (zB: "BEM") und das Programm erkennt selbstständig in welcher Spalte dieser steht.
Im einfachen Fall würde es so aussehen:


Sub Spalten()
Dim Spaltenzahl As Integer
Dim Bezeichnung() As String
Spaltenzahl = ActiveSheet.Cells(1, 1000).End(xlToLeft).Column
ReDim Preserve Bezeichnung(Spaltenzahl)
For i = 1 To Spaltenzahl
    Bezeichnung(i) = Cells(1, i)
Next
'Problematik: Variable automatisch deklariert
>>>>>For i = 1 to Spaltenzahl
>>>>>Dim Bezeichnung(i) as string
>>>>>next
MsgBox ("Fertig")
End Sub


Bild

Betrifft: AW: Variablen erstellen sich aus Array selbstständig
von: ChrisL
Geschrieben am: 28.09.2015 13:00:24
Hi Sören
Ich verstehe die Anforderung/Problem leider nicht ganz.
Warum vergleichst/suchst du die Spaltenüberschrift nicht direkt in der Tabelle?
Nachstehend noch ein kleines Array-Beispiel:

Sub t()
Dim ar(2, 1)
' Ein Test-Array (Zahlen = Spaltenindex)
ar(0, 0) = "BEM"
ar(0, 1) = 1
ar(1, 0) = "BIM"
ar(1, 1) = 3
ar(2, 0) = "BAM"
ar(2, 1) = 2
' Suche
Dim sSuche As String
sSuche = "BIM"
For i = 0 To UBound(ar)
    If ar(i, 0) = sSuche Then MsgBox sSuche & " gefunden in Spalte " & ar(i, 1)
Next i
End Sub

cu
Chris

Bild

Betrifft: Variablen erstellen sich aus Array selbstständig
von: Sören
Geschrieben am: 28.09.2015 14:58:56
Hi Chris.
Das hilft mir alles nicht weiter.
Ich habe 280 Spalten, die ich jetzt benannt habe und auf die sich etliche Makros beziehen. Füge ich künftig Spalten ein, geben ich diesen ebenfalls einen Namen und spreche sie mit diesen Namen in den Makros an.
Ich könnte natürlich die Variablen ganz einfach definieren (BEM = 2; Num = 3 usw.) Wenn ich jetzt eine Spalte einfüge, muss ich halt die Parameter anpassen (Bem = 2; NEU = 2; Num = 3)
Ich möchte versuchen, dass das Marko selbstständig erkennt, in welcher Spalte zB "Num" steht.
Die Problematik ist tatsächlich: Kann das Marko selbstständig seine Variablen deklarieren ( 280 Variable)
Userbild
Nochmals Danke.

Bild

Betrifft: AW: Variablen erstellen sich aus Array selbstständig
von: ChrisL
Geschrieben am: 28.09.2015 16:36:53
Hi Sören
Vielleicht stehe ich auf dem Schlauch. Aber was mir nicht in den Kopf will, warum suchst du nicht einfach in den Spaltenüberschriften und machst einen Umweg über ein Array.
Wenn du immer frisch suchst, dann kannst auch beliebig Spalten einfügen.
Sub t()
Dim sSuche As String
sSuche = "BUM"
MsgBox "Ergebnis in Spalte " & SuchMal(sSuche)
End Sub

Private Function SuchMal(sSuche As String) As Integer
SuchMal = Application.Match(sSuche, Rows(1), 0)
End Function
cu
Chris

Bild

Betrifft: AW: Variablen erstellen sich aus Array selbstständig
von: Rudi Maintaire
Geschrieben am: 28.09.2015 15:05:34
Hallo,
das geht so nicht. Nimm die Spaltennummern in eine Colection auf.
Bsp.:

Sub aa()
  Dim i As Long, oCol As New Collection
  For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
    oCol.Add i, Cells(1, i)
  Next
  MsgBox Cells(5, oCol("Bem"))
End Sub

Gruß
Rudi

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Variablen erstellen sich aus Array selbstständig"