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

Schleife Liste abarbeiten

Schleife Liste abarbeiten
15.01.2020 09:45:17
Wolfgang
Hallo!
Ich habe in Excel eine Arbeitsblatt EINGABE und ein Arbeitsblatt DATEN.
In EINGABE habe ich übersichtlich alle Eingabefelder angeordnet und die Zellen auch benannt (z.B "Firma", "Straße", "PLZ", ...)
In DATEN habe ich eine Tabelle mit den dazupassenden Tabellenüberschriften (z.B "Firma", "Straße", "PLZ", ...).
Per Klick soll eine VBA Routine alle Einträge vom EINGABE Arbeitsblatt in das DATEN Arbeitsblatt in die obester Reihe nach der Überschrift - als in Reihe 2 - eintragen und die Eingebefelder im Arbeitsblatt EINGABE für die nächte Eingebe wieder löschen.
Per MacroAufzeichnung habe ich das Grundsätzlich schon gelöst - das Problem ist einerseits die Übersichtlichkeit des Ergebnisses und die Wartung ... wenn z.B. ein Datenfeld dazu kommt.
Range("Firma").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DATEN").Select
Range("F2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("EINGABE").Select
Ziel ist es also, das Ganze übersichtlicher zu gestalten. Dazu dachte ich zum Einen an eine Funktion, welche das Kopieren von A nach B übernimmt wie:
Function ZelleKopieren(strZelleA, strZelleB)
Zum Anderen dachte ich an eine Liste mit Ausgangsort und Zielort, welche in einer Schleife abgearbeitet wird:
z.B ("Firma"; F2; "Straße"; G2; "PLZ"; H2; ....)
(Dass in im Datenarbeitsblatt auch mit Zellennamen arbeite ist wohl nicht möglich, da ich die Zeile vor der ganzen Routine erst erst einfüge. Dass ich "intelligent" die Überschrift der Spalte heranziehe (wo ja "Firma" steht), halte ich dann für wahrscheinlich überhaupt kompliziert. Mir wäre aber mit der Listenversion schon sehr, sehr geholfen.)
Mir bin für jeden Tipp dankbar. Ich stehe ich einfach an.
Vielen Dank und liebe Grüße,
Wolfgang

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife Liste abarbeiten
15.01.2020 09:52:11
Werner
Hallo,
dann lade bitte mal deine Datei hier hoch.
Gruß Werner
AW: Schleife Liste abarbeiten
15.01.2020 10:53:47
Nepumuk
Hallo Wolfgang,
ich bin davon ausgegangen dass sich in Zeile 1 Überschriften befinden und die Daten in Zeile 2 beginnen.
Option Explicit
Public Sub Wolfgang()
Dim avntValues As Variant, vntItem As Variant
Dim objDictionary As Object, objWorksheet As Worksheet
With Worksheets("Tabelle1") 'Tabellenname anpassen !!!
If .FilterMode Then Call .ShowAllData
avntValues = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp)).Value2
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
For Each vntItem In avntValues
objDictionary.Item(Key:=vntItem) = vbNullString
Next
avntValues = objDictionary.Keys
Set objDictionary = Nothing
For Each vntItem In avntValues
Set objWorksheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
objWorksheet.Name = vntItem
Call .Rows(1).AutoFilter(Field:=6, Criteria1:=vntItem)
Call .AutoFilter.Range.Copy(Destination:=objWorksheet.Cells(1, 1))
Next
Set objWorksheet = Nothing
Call .ShowAllData
End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Schleife Liste abarbeiten
15.01.2020 11:03:24
Nepumuk
Oooooooooops
falscher Beitrag. Entschuldigung.
Gruß
Nepumuk
AW: Schleife Liste abarbeiten
15.01.2020 11:13:03
Wolfgang
Hallo Nepumuk!
Vielen Dank .. blicke aber nicht durch. Bin mir nicht sicher, ob das zu meiner Aufgabe passt. Hast du meine hochgeladene Excel Datei gesehen? Habe einen Link eingefügt.
https://www.herber.de/bbs/user/134414.xlsm
Liebe Grüße,
Wolfgang
AW: Schleife Liste abarbeiten
15.01.2020 12:04:49
Werner
Hallo Wolfgang,
würdest du bitte im anderen Forum einen Link hier ins Herber Froum setzen. Denn wenn schon Crossposting, dann bitte mit entsprechender Verlinkung. Oder ist es dir egal, dass u.U. unnötige Doppelarbeit erfolgt, weil die Helfer nichts voneinander wissen?
Da ich jetzt schon was geschrieben habe:
Option Explicit
Public Sub Übertragen()
Dim loLetzte As Long, i As Long, z As Long
Dim varArray() As Variant
Application.ScreenUpdating = False
With Worksheets("Eingabe")
loLetzte = .Cells(.Rows.Count, "B").End(xlUp).Row
ReDim varArray(loLetzte)
For i = 2 To loLetzte
If .Cells(i, "B")  "" Then
varArray(z) = .Cells(i, "C")
z = z + 1
End If
Next i
.Range(.Cells(2, "C"), .Cells(loLetzte, "C")).ClearContents
End With
With Worksheets("Daten")
.Range("A" & .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row) _
.Resize(, loLetzte) = varArray
End With
End Sub
Gruß Werner
Anzeige
AW: Schleife Liste abarbeiten
16.01.2020 09:18:14
Wolfgang
Vielen Dank Werner!
Habe einen Link einfügt und versuche den Informationsstatus auf beiden Seiten gleich zu halten ;)
Deine Lösung wirkt für mich sehr interessant. Traue mich aber nicht, diese bei mir anzuwenden, da ich sie zu wenig verstehe. (Aber was nicht ist kann ja noch werden).
Suche noch nach einer übersichtlichen, für VBA-Einsteiger leichter verständlichen Lösung.
Wünsche noch einen schönen Tag,
Wolfgang
AW: Schleife Liste abarbeiten
16.01.2020 12:50:52
Werner
Hallo Wolfgang,
so, ich habe jetzt noch ein paar kleine Änderungen am Code vorgenommen, z.B. die Größe des Array exakt festgelegt, und mit Kommentaren versehen.
Option Explicit
Public Sub Übertragen()
Dim loLetzte As Long, i As Long, z As Long
Dim varArray() As Variant, loLeer As Long
Application.ScreenUpdating = False
With Worksheets("Eingabe")
'letzte belegte Zelle in Spalte B ermitteln
loLetzte = .Cells(.Rows.Count, "B").End(xlUp).Row
'Anzahl Leerzellen im Bereich B1 bis B letzte belete Zelle ermitteln
loLeer = WorksheetFunction.CountBlank(.Range(.Cells(1, "B"), .Cells(loLetzte, "B")))
'Schleifenzähler für Array auf 1 setzen
z = 1
'Anzahl der Einträge ins Array festlegen
ReDim varArray(1 To loLetzte - loLeer)
'Schleife über die Eingabefelder
For i = 2 To loLetzte
'Wenn Eintrag in Zelle in B
If .Cells(i, "B")  "" Then
'den Eintrag aus C ins Array schreiben
varArray(z) = .Cells(i, "C")
'Zähler für Arrayeintrag hochsetzen
z = z + 1
End If
'nächste Zelle in B
Next i
'Eingabefelder leeren
.Range(.Cells(2, "C"), .Cells(loLetzte, "C")).ClearContents
End With
With Worksheets("Daten")
'Array in die Tabelle schreiben, unter letztem Eintrag
.Range("A" & .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row) _
.Resize(, loLetzte - loLeer) = varArray
End With
End Sub
Du hälst wohl deinen aufgezeichneten Code für verständlicher / übersichtlicher?
Wenn du von VBA wenig bis gar keine Ahnung hast, dann solltest du in einem Forum wohl besser nicht nachfragen.
Da wird es dir nämlich immer wieder passieren, dass du Codebeispiele bekommtst, die du nicht verstehst.
Und zur Anmerkung: traue ich mich nicht ihn bei mir anzuwenden...
Wo ist das Problem, von deiner Datei eine Sicherungskopie anzulegen und dann damit den Code zu testen?
Was du im Übrigen immer machen solltest bei solchen Sachen.
Mach jetzt damit was du willst.
Gruß Werner
Anzeige
AW: Schleife Liste abarbeiten
16.01.2020 13:01:01
Werner
Hallo Wolfgang,
ich antworte hier mal auf deinen Beitrag im VBA-Forum, dort werde ich aber ab jetzt nichts mehr posten, wenn, dann nur hier.
"Wartbare Lösung..."
Bei dem Code braucht man nichts zu warten, auch wenn weitere Eingabefelder dazu kommen.
Das Einzige, auf was du achten mußt:
Die Reihenfolge der Eingabefelder von oben nach unten, müssen mit der Reihenfolge der Eintragungen in der Tabelle von links nach rechts übereinstimmen.
Gruß Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige