Clever-Excel-Forum

Normale Version: Wenn dann Makro
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallöchen,

hast Du mal die Buchstaben bis F durchgezählt? Ich komme da nicht auf 13.
If .Cells(lRow, 13).Value = "Due" Then

und eine ganze Zeile zu kopieren sind auch nicht nur ein paar Daten
.Rows(lRow).Copy Destination:=Sheets("Maturities").Rows(lN)

Wenn Du nur die Inhalte von A bis I kopieren und ab Spalte A einfügen willst, dann
.Cells(lRow,1).Resize(1,9).Copy Destination:=Sheets("Maturities").Cellss(lN,1)
Ich habe das natürlich jetzt stark vereinfacht und als Beispiel aufgefasst. Da ist es doch klar, dass die Nummern vom Anfang nicht mehr passen.

Kopiert werden sollen nur einzelne Zellen aus einer Reihe und nicht die ganze Zeile.
Hallöchen,

hat's denn nun geholfen? Wenn Du etwas vereinfacht beschreibst, sollte es das Ziel immer noch verdeutlichen und nicht verschleiern. Als Antworter sieht man dann nämlich für die Lösung Vereinfachungen, die am Ziel vorbeigehen.
Ich habe jetzt mal komplett bei null gestartet anhand des neuen Beispiels:

Sub Maturity()

Dim Tickets As Worksheet    ' das Quell-Tabellenblatt - die Herkunft der Daten
Dim Maturities As Worksheet    ' das Ziel-Tabellenblatt - die Ausgabe
Dim iRow As Long
Dim i As Long
Dim j As Long

Set Tickets = ThisWorkbook.Worksheets("Tickets")
Set Maturities = ThisWorkbook.Worksheets("Maturities")

For iRow = 2 To Tickets.Cells(Rows.Count, 6).End(xlUp).Row
    If Tickets.Range("F" & iRow).Value = "due" Then Maturities.Range("A" & iRow).Value = Tickets.Range("A" & iRow).Value
Next iRow

End Sub


Dies läuft, aber jetzt haben sich neue Fragen ergeben:
1) Wie kann ich weitere Zellen von Tickets nach Maturities kopieren also den THEN Teil erweitern?
2) Wie steuere ich die Zellen in Maturities genau an, so dass es hier keine Leerzellen gibt und alles fein untereinander steht? Momentan steht es an der gleichen Stelle wie im Tab "Tickets"

Die erste Frage habe ich nun selbst gefunden:

Sub Maturity()

Dim Tickets As Worksheet    ' das Quell-Tabellenblatt - die Herkunft der Daten
Dim Maturities As Worksheet    ' das Ziel-Tabellenblatt - die Ausgabe
Dim iRow As Long
Dim i As Long
Dim j As Long

Set Tickets = ThisWorkbook.Worksheets("Tickets")
Set Maturities = ThisWorkbook.Worksheets("Maturities")

For iRow = 2 To Tickets.Cells(Rows.Count, 6).End(xlUp).Row
    If Tickets.Range("F" & iRow).Value = "due" Then
    Maturities.Range("A" & iRow).Value = Tickets.Range("A" & iRow).Value
    Maturities.Range("B" & iRow).Value = Tickets.Range("C" & iRow).Value
    End if
Next iRow

End Sub



Aber für die zweite Frage der Anordnung bräuchte ich eure Hilfe nochmals :)
Hallöchen,

1) Da könntest Du bei unzusammenhängenden Bereichen mehrere Schritte nehmen
Code:
If Tickets.Range("F" & iRow).Value = "due" Then
          Maturities.Range("A" & iRow).Value = Tickets.Range("A" & iRow).Value
          Maturities.Range("X" & iRow).Value = Tickets.Range("B" & iRow).Value
    End If

2) Da hattest Du mit dem n schon den richtigen Ansatz. Vor der Schleife setzt Du n auf 1 oder einen anderen Ausgangswert. Dann beim If so weiter:
Code:
If Tickets.Range("F" & iRow).Value = "due" Then
          Maturities.Range("A" & n).Value = Tickets.Range("A" & iRow).Value
          Maturities.Range("X" & n).Value = Tickets.Range("B" & iRow).Value
          n=n+1
    End If

Den Startwert von n könntest Du auch wie iRowMax ermitteln, nur dann eben auf dem Blatt Maturities un d1 dazu zählen damit Du die letzte Datenzeile nicht überschreibst.
Hallo

in dieser Fassung funktioniert das Makro bei mir einwandfrei.  Ich habe aber noch eine Option eingefügt die alten Daten zu löschen.
Wenn das nicht erwünscht ist den mit "##" markierten Teil einfach löschen. Dann werden neue Daten unten angehangen.

mfg  ast 123

Code:
Sub Maturity()

Dim Tickets As Worksheet       ' das Quell-Tabellenblatt - die Herkunft der Daten
Dim Maturities As Worksheet    ' das Ziel-Tabellenblatt - die Ausgabe
Dim iRow As Long
Dim Zeile As Long

Set Tickets = ThisWorkbook.Worksheets("Tickets")
Set Maturities = ThisWorkbook.Worksheets("Maturities")
Zeile = Maturities.Cells(Rows.Count, 1).End(xlUp).Row + 1

'## ggf. Bereich A-C zuerst löschen! Ist das gewünscht??
Maturities.Range("A4:C" & Zeile).ClearContents
Zeile = 4   'Variable auf 1. Zeile setzen
'## oder diesen Teil komplett löschen, dann wird unten angehangen!

For iRow = 2 To Tickets.Cells(Rows.Count, 6).End(xlUp).Row
    If Tickets.Range("F" & iRow).Value = "due" Then
    Maturities.Range("A" & Zeile).Value = Tickets.Range("A" & iRow).Value
    Maturities.Range("B" & Zeile).Value = Tickets.Range("C" & iRow).Value
    Maturities.Range("C" & Zeile).Value = Tickets.Range("E" & iRow).Value
    Zeile = Zeile + 1
    End If
Next iRow

End Sub
Vielen Dank für eure Hilfen!!!! Jetzt läuft es auch bei mir.
Seiten: 1 2