VBA Liste in Tabelle1 eintragen Tabelle2 bereinigen

Betrifft: VBA Liste in Tabelle1 eintragen Tabelle2 bereinigen
von: Sedat
Geschrieben am: 03.10.2020 01:05:16
Hallo Freunde,
Bei der Abarbeitung der Täglichen Punkte Liste, können wir nur per Zeilen Angabe die Werte Eintragen.
Wir würden es Gerne Per VBA Schleife die Liste einfach durchlaufen lassen, bekommen es aber nicht hin.
kann uns jemand behilflich sein.
am Beispiel sehen sie es funktioniert wenn wir z.B die Zeile 4 in die Zelle eintrage und den VBA macro starten wird es eingetragen und gesäubert.
nur bei dem Versuch uber eine Schlefe sind wir getolpert. grinz.
Bitten um Hilfe?
der File ist 400 KB gross konnte es nicht kleiner machen. daher ein Google Drive Link.
Am Beispiel,
https://drive.google.com/file/d/1AjS2fIwMQInfavKVktS3rVgvbZvVw_rM/view?usp=sharing
' ---
Sub Eintragung_Schleife()
Dim Zelle As Range
Dim a As Long
a = 4 'Start Zeile
With Worksheets("SpielReport")
For Each Zelle In .Range("P4:P10") ' Alle Zeilen die "OK" beinhalten Range(P4:P3000)
If Zelle = "OK" Then
With ActiveCell
'
' ---- Start Loop und Eintragen -----
'
Dim aktZeile, vglZeile, vglSpalte As Integer
vglZeile = Cells(a, 18) 'Spalte R
vglZeile2 = Cells(a, 19) 'Spalte S
vglSpalte = Cells(a, 20) 'Spalte T
vglSpalte2 = Cells(a, 28) 'Spalte AB
vglRange = Cells(a, 29)
Wert = Cells(a, 27) 'Spalte AA
aktZeile = vglZeile
With ThisWorkbook.Sheets("MMS")
While .Cells(aktZeile, vglSpalte) <> ""
aktZeile = aktZeile + 1
Wend
.Cells(aktZeile, vglSpalte) = Cells(a, 27) 'Spalte AA
.Cells(aktZeile, vglSpalte + 11) = Cells(a, 24) 'Spalte X
.Cells(aktZeile, vglSpalte + 22) = Cells(a, 23) 'Spalte W
End With
Dim FindString As String
Dim rng As Range
FindString = Wert
If Trim(FindString) <> "" Then
With Sheets("MMS").Range(vglRange) 'Sheet spalte Cells(a, Q) .Range($AF$14:$AF$15) _
Spalte Z
Set rng = .Find(What:=FindString, _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
If Not rng Is Nothing Then
rng = "" ' Wert löschen innerhalb der .Range $AF$14:$AF$15)
Else
'
End If
End With
End If
'
' ---- Ende Eintrag Ende Loop -----
'
End With
a = a + 1
End If
Next
End With
End Sub
'---
Lieben Gruss

Betrifft: AW: VBA Liste in Tabelle1 eintragen Tabelle2 bereinigen
von: ralf_b
Geschrieben am: 03.10.2020 01:58:32
Sub Eintragung_Schleife()
Dim Zelle As Range
Dim a As Long
a = 4 'Start Zeile
Dim aktZeile, vglZeile, vglSpalte As Integer
For Each Zelle In Worksheets("SpielReport").Range("P4:P10") ' Alle Zeilen die "OK" _
beinhalten Range(P4:P3000)
If Zelle = "OK" Then
'
' ---- Start Loop und Eintragen -----
'
a = Zelle.Row
vglZeile = Cells(a, 18) 'Spalte R
vglZeile2 = Cells(a, 19) 'Spalte S
vglSpalte = Cells(a, 20) 'Spalte T
vglSpalte2 = Cells(a, 28) 'Spalte AB
vglRange = Cells(a, 29)
Wert = Cells(a, 27) 'Spalte AA
aktZeile = vglZeile
With ThisWorkbook.Worksheets(Cells(a, "Q").Value)
While .Cells(aktZeile, vglSpalte) <> ""
aktZeile = aktZeile + 1
Wend
.Cells(aktZeile, vglSpalte) = Cells(a, 27) 'Spalte AA
.Cells(aktZeile, vglSpalte + 11) = Cells(a, 24) 'Spalte X
.Cells(aktZeile, vglSpalte + 22) = Cells(a, 23) 'Spalte W
End With
Dim FindString As String
Dim rng As Range
FindString = Wert
If Trim(FindString) <> "" Then
With Sheets(Cells(a, "Q").Value).Range(vglRange) 'Sheet spalte Cells(a, Q) .Range($AF$ _
14:$AF$15) Spalte Z
Set rng = .Find(What:=FindString, _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
If Not rng Is Nothing Then
rng = "" ' Wert löschen innerhalb der .Range $AF$14:$AF$15)
Else
'
End If
End With
End If
'
' ---- Ende Eintrag Ende Loop -----
'
End If
Next
End Sub

Betrifft: AW: VBA Liste in Tabelle1 eintragen Tabelle2 bereinigen
von: Sedat
Geschrieben am: 03.10.2020 10:38:58
Hallo ralf_b,
Super
Grossen Dank für die schnelle Hilfe,
Jetzt Funktioniert die schleife fast so wie gewünscht.
musste die
.Cells(aktZeile, vglSpalte + 1) = Cells(a, 27)
+1 hinzufügen.
Neues Problem, es bereinigt
nicht die Doppelten Werte in den Zeilen und Spalten.
Die Werte aus der Zeile dürfen nur einmal in der Range zein.
falls an der Zeile ein Andere Wert zuvor eingetragen war soll es in der Zeile Eingetragen werden was noch leer ist
z.B. Der Zweite Wert aus der Quelle muss nach der Zeile 14 und zwischen 14 und 26 eingetragen werden in die MMB und in der MMS darf innerhalb der gleichen Range entfernt werden.
Das ging vorher auch nicht kannst du uns das auch reinschreiben wenn es keine große umstände macht.
Lieben Gruss

Betrifft: definiere "keine großen Umstände" .....
von: ralf_b
Geschrieben am: 03.10.2020 11:06:42
Du darfst deine Funktionsbeschreibung gern nochmal überdenken und umformulieren. Und zwar so das Jemand, der davon keine Ahnung hat, dies nachvollziehen kann. Und zwar vollständig.
Du bastelst an Code herum ohne einen Plan(Ahnung) zu haben, weil es ja nicht so schwer sein kann. Und dann werden so wischi washi Angaben gemacht. wie z.b.
"Die Werte aus der Zeile dürfen nur einmal in der Range zein." Welcher Range?
Der Zweite Wert aus der Quelle muss nach der Zeile 14 und zwischen 14 und 26 eingetragen werden in die MMB und in der MMS darf innerhalb der gleichen Range entfernt werden. Hä? Bahnhof!
Du hast es geschafft .Cells(aktZeile, vglSpalte + 1) anzupassen. D.h. du weist zumindest wie man Anpassungen vornimmt. Deshalb nehme ich an das es dir nicht schwer fallen wird die gewünschte Funktionalität durch googlen zusammen zu suchen. z.b. Bereich durchsuchen nach bestimmten Wert Also los. kleiner Tip: sowas steht schon in deiner Schleife drin. Learning by doing!

Betrifft: AW: definiere "keine großen Umstände" .....
von: Sedat
Geschrieben am: 03.10.2020 11:47:52
Hallo Ralf,
Entschuldige Bitte,
Das ich die ( + 1 ) gefunden habe war reiner zufall, nach der Augenscheinlicher sicht nur Logisch für mich da Zwei weitere (+ 1) angaben nachfolgend sichtbar waren ;-) hab ich es ausprobiert und es ging.
mit der Range war dieser Part:
Dim FindString As String
Dim rng As Range
FindString = Wert
If Trim(FindString) <> "" Then
With Sheets(Cells(a, "Q").Value).Range(vglRange) 'Sheet spalte Cells(a, Q) .Range($AF$ _
14:$AF$15) Spalte Z
Set rng = .Find(What:=FindString, _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
If Not rng Is Nothing Then
rng = "" ' Werte löschen innerhalb der .Range $AF$14:$AF$15) falls Identisch
Else
'
End If
End With
Ich habe wirklich kein Plan wie es zu machen ist.
Lieben Gruß

Betrifft: AW: definiere "keine großen Umstände" .....
von: Sedat
Geschrieben am: 03.10.2020 12:15:23
Sorry, mit Löschen meine ich Ändern bzw. erstezen mit ""
rng = "" ' Werte löschen innerhalb der .Range $AF$14:$AF$15) falls Identisch
dieser beitrag kommt der sache näher, wieder kein plan weiss nicht wo einzubinden ist.
https://www.herber.de/forum/archiv/1376to1380/1377417_Suchen_und_Ersetzen_Makro.html