Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zuordnung, Variablen

Forumthread: Zuordnung, Variablen

Zuordnung, Variablen
15.04.2022 09:43:21
Fred
Hallo Excel,- VBA Profis,
ich habe gestern von GerdL ein Makro erhalten, welches die Abarbeitungszeit (gegenüber dem ursprünglichen Makro) von über 1,5 Stunden auf ca. 2 Sekunden reduziert,- FANTASTISCH!
Das Zuordnen von Daten möchte ich demnächst weiter anwenden, mit array, variablen etc. - aufbauend von weiter unten aufgeführten Makro. Dazu muss ich natürlich das Konstrukt begreifen. Und so kurz als auch anscheinend klar aufgeführten Makro, habe ich Schwierigkeiten, dieses zu verstehen, verändern oder gar selber zu schreiben.
Das Makro:

Sub GerdL()
Dim U As Long, T As Long, varListe As Variant, varUnikate As Variant
LZ_UnikateClear2 = ThisWorkbook.Sheets("Tagesliste").Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Tagesliste").Range("Y8:Z" & LZ_UnikateClear2).ClearContents
With ThisWorkbook
With .Sheets("Tagesliste")
varListe = .Range("A8:Z" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
With .Sheets("Unikate")
varUnikate = .Range("A5:V" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
For T = 1 To UBound(varListe)
For U = 1 To UBound(varUnikate)
If varUnikate(U, 1)  "" Then
If varListe(T, 1) = varUnikate(U, 1) Then
varListe(T, 25) = varUnikate(U, 21)
varListe(T, 26) = varUnikate(U, 22)
End If
End If
Next U
Next T
With .Sheets("Tagesliste")
.Range("A8:Z" & .Range("A" & .Rows.Count).End(xlUp).Row) = varListe
End With
End With
End Sub
u.a. werden in diesem Makro entsprechende Daten aus Sheet Unikate, Spalten 21 und 22 in Sheet Tagesliste, Spalten 25 und 26 eingetragen.
Selbst wenn ich dies ändern möchte, zB das Eintragen in die Spalten 27 und 28,- klappt es nicht.

varListe(T, 25) = varUnikate(U, 21)
varListe(T, 26) = varUnikate(U, 22)
in

varListe(T, 27) = varUnikate(U, 21)
varListe(T, 28) = varUnikate(U, 22)
ändern = falsch
oder auch

With .Sheets("Tagesliste")
varListe = .Range("A8:Z" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
in

With .Sheets("Tagesliste")
varListe = .Range("A8:AB" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
ändern = falsch
Kann mir bitte jemand das oben aufgeführte kurze Makro erklären?!!
Gruss
Fred
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zuordnung, Variablen
15.04.2022 10:38:09
Luschi
Hallo Fred,
warum ein neuer Thread statt im alten Beitrag bleiben?
- die Laufvariable 'T' klappert das Array 'varListe' ab
- welches den Bereich Tagesliste!A8:Zxx repräse´ntiert
- das sind Spalte 1 bis 26 und somit gibt es im Array keine 27. und 28. Spalte
- Lösung: varListe = .Range("A8:AB" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
Gruß von Luschi
aus klein-Paris
PS: eine kleine Demodatei zu liefern vom Fragesteller, wenn die Vba-Kenntnisse bescheiden sind, ist immer eine gute Idee.

Anzeige
AW: Zuordnung, Variablen
15.04.2022 10:41:24
Oberschlumpf
Hi,
ich finde "neuen Beitrag" gut, weil = neue Frage
...nur meine Meinung...
Aber mit Bsp-Datei fänd auch ich gut!
Ciao
Thorsten
AW: Zuordnung, Variablen
15.04.2022 11:27:28
Fred
Hallo Luschi,
ich dachte, da das Makro kurz ist, die Anfrage klar und die Änderung sicherlich auch schnell dargestellt werden kann ... aber wenn ich schon anfange zu denken .. ähnliches Thema (Beispielmappe) hatte ich gestern auch schon ..
Leider klappt dein Lösungsansatz nicht
Lösung: varListe = .Range("A8:AB" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
hatte ich gleich als zweites ausprobiert.
https://www.herber.de/bbs/user/152463.xlsb
Hast du oder ein anderer Leser eine funktionierende Änderung?
Die Frage war:
Wie ändere ich den Code, wenn die entsprechenden Daten nicht in den Spalten 25/26 eingetragen werden sollen, sondern in 27/28
Gruss
Fred
Anzeige
AW: Zuordnung, Variablen
15.04.2022 12:04:41
Luschi
Hallo Fred,
bei mir klappt das so:

Sub Ergebnisse_Endstand()
Dim U As Long, T As Long, LZ_UnikateClear2 As Long, _
varListe As Variant, varUnikate As Variant
LZ_UnikateClear2 = ThisWorkbook.Sheets("Tagesliste").Cells(Rows.Count, 1).End(xlUp).Row
''Worksheets("Tagesliste").Range("Y8:Z" & LZ_UnikateClear2).ClearContents
Worksheets("Tagesliste").Range("AA8:AB" & LZ_UnikateClear2).ClearContents
With ThisWorkbook
With .Sheets("Tagesliste")
'hier Spaltenbereich anpassen
varListe = .Range("A8:AB" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
With .Sheets("Unikate")
varUnikate = .Range("A5:V" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
For T = 1 To UBound(varListe)
For U = 1 To UBound(varUnikate)
If varUnikate(U, 1)  "" Then
If varListe(T, 1) = varUnikate(U, 1) Then
varListe(T, 27) = varUnikate(U, 21)
varListe(T, 28) = varUnikate(U, 22)
End If
End If
Next U
Next T
With .Worksheets("Tagesliste")
'und hier Spaltenbereich anpassen
.Range("A8:AB" & .Range("A" & .Rows.Count).End(xlUp).Row) = varListe
End With
End With
If VarType(varListe) >= vbArray Then Erase varListe
If VarType(varUnikate) >= vbArray Then Erase varListe
End Sub
Gruß von Luschi
aus klein-Paris
PS: aber eigentlich muß man nur 2 Spalten zurückschreiben und nicht 28!
Anzeige
AW: Zuordnung, Variablen
15.04.2022 12:25:28
Fred
Hallo Luschi,
auch ich hatte zuvor

varListe = .Range("A8:AB" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
und

varListe(T, 27) = varUnikate(U, 21)
varListe(T, 28) = varUnikate(U, 22)
eingetragen,- funzte jedoch nicht. Mit deinem kompletten Code klappt es allerdings.
Wenn ich allerdings deine unteren 2 Zeilen

If VarType(varListe) >= vbArray Then Erase varListe
If VarType(varUnikate) >= vbArray Then Erase varListe
lösche,
klappt es ebenfalls.
?
Gruss
Fred
Anzeige
AW: Zuordnung, Variablen
15.04.2022 12:57:37
Fred
jo, den Unterschied nun endlich wahrgenommen.
Ich muss den Spaltenbereich 2x anpassen !!
Bleibt nur noch offen, was

If VarType(varListe) >= vbArray Then Erase varListe
If VarType(varUnikate) >= vbArray Then Erase varListe
bewirkt?
Wenn gelöscht, funzt es ebenfalls!
Gruss
Fred
Anzeige
AW: Zuordnung, Variablen
15.04.2022 13:37:11
Luschi
Hallo Fred,
statt vorgeschlagene Vba-Zeilen einfach zu löschen, solltest Du lieber in der Vba-Online-Hilfe nachschauen, was der Erase-Befehl eigentlich macht; und so geht's:
- Maus-Cursor in den Erase-Befehl stellen
- und F1-Taste drücken
- dann zeigt Dein Lieblingsbrowser die passende Hilfe dazu an
- einfacher geht's ja wohl nicht
Ich hoffe, Du hast auch bemerkt, daß ich Sheets gegen Worksheets ausgetauscht habe.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Zuordnung, Variablen
15.04.2022 13:39:49
snb
Zeige mal bitte eine Musterdatei.
AW: Zuordnung, Variablen
15.04.2022 14:06:46
snb
Wenn Geschwindigkeit wichtig ist:

Sub M_snb()
sn = Sheets("Tagesliste").ListObjects(1).DataBodyRange
sp = Sheets("Unikate").ListObjects(1).DataBodyRange
With CreateObject("scripting.dictionary")
For j = 1 To UBound(sp)
.Item(sp(j, 1)) = Array(sp(j, 21), sp(j, 22))
Next
For j = 1 To UBound(sn)
sn(j, 25) = .Item(sn(j, 1))(0)
sn(j, 26) = .Item(sn(j, 1))(1)
Next
End With
Sheets("Tagesliste").ListObjects(1).DataBodyRange = sn
End Sub

Anzeige
AW: Zuordnung, Variablen
15.04.2022 14:25:28
Fred
Hallo snb,
bei Ausführung kommt Fehler 13, Daten unverträglich
eine Beispielmappe hatte ich bereits hochgeladen
https://www.herber.de/forum/messages/1879673.html
Luschi hat mir einen Lösungsansatz mitgeteilt.
Dein Code ist noch kürzer, allerdings brauche ich bei meinem VBA-Wissen wohl eine Enigma, um diesen zu verstehen ....
Gruss
Fred
Anzeige
AW: Zuordnung, Variablen
15.04.2022 15:54:10
Fred
Hallo snb,
ein wohl wirklich optimal geschriebenes Makro.
Um die Daten in anderen Spalten zu setzen (in Sheet Tagesliste) sind nur die SpaltenNummern anzugeben.
Will ich die Ergebnisse End und Hz in die Spalten (von Sheet Tagesliste ) GW:GZ eintragen, schreibe ich einfachst

.Item(sp(j, 1)) = Array(sp(j, 21), sp(j, 22), sp(j, 23), sp(j, 24))
und

sn(j, 205) = .Item(sn(j, 1))(0)
sn(j, 206) = .Item(sn(j, 1))(1)
sn(j, 207) = .Item(sn(j, 1))(2)
sn(j, 208) = .Item(sn(j, 1))(3)
es muss natürlich auch drauf geachtet werden, das Quell,- Ziel Tabellen entsprechenden Umfang haben ..eventuell erweitern .....
snb, das ist wirklich ein cooler Code!!
aber mit meinem bisherigen VBA Kenntnissen unlesbar :-)
Danke für den Link (VBA Wörterbuch), habe ich in meinen Lesezeichen aufgenommen ...
Vielen Dank für deine kompetente Unterstützung, snb !!
Gruss
Fred
Anzeige
AW: Zuordnung, Variablen
15.04.2022 16:38:48
snb

es muss natürlich auch drauf geachtet werden, das Quell,- Ziel Tabellen entsprechenden Umfang haben ..eventuell erweitern .
Nö, die eigenschaft 'DataBodyRange' macht das automatisch. Auch der Code ist dadurch dynamisch.
Darum sollte man immer die eingebaute Excel Optionen benützen. .
Andere Hinweis: man könnte ein Dictionary wie ein Array mit 'Keys' betrachten. Wo man in ein Array alle 'Records' durchlaufen muss um ein 'Record' zu finden, reicht in einem Dictionary ein Key.
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige