2017-11-27 1 views
0

ich die Menge kopieren möchten und auf alle leeren Zellen über der Menge as shown in the picture, mit VBA oder Makro in MS ExcelWie eine Zelle kopieren und sie auf mehrere Zellen in Excel VBA einfügen Makro

bearbeiten einfügen: Das habe ich getan.

Sub Macro2() 
    Range("F5").Select 
    Selection.Copy 
    Range("F2:F4").Select 
    ActiveSheet.Paste 
    Range("F7").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Range("F6").Select 
    ActiveSheet.Paste 
    Range("F12").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Range("F8:F11").Select 
    ActiveSheet.Paste 
End Sub 

Dieser Code funktioniert nur für diese Tabelle. Wenn sich der Inhalt ändert, funktioniert es nicht. zB: wenn mehr Elemente hinzugefügt werden, gibt es verschiedene Ausgaben.

Kann mir jemand helfen, es zu lösen. Danke im Voraus.

+2

Bitte posten Sie alle Code, die Sie bisher versucht haben; Diese Site ist für die Zusammenarbeit gedacht, nicht für den Code-for-you-Service. – Cyril

+0

@Cyril siehe bitte bearbeiten. Ich denke, dass mein Code völlig falsch ist, deshalb habe ich ihn anfangs nicht gepostet. –

+0

Ok, wenn du dir anschaust, was du im Code machst, hast du ein paar Stücke, die mit einer Schleife gelöst werden können ... Lass uns von der Unterseite deines Tisches ausgehen; Du wirst DYNAMISCH die letzte Reihe ("LR") bestimmen wollen. Rob de Bruin hat einen großartigen Überblick darüber, wie man das macht (google die Scheiße). Von dort können Sie eine for-Schleife und eine if-Anweisung verwenden, um den Inhalt von LR nach 1 Schritt -1 zu kopieren. Bitte nehmen Sie sich etwas Zeit und versuchen Sie, Code mit diesen Informationen zu erstellen, dann können wir Ihre spezifischen Probleme korrigieren. – Cyril

Antwort

-1

Soweit die Logik des Kopierens von Werten, ich denke, das ist etwas, was Sie erarbeiten müssen. Aber ich habe ein paar Hinweise, wie ich dorthin komme.

Sie NICHT Verwendung auswählen/Kopieren/Einfügen - Verwenden Sie eine direkte Zuordnung statt

Range("G5").Resize(3, 1).Value = Range("F5").Value 

dies der einzige Wert in der Zelle stattfinden wird F5 und es verwenden, um die drei Zellen G5:G7 zuzuweisen.

auf einen bestimmten Wert in einer Tabelle auszuwählen, verwenden, um die Funktion .Cells()

For i=1 to 10 
    Range("B2").Cells(i,1).Value = Range("A2").Cells(i,1).Value 
Next i 

Um die Anzahl der Zeilen heruntergezählt oder Spalte über die Werte, die die folgenden Funktionen haben (in einem Modul angeordnet).

Public Function CountCols(ByVal r As Range) As Long 
    If IsEmpty(r) Then 
     CountCols = 0 
    ElseIf IsEmpty(r.Offset(0, 1)) Then 
     CountCols = 1 
    Else 
     CountCols = r.Worksheet.Range(r, r.End(xlToRight)).Columns.Count 
    End If 
End Function 

Public Function CountRows(ByVal r As Range) As Long 
    If IsEmpty(r) Then 
     CountRows = 0 
    ElseIf IsEmpty(r.Offset(1, 0)) Then 
     CountRows = 1 
    Else 
     CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count 
    End If 
End Function 

Um als

Dim n as Long 
' Count rows in table starting from A2 
n = CountRows(Range("A2")) 
Dim r as Range 
' Set a range reference to n×1 cells under A2 
Set r = Range("A2").Resize(n,1) 

Um zu überprüfen, ob eine Zelle, IsEmpty() leer verwenden, so wie ich in CountRows() verwendet haben, verwendet werden.

Kann Sie Stück alle diese Stücke zusammen, um ein Makro zu machen, was Sie wollen? Sie sollten: a) prüfen, wie viele Zeilen sich in der Tabelle befinden, b) in den Zellen nach unten gehen und prüfen, ob sie im Ziel leer sind und c) falls ja, aus derselben Zeile in der Quelle kopieren.

Verwandte Themen