Excel Wenn Wert in Spalte dann kopieren Zelle Makros ?

1 Antwort

Ist Dir klar, dass A:J in Mappe1 dann nur von B bis K erscheint, nicht bis M?

Teste mal diesen auf die Schnelle und ganz simpel gestrickten Code:

Sub KopierenNachMappe1()
Dim lZeileX As Long
Dim iZeileM1 As Integer
Dim lEnde As Long

lEnde = UsedRange.Rows.Count
For lZeileX = 1 To lEnde
If Cells(lZeileX, 13) = "U" Then
With Sheets("Mappe1")
For iZeileM1 = 34 To 81
If .Cells(iZeileM1, 2) = "" Then Exit For
Next iZeileM1
Range(Cells(lZeileX, 1), Cells(lZeileX, 10)).Copy .Cells(iZeileM1, 2)
End With
End If
Next lZeileX
End Sub

Der Code muss in das Modul jedes Tabellenblattes das kopiert werden soll.
Du kannst ihn natürlich auch zusammenfassen, oder ein Sub schreiben, dass alle anderen aufruft.

Hilft Dir das?

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

DerNeue2017 
Beitragsersteller
 15.09.2017, 06:21

Hallo Oubyi, vielen Dank für die rasche hilfe.

Ich habe nun den von dir geschriebnen Code probiert, jedoch bleibt dieser bei lEnde = UsedRange.Rows.Count hängen.

Zu dem Thema A:J in Mappe1 auf B:K kopieren,

ja ist mir bewusst ich möchte nur den Text der vorigen Spalten kopieren ab M ist es nur ein Wert der eben sagt du sollst kopiert werden oder nicht.

Um mein Problem nochmal genauer zu erläutern, ich habe auf der ersten Arbeitsmappe (Startbildschirm) einen Button und eine Fläche von B34:M81 in diese Fläche sollen später die kopierten Werte.

Auf den anderen 3 Arbeitsmappen sind Werte hinterlegt und dahinter in der Spalte M eine Buchstabe (U) der aussagt du wirst in den Startbildschirm kopiert oder nicht.

0
Oubyi, UserMod Light  15.09.2017, 13:58
@DerNeue2017

jedoch bleibt dieser bei lEnde = UsedRange.Rows.Count hängen.

Da müsstest Du mir schon genauer erklären, wie dieses "hängen" sich äußert.

0
Oubyi, UserMod Light  18.09.2017, 14:29
@DerNeue2017

Ups.
Das liegt wohl daran, dass ich den Code im Modul des Tabellenblattes stehen habe und Du in einem externen Modul.
Teste mal:

 lEnde = ActiveSheet.UsedRange.Rows.Count

oder

lEnde = Sheets("Mappe2").UsedRange.Rows.Count

oder schreibe Deine Code auch ins Modul des Tabellenblattes.

1
DerNeue2017 
Beitragsersteller
 19.09.2017, 06:58
@Oubyi, UserMod Light

Dankeschön der Makros arbeitet nun, jedoch aus unerklärlichen Gründen wird nichts kopiert.

0
DerNeue2017 
Beitragsersteller
 19.09.2017, 11:23
@DerNeue2017
Dim lZeileX As Long
Dim iZeileN1 As Integer
Dim lEnde As Long

lEnde = Sheets("Schlüsselmanagement").UsedRange.Rows.Count
For lZeileX = 1 To lEnde
    If Cells(lZeileX, 14) = "S" Then
        With Sheets("Startbildschirm")
            For iZeileN1 = 34 To 81
                If .Cells(iZeileN1, 2) = "" Then Exit For
            Next iZeileN1
            Range(Cells(lZeileX, 1), Cells(lZeileX, 10)).Copy .Cells(iZeileN1, 2)
        End With
    End If
Next lZeileX

0
DerNeue2017 
Beitragsersteller
 19.09.2017, 11:33
@DerNeue2017

Im Starbildschirm befinden sich die Buttons und das Feld in das Kopiert werden sollte. Dieses Feld ist von B34:M81.

In der Schlüsselmanagement Mappe sind die Werte von A6:J40, die ich auf den Startbildschirm kopieren möchte,  wenn in der Spalte N jetzt zb. S steht oder in M zb. U steht, j nach Button.

Der Makros läuft jedoch kommen im Startbildschirm keine Werte zum Vorschein. Obwohl ich in N drei "S" stehen habe.

0
Oubyi, UserMod Light  19.09.2017, 14:37
@DerNeue2017

Wenn die Buttons im Sheet Stardbilschirm sind, brauchst Du DARAUF nicht zu referenzieren, aber Du musst genauestens auf Schlüsselmanagment referenzieren.
Teste mal ob es so klappt:

Private Sub CommandButton1_Click()

Dim lZeileX As Long
Dim iZeileN1 As Integer
Dim lEnde As Long

With Sheets("Schlüsselmanagement")
lEnde = .UsedRange.Rows.Count
For lZeileX = 1 To lEnde
If .Cells(lZeileX, 14) = "S" Then
For iZeileN1 = 34 To 81
If Cells(iZeileN1, 2) = "" Then Exit For
Next iZeileN1
.Range(.Cells(lZeileX, 1), .Cells(lZeileX, 10)).Copy Cells(iZeileN1, 1)
End If
Next lZeileX
End With
End Sub

Die führenden Punkte für das With sind hier wichtig.

Klappt es?

1
DerNeue2017 
Beitragsersteller
 20.09.2017, 07:02
@Oubyi, UserMod Light

Es klappt :-) vielen Dank.

Es gibt nur einen kleinen Fehler.

Im Startbildschirm fängt er nicht in der B34 sondern in A34 zum reinkopieren an. Und irgendwie kopiert er mir nicht alle S markierten Spalten in den Startbildschirm. Es wird nur die 9te Zeile von Schlüsselmanagement kopiert.

0
Oubyi, UserMod Light  20.09.2017, 15:37
@DerNeue2017

Im Startbildschirm fängt er nicht in der B34 sondern in A34 zum reinkopieren an.

Stimmt, da habe ich nicht aufgepasst. Ändere das so:

...   .Copy Cells(iZeileN1, 2)

Und irgendwie kopiert er mir nicht alle S markierten Spalten in den
Startbildschirm. Es wird nur die 9te Zeile von Schlüsselmanagement
kopiert.

Das kann ich so nicht nachvollziehen.
Wird denn nur diese EINE Zeile eingefügt? Oder fängt er dort erst an zu suchen? Ist das die erste Zeile mit einem S?
Beschreibe es vielleicht nochmal genauer.
Und gehe den Code mal mit F8 Step by Step durch, vielleicht erkennst Du den Fehler.

0
DerNeue2017 
Beitragsersteller
 21.09.2017, 06:39
@Oubyi, UserMod Light

Wenn ich den Satz auf

... .Copy Cells(iZeileN1,2) ändere kommt Laufzeitfehler 1004 Kann Teil einer verbundenen Zelle nicht ändern.

Was das zweite angeht, ich habe den Code mit F8 überprüft. Die Abfrage von S funktioniert, jedoch wenn er kopiert kopiert er immer wieder über die erste Zeile im Startbildschirm. Er springt nicht eine Zelle weiter nach dem kopieren sonder kopiert einfach über die erste Zeile.

 

0
Oubyi, UserMod Light  21.09.2017, 14:48
@DerNeue2017


  .Range(.Cells(lZeileX, 1), .Cells(lZeileX, 10)).Copy Cells(iZeileN1, 2)



... .Copy Cells(iZeileN1,2) ändere kommt Laufzeitfehler 1004 Kann Teil einer verbundenen Zelle nicht ändern.


Wenn Du VBA-Code ausführst, solltest Du auf keine Fall Verbundene Zellen in dem Bereich haben, das gibt fast immer Probleme.
Statt die Zellen zu verbinden, geh auf:

Zellen formatieren/ Ausrichtung/ Horizontal/ Über Auswahl zentrieren


Mit der Schleife

            For iZeileN1 = 34 To 81
If Cells(iZeileN1, 2) = "" Then Exit For
Next iZeileN1


wird die Zeile, in die kopiert werden soll, so festgelegt, dass es die erste Zelle im Bereich B34:B81 ist, die leer ist.
Es wird also nur in der Spalte B nachgesehen, ob da schon was steht. Nur wenn nicht, wird dort etwas eingefügt.
Du musst also sicherstellen, dass nach dem ersten kopieren in B34 etwas steht, sonst wird wieder hier eingefügt.
Wenn nicht sichergestellt ist, dass in B (bzw. im kopierten Bereich in Spalte A) etwas steht, klappt das nicht.

Ich sehe gerade noch, dass Du einmal davon sprichst ab Spalte A zu kopieren und vorher in der Frage, ab Spalte B.
Falls also nur ab Spalte B kopiert werden soll, dann ändere den Code so (Sonst probiere mal selber mit den Spaltenangaben nach dem Komma bei Cells(Zeile  , Spalte) herum :


            .Range(.Cells(lZeileX, 2), .Cells(lZeileX, 10)).Copy Cells(iZeileN1, 2)




1
DerNeue2017 
Beitragsersteller
 22.09.2017, 06:56
@Oubyi, UserMod Light

Perfekt, es war rein die Formatierung Schuld. Es funktioniert ohne Probleme. Vielen Danke für die tolle Hilfe.

0