Registriert seit: 02.08.2018
Version(en): 2010
Hallo,
Ich muss für meine Arbeit große Datensätze verarbeiten mit deutlich über 300.000 Zeilen. Dazu möchte ich gern in einer Spalte eine Nummerierung von 1 bis zur letzten beschriebenen Zeile vornehmen und habe mir diesbezüglich folgendes Makro geschrieben:
Option Explicit
Sub Hauptprogramm()
Dim Spalte As Integer
Dim StartWert As Integer
Dim StartZeile As Variant
Dim LetzteZeile As Variant
Dim i As Integer
Spalte = 8
StartWert = 1
StartZeile = 39
LetzteZeile = Cells(Rows.Count, "A").End(xlUp).Row
'Cells(Rows.Count, "A").End(xlUp).Row
For i = StartZeile To LetzteZeile
Cells(i, Spalte).Value = StartWert
StartWert = StartWert + 1
Next i
End Sub
Wenn ich das Makro ausführen will bekomme ich den Laufzeitfehler 6 angezeigt. Hat jemand eine Idee woran das liegen könnte? Über lösungsvorschläge wäre ich sehr dankbar! :)
Registriert seit: 02.12.2017
Version(en): Office 365
Wenn die Variable "Startzeile" größer ist als die Variable "Letzte Zeile" ist ein "for i = Startzeile to Letztezeile" nicht möglich! Außer du lässt rückwärts zählen mit "Step -1"
Sonst klappt das einwandfrei!
Registriert seit: 21.06.2016
Version(en): 2021
02.08.2018, 23:58
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2018, 23:58 von Ego.)
Hallo S...,
"Laufzeitfehler 6" bedeutet Überlauf.
Der Datentyp "Integer" kann nur Ganzzahlen von -32.768 bis 32.767.
Generell solltest du für Zeilen- und Spaltennummern den Datentyp "Long" (von -2.147.483.648 bis 2.147.483.647) nutzen.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Registriert seit: 02.08.2018
Version(en): 2010
(02.08.2018, 23:40)Frogger1986 schrieb: Wenn die Variable "Startzeile" größer ist als die Variable "Letzte Zeile" ist ein "for i = Startzeile to Letztezeile" nicht möglich! Außer du lässt rückwärts zählen mit "Step -1"
Sonst klappt das einwandfrei!
Die Variable Startzeile ist ja nur 39. Die Variable LetzteZeile soll ja die letzte beschriebene Zeile im Dokument abbilden, das wäre dann 332.000.
Von daher müsste das doch eigentlich passen?
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
03.08.2018, 07:32
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2018, 07:32 von RPP63.)
Moin!
Zunächst mal hat Dir Ego ja den Überlauf erklärt.
ABER:
Ich mag mir gar nicht vorstellen, wie lange dieses Kleinod von Makro bei 330.000 Zeilen durchrödelt …
5 Minuten?
Hier mal zwei Varianten, die das Gleiche machen, aber höchstens 0,1 Sekunden benötigen:
1. Formel-Lösung, Formel gegen Wert getauscht:Sub Formel()
With Range("H39:H" & Cells(Rows.Count, 1).End(xlUp).Row - 38)
.Formula = "=Row(A1)"
.Copy: .PasteSpecial xlPasteValues
End With
End Sub
2. Datenreihe, nochmal erheblich schneller:Sub Datenreihe()
Dim Letzte As Long
Letzte = Cells(Rows.Count, 1).End(xlUp).Row - 38
With Range("H39")
.Value = 1
.Resize(Letzte, 1).DataSeries
End With
End Sub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Sandrof90
Registriert seit: 14.05.2017
Version(en): MS Office Prof. Plus 2016_32-Bit
03.08.2018, 07:44
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2018, 08:00 von hddiesel.)
Hallo Sandrof90,
der Überlauf bezieht sich auf die beiden Variablen
i und
StartWertSo geht es, aber die Lösung von Ralf ist ein mehrfaches Schneller.
Code:
Sub Hauptprogramm()
Dim Spalte As Integer
Dim StartZeile As Integer
Dim StartWert As Long
Dim LetzteZeile As Long
Dim i As Long
Spalte = 8
StartWert = 1
StartZeile = 39
LetzteZeile = Cells(Rows.Count, "A").End(xlUp).Row
For i = StartZeile To LetzteZeile
Cells(i, Spalte).Value = StartWert
StartWert = StartWert + 1
Next i
End Sub
Folgende(r) 1 Nutzer sagt Danke an hddiesel für diesen Beitrag:1 Nutzer sagt Danke an hddiesel für diesen Beitrag 28
• Sandrof90
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
03.08.2018, 07:47
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2018, 07:47 von RPP63.)
Oops, Karl war schneller …
Um Deinen Einwand zu erklären:
(03.08.2018, 06:10)Sandrof90 schrieb: Die Variable Startzeile ist ja nur 39.
Richtig! :19:
Es geht bei Dir aber um die Laufvariable i, die falsch als Integer deklariert ist!
Ich rate Dir aber dringend, Dir meine Vorschläge genau anzuschauen.
Allgemein:
Nutze IMMER eingebaute Excel-Methoden (auch per VBA)!
Die Jungs von MS können nämlich besser als wir programmieren … :21:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Sandrof90
Registriert seit: 02.08.2018
Version(en): 2010
03.08.2018, 08:24
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2018, 08:37 von Zwergel.
Bearbeitungsgrund: unnützes Zitat entfernt
)
[quote pid='129142' dateline='1533274356']
Wow funktioniert bestens! Habt vielen Dank!
[/quote]
Registriert seit: 02.12.2017
Version(en): Office 365
Also bei mir lief das Makro..
Registriert seit: 13.04.2014
Version(en): 365
03.08.2018, 08:38
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2018, 08:43 von BoskoBiati.)
hi,
Zitat:Also bei mir lief das Makro..
jo, Käpsele. Dann setze mal einen Wert in A40000 und probiere es nochmal!
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.