Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Einfaches VBA Makro Zeilen kopieren wenn...
#1
Hallo Ihr Lieben,

ich möchte Zeilen kopieren, wenn eine gewisse Bedingung erfüllt wird. Das klappt auch bereits super mit folgendem Makro:


Code:
Public Sub Zeilen2()
Dim i As Integer
Dim cell As Range
i = 1
For Each cell In Tabelle1.Range("C:C")
If Not cell Is Nothing Then
    If cell.Value >= "80" Then
        cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
        i = i + 1
    End If
End If
Next cell
End Sub

Wie kann ich hier ein zweites Makro einbauen bzw. eine zweite Schleife, nämlich, dass Werte zwischen 30-50% in Tabelle 3 kopiert werden und weitere Werte in Tabelle 4 und 5. Dies wäre ja eine weitere For-Funktion.

Versuch:

Code:
Public Sub Zeilen2()
Dim i As Integer
Dim cell As Range
i = 1
For Each cell In Tabelle1.Range("C:C")
If Not cell Is Nothing Then
   If cell.Value >= "80" Then
       cell.EntireRow.Copy Destination:=Tabelle3.Rows(i)
       i = i + 1
If Not cell Is Nothing Then
   End If
End If
   If cell.Value > "50" And cell.Value <= "79" Then
       cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
       i = i + 1
   End If
End If

For Each cell In Tabelle1.Range("I:I")
If Not cell Is Nothing Then
   If cell.Value >= "80" Then
       cell.EntireRow.Copy Destination:=Tabelle5.Rows(i)
       i = i + 1
If Not cell Is Nothing Then
   End If
End If
   If cell.Value > "50" And cell.Value <= "79" Then
       cell.EntireRow.Copy Destination:=Tabelle4.Rows(i)
       i = i + 1
   End If
End If


Next cell
End Sub



Das klappt leider nicht Dodgy Und besteht weiterhin die Möglichkeit bei jedem Makro-Start alle Inhalt des Tabellenblattes zu löschen, weil sonst werden ja nur immer wieder Zeilen hinzugefügt.

Danke für Eure Hilfe im Voraus.

MfG
Alex
Antworten Top
#2
Hallo Alex,
Public Sub ZeilenKopieren()
 Dim iT2 As Long, iT3 As Long
 Dim rngC As Range
 For Each rngC In Tabelle1.Range("C:C")
   Select Case rngC.Value
     Case ""
       Exit For
     Case Is > 79
       iT2 = iT2 + 1
       rngC.EntireRow.Copy Destination:=Tabelle2.Rows(iT2)
     Case Is > 50
       iT3 = iT3 + 1
       rngC.EntireRow.Copy Destination:=Tabelle3.Rows(iT3)
   End Select
 Next rngC
End Sub
(01.06.2017, 09:30)Alexcel schrieb: Und besteht weiterhin die Möglichkeit bei jedem Makro-Start alle Inhalt des Tabellenblattes zu löschen, weil sonst werden ja nur immer wieder Zeilen hinzugefügt.
Huh  Huh  Huh

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Alexcel
Antworten Top
#3
Vielen Dank für deine megaschnelle Hilfe.

Das Makro funktioniert super! Auf Tabellenblatt 1 habe ich in der ersten Zeile Überschriften. Die übernimmt er für das Tabellenblatt mit den Risikos über 79%. Bei den 50-80% übernimmt er diese nicht. Ist dies noch zu verbessern? Weiterhin besteht die Frage, wie ich das Makro ausweiten kann, um mit Werten von Spalte I:I wieder genau dasselbe für andere Tabellenblätter zu machen.

Mit meiner Frage bezüglich des Löschens meinte ich: Wenn ich jetzt das Makro starte, fügt er von Tabellenblatt 1 Zeilen in Tabellenblatt 2. Fügt man jetzt allerdings andere Ausgangsdaten in Tabellenblatt 1 ein, so bleibt Tabellenblatt 2 bestehen. Mein Anliegen ist es daher, dass sich mit Ausführen des Makros alle Daten von Tabellenblatt 2-5 löschen und diese neu hinzugefügt werden, um alte Werte zu verhindern, also immer aktuell zu bleiben.

Danke!
Antworten Top
#4
Hallo Alex,
Public Sub ZeilenKopieren()
Dim iT2 As Long, iT3 As Long
Dim rngC As Range

Tabelle2.UsedRange = ""
iT2 = 1
Tabelle1.Rows(1).Copy Tabelle2.Rows(iT2)

Tabelle3.UsedRange = ""
iT3 = 1
Tabelle1.Rows(1).Copy Tabelle3.Rows(iT3)

For Each rngC In Tabelle1.Range("C:C")
Select Case rngC.Value
Case ""
Exit For
Case Is > 79
iT2 = iT2 + 1
rngC.EntireRow.Copy Destination:=Tabelle2.Rows(iT2)
Case Is > 50
iT3 = iT3 + 1
rngC.EntireRow.Copy Destination:=Tabelle3.Rows(iT3)
End Select
Next rngC

'--------------------------------------------------------

Tabelle4.UsedRange = ""
iT2 = 1
Tabelle1.Rows(1).Copy Tabelle4.Rows(iT2)

Tabelle5.UsedRange = ""
iT3 = 1
Tabelle1.Rows(1).Copy Tabelle5.Rows(iT3)

For Each rngC In Tabelle1.Range("I:I")
Select Case rngC.Value
Case ""
Exit For
Case Is > 79
iT2 = iT2 + 1
rngC.EntireRow.Copy Destination:=Tabelle4.Rows(iT2)
Case Is > 50
iT3 = iT3 + 1
rngC.EntireRow.Copy Destination:=Tabelle5.Rows(iT3)
End Select
Next rngC
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Alexcel
Antworten Top
#5
Nochmals vielen lieben Dank!

Muss mich unbedingt in VBA einlesen.

Nun ist das "Problem" (nein, kein wirkliches Problem, meckern auf sehr hohem Niveau), dass ich die Überschriften in den Tabellenblättern mit über 80% doppelt vorhanden sind, also in Zeile 1 und 2. Ist dies noch leicht auszumerzen? Ansonsten ist es auch nicht schlimm.
Antworten Top
#6
Hallo Alex,

ändere jeweils so, um die Anzahl Überschriftszeilen flexibel zu gestalten:
  Tabelle2.UsedRange = ""
 iT2 = 1 'Überschrift hat 1 Zeile
 Tabelle1.Rows(1).Resize(iT2).Copy Tabelle2.Rows(1)
 
 Tabelle2.UsedRange = ""
 iT2 = 2 'Überschrift hat 2 Zeilen
 Tabelle1.Rows(1).Resize(iT2).Copy Tabelle2.Rows(1)
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Alexcel
Antworten Top
#7
Jetzt habe ich in einem von den beiden Blättern eine Leerzeile. Das macht aber nichts! Danke.
Antworten Top
#8
(01.06.2017, 11:17)Alexcel schrieb: Jetzt habe ich in einem von den beiden Blättern eine Leerzeile. Das macht aber nichts! Danke.

Dann hast Du leider meinen Lösungsvorschlag komplett nicht verstanden. Betonung liegt auf jeweils.

Gruß Uwe
Antworten Top
#9
(01.06.2017, 11:29)Kuwer schrieb: Dann hast Du leider meinen Lösungsvorschlag komplett nicht verstanden. Betonung liegt auf jeweils.

Gruß Uwe

Das stimmt leider. Ich kenne mich mit den Begrifflichkeiten leider noch nicht aus und verstehe daher nicht genau, was ich machen soll. Was meinst du mit Überschrift hat eine Zeile?  Wieso immer CopyTabelle2? Danke!
Antworten Top
#10
(01.06.2017, 11:32)Alexcel schrieb: Was meinst du mit Überschrift hat eine Zeile?  Wieso immer CopyTabelle2? Danke!

weil ich Dir am Beispiel von Ziel-Tabelle2 zeigen wollte, dass Du mit iT2 = Anzahl Überschriftzeilen als Zahl alle Zieltabellen nach diesem beispielhaften Muster entsprechend einstellen kannst. Ich hatte das also einmal für  eine Zeile und einmal für zwei Zeilen dargestellt. Damit, dass gerade das Dich überfordert, hatte ich nun nicht gerechnet.  Blush

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste