2017-02-10 5 views
2

Ich versuche, einen VBA-Code zu schreiben, um den Bereich A1: A10000 mit den Zahlen 1 bis 10000 automatisch zu füllen, ohne 1 in A1 und 2 in A2 einzugeben, um einen Bereich zu erstellen.Excel VBA Füllsäule von 1 bis N

Grundsätzlich, ich brauche einen Code, der wie folgt aussieht:

Set fillRange = Worksheets("Sheet1").Range("A1:A10000") 
(1,2).AutoFill Destination:=fillRange 

Natürlich funktioniert das nicht, aber man bekommt, was es.

Antwort

1

Schreiben und zum/vom Arbeitsblatt zu lesen sind einige der langsamste Aktionen, die Sie durchführen können. Zeiteffizienten Code zu schreiben bedeutet soviel wie möglich im Speicher zu tun.

Versuchen Sie, alle Ihre Werte in ein Array schreiben, dann das Ganze in einem Schuss in das Arbeitsblatt schreiben, so etwas wie dieses:

Sub printRange(total As Integer) 
Dim i, myRange() As Integer 
ReDim myRange(1 To total) 
    For i = 1 To total: 
     myRange(i) = i 
Next i 

'Use Transpose to shift the 1d array into a column 

Worksheets("Sheet1").Range("A1:A" & UBound(myRange)).Value = _ 
Application.WorksheetFunction.Transpose(myRange) 

End Sub 

Für insgesamt = 10000, ist dieser ziemlich viel läuft sofort, sogar auf einem zehn Jahre alte Dinosaurier Desktop.

+0

DAS ist, was ich gesucht habe. –

+0

@PeterPeanut, ich bin froh, dass Sie die Hilfe gefunden haben, die Sie brauchten. Wie R3UK bereits früher angemerkt hat, ziehen Sie bitte in Betracht, die Antwort und/oder Abstimmung zu akzeptieren, wie in dieser Erklärung zur Funktionsweise von SO angegeben. http://stackoverflow.com/tour – SgtStens

1

Können Sie nicht eine einfache Schleife verwenden?

For i = 1 to 10000 
    Worksheets("Sheet1").Cells(i, 1) = i 
Next i 
+0

Tim, Entschuldigung für die späte Antwort. Ich würde lieber keine einfache Schleife verwenden, da sie auf 80 Blättern ausgeführt werden müsste und jedes Blatt etwa 20.000 Zeilen hat. Es würde zu viel Zeit in Anspruch nehmen und ich versuche es so schnell wie möglich zu beschleunigen. –

2
Dim fillRange As Range 
Dim i As Long 

Set fillRange = Worksheets("Sheet1").Range("A1:A10000") 
With fillRange 
    For i = .Cells(1, 1).Row To .Cells(.Rows.Count, 1).Row 
     .Cells(i, 1).Value = i 
    Next i 
End With 'fillRange 

Oder mit AutoFill:

With Worksheets("Sheet1") 
    Range("A1").Value = 1 
    Range("A2").Value = 2 
    Range("A1:A2").AutoFill Destination:=Range("A1:A10000") 
End With 'Worksheets("Sheet1") 
+0

Jetzt funktionieren alle diese Antworten. Allerdings dachte ich, dass Code schneller wäre, wenn ich die Eingabe in for-to-loop automatisch füllen kann. I ist die Geschwindigkeit gleich, dann vergiss es. –

+1

@PeterPeanut: AutoFill ist nicht so schnell, Sie können die 2 Optionen vergleichen (ich habe Code hinzugefügt)! Aber bitte nehmen Sie sich einen Moment Zeit, um zu erfahren, wie SO funktioniert (Antworten annehmen und später abstimmen): http://stackoverflow.com/tour – R3uK

0
Dim fillRagne As Range 
Set fillRange = Range(Cells(1, 1), Cells(1000, 1)) 
For Each cell in fillRange 
    cell.value = cell.Row 
Next cell 
+0

Ich habe nach einer automatischen Einfügung gefragt, weil mein Code ungefähr 70 Blätter durchläuft, und es ungefähr 10 Minuten dauert Lauf. Also, ich fragte mich, ob Autofill schneller war als For-to-Loop. Ich habe es getestet, und es war nicht, so denke ich, für-zu bleibt. –

+0

Obwohl dieser Code das Problem lösen könnte, sollte eine gute Antwort auch eine Erklärung enthalten. – BDL

2

dies sollte genug

Sie könnte schnell sein verwenden Sie die folgende Funktion

Function FillNumbers(rng As Range) As Variant 
    Dim i As Long 
    ReDim nmbrs(1 To rng.Rows.Count) 

    For i = 1 To UBound(nmbrs) 
     nmbrs(i) = i 
    Next 
    FillNumbers = Application.Transpose(nmbrs) 
End Function 

auf folgende Weise

With Worksheets("Sheet1").Range("A1:A10000") 
    .Value = FillNumbers(.Cells) 
End With 
+0

Schön, du hast mich dazu geschlagen! Große Köpfe denken ähnlich. +1 für Sie für die Geschwindigkeit, es dauerte eine Minute, um mich daran zu erinnern, es zu transponieren, ich konnte nicht herausfinden, warum meins 10000 Zeilen Nullen ausgab. – SgtStens

+0

@SgtStens, kein "großer Verstand" überhaupt meinerseits! nur Hunderte von "Versuch und Irrtum" (und merkwürdigerweise viel mehr Fehler als Versuche!). Aber warten wir auf Peter Peanut Wahl ... – user3598756

Verwandte Themen