Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
588to592
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
588to592
588to592
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Anzahl der beschriebenen Zeilen zählen
22.03.2005 11:40:25
Philipp
Hallo,
ich möchte bei jedem Start alle beschriebenen Zeilen per VBA zählen.
Ich habe das so gelöst:

Public zeilen As Double
Private Sub Workbook_Activate()
zeilen = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
MsgBox (zeilen)
End Sub

Das Problem ist, dass es sehr viele Zeilen ohne Inhalt gibt, die aber mit einer Formel beschrieben sind. Es sollen aber nur die Zeilen gezählt werden, die auch einen Inhalt haben, die die nur eine Formel haben, sollen übersprungen werden.
Wie geht das?
Danke
Philipp

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 11:54:52
Hajo_Zi
Hallo Philipp
vielleicht kannst Du mit diesem Beispiel was anfangen.
Beispieldatei
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.


AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 11:56:08
Herbert
Hallo Philipp
ev.so:


Sub zeilen_zählen()
Dim i%, lz%, x%
lz = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To lz
 If Cells(i, 2) <> "" Then
     x = x + 1
  End If
Next
MsgBox x
End Sub

     Gruß Herbert
Anzeige
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 12:03:19
Philipp
Hallo,
danke für die Antworten.
Herberts Antwort würde zwar funktionieren, aber Ihren Zweck verfehlen. Ich habe etwa 3500 Zeilen mit Formeln beschrieben, jedoch haben nur 200 einen Inhalt. Wenn ich eine Schleife ausführen lasse, soll diese möglichst nur die 200 Zeilen bearbeiten, nicht alle 3500, weil das lange Wartezeiten nach sich zieht.
Mit Herberts Lösung würde ich aber zum Zählen eine eigene Schleife benötigen, so dass die Wartezeit sogar noch länger wird.
Hajos Beispiel ist mir ehrlich gesagt noch etwas zu hoch...
Danke
Philipp
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 12:10:09
Herbert
was sind für dich "die 200 Zeilen" ?
was verstehst du unter "Wartezeit" ?
Gruß Herbert
Anzeige
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 12:14:47
Philipp
Ich habe Makros, die per Schleife, jede Zeile überprüfen, und ggf. etwas verändern. D.h. Excel führt 3500-mal zwei Befehle aus. Bei meinem 3000 MHz Rechner muss man schon etwa 10 Sekunden warten, bis die Berechnung abgeschlossen ist, und das ist zu viel. Deshalb möchte ich diese zwei Befehl nur 200-mal ablaufen lassen, da die restlichen 3300 Zeilen sowieso leer sind. Da es aber auch mal mehr oder weniger als 200 beschriebene Zeilen sein können, möchte ich, dass die beschriebenen Zeilen gezählt werden. Jedoch sollen nur die Zeilen gezählt werden, die einen Inhalt haben, die, die nur eine Formel haben, sollen ungezählt bleiben.
Ist das verständlich? Danke für die Hilfe!
Anzeige
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 12:22:06
Hajo_Zi
Hallo Philipp,
passe das MAkro von Herbert ein wenig an.
Option Explicit

Sub zeilen_zählen()
Dim LoLetzte As Long
Dim LoI As Long
LoLetzte = IIf(IsEmpty(Range("B65536")), Range("B65536").End(xlUp).Row, 65536)
For LoI = 1 To LoLetzte
If Cells(LoI, 2) = Empty Then Exit For
Next
MsgBox LoI - 1
End Sub

Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 12:40:31
Herbert
genau das macht das Makro...

Sub zeilen_zählen()
Dim i%, lz%, x%
lz = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To lz
If Cells(i, 2) <> "" Then
'du brauchst nur hier die
Zellanweisungen reinschreiben
End If
Next
End Sub

Gruß Herbert
Anzeige
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 13:36:11
Philipp
Die Geschwindigkeit hat sich dadurch noch mehr verlangsamt!
Aber trotzdem vielen Dank für die Hilfe!
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 12:43:32
Martin
Hallo Phillip,
schreibe in Deinem Makro mit der Schleife an den Anfang
Application.ScreenUpdating = False
und an das Ende
Application.ScreenUpdating = True
Dann sollte die Schleife in Nullkommanix durchlaufen werden und kannst auf das Ermitteln der Zeilen mit Zahlen verzichten.
Gruß
Martin Beck
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 13:35:04
Philipp
Das hatte ich sowieso schon dastehen. Aber auch so läuft es noch zu langsam.
Die Schleife umfasst genau 5 Befehle, das macht insgesamt also 17500 Befehle, die abgearbeitet werden müssen. Das dauert halt.
Anzeige
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 13:38:45
Hajo_Zi
Hallo Philipp,
falls ich noch rechnen kann sind es 3 Befehle und mal 200 Zeilen das wären bei mir 600 Befehle und nicht 17500. Irgendwo hattest Du mal was geschrieben von 200 Zeilen.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 13:48:20
Martin
Hallo Philipp,
dann poste mal Deinen Schleifen-Code und ein Beispiel für die Formeln.
Gruß
Martin Beck
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 13:59:11
Philipp
Ja, sehr gute Idee, sorry, dass ich nicht gleich drauf gekommen bin. Also:

Sub formelaendern()
ws = ActiveSheet.Name
Application.ScreenUpdating = False
SW = 3510                                       'Schrittweite festlegen
Länge = 0
Schritt = UserForm3.Label2.Width / SW         'Schrittbreite pro Aktualisierung
If tochter = True Then
For a = 2 To 3510
Worksheets(ws).Cells(a, 3).FormulaLocal = "=SÄUBERN('imp consult_name'!C" & a & ")"
Worksheets(ws).Cells(a, 15).FormulaLocal = "=SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH)"
Länge = Länge + Schritt
UserForm3.Label3.Width = Länge
DoEvents
Next a
tochter = False
Else
For a = 2 To 3510
Worksheets(ws).Cells(a, 3).FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH));SÄUBERN('imp consult_name'!C" & a & ");SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH))"
Worksheets(ws).Cells(a, 15).FormulaLocal = "=wenn(istfehler(SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH));SVERWEIS(C" & a & ";'imp tochter'!$B$2:$D$3510;3;FALSCH);SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH))"
Länge = Länge + Schritt
UserForm3.Label3.Width = Länge
DoEvents
Next a
tochter = True
End If
Application.ScreenUpdating = True
Unload UserForm3
End Sub

UserForm3, SW etc. brauche ich für einen Fortschrittsbalken, der eingeblendet wird, weil es halt doch relativ lange dauert.
In dem zu bearbeitenden Dokument sollen halt 3510 Zeilen verfügbar (!) sein. Meist werden jedoch nicht alle benötigt. Deshalb sollen nur in allen gefüllten Zellen die Formeln geändert werden.
Naja, aber es ist nicht so wahnsinnig wichtig, ich danke Euch aber für die tolle Hilfe!
Anzeige
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 14:14:25
Martin
Hallo Philipp,
also den Code habe ich jetzt nicht analysiert, aber setzte doch mal an den Anfang
Application.Calculation = xlCalculationManual
und an das Ende
Application.Calculation = xlCalculationAutomatic
um das Neuberechnen der Formeln zur Laufzeit zu unterbinden.
Noch eine Frage: Stehen in allen 3510 Zeilen Formeln und wie unterscheiden sich im Ergebnis die 200 "richtigen" von dem Rest? Stehen die ca. 200 "richtigen" Zeilen immer direkt untereinander, z.B. von Zeile 2 bis 201?
Gruß
Martin Beck
Genial! Danke!
22.03.2005 14:30:30
Philipp
Super, jetzt geht es richtig schnell!
Noch eine Frage: Stehen in allen 3510 Zeilen Formeln und wie unterscheiden sich im Ergebnis die 200 "richtigen" von dem Rest? Stehen die ca. 200 "richtigen" Zeilen immer direkt untereinander, z.B. von Zeile 2 bis 201?
Ja, in allen 3510 steht fast die gleiche Formel, und zwar kopiere ich eigentlich nur aus einem anderen Tabellenblatt die Werte rüber (mit SÄUBERN, siehe Quellcode). Da in diesem andern Tabellenblatt nur 200 Zeilen belegt sind, sind die anderen 3210 leer. Sie sind nur da, damit, falls in dem Quellblatt einmal was eingetragen wird, diese auch gesäubert hier erscheinen. Verständlich :-) ? Die "richtigen" Zeilen stehen alle untereinander.
Aber nun funktioniert es ja, so wie ich es gern hätte, und das reicht. Danke nochmal an alle!
Wo wir aber gerade bei Application.Calculate sind: Kann ich mit dem Befehl auch meine sich auf diese Tabelle beziehenden Pivottabellen automatisch aktualisieren lassen, damit ich das nicht per Hand bzw. durch einen Neustart machen muss?
Ich hab mal einfach an das Codeende Application.Calculate gehängt, aber die Pivot-Tabellen werden dadurch leider nicht aktualisiert (sie sind übrigens in einem anderen Tabellenblatt).
Anzeige
Nochmal genial! Danke!
22.03.2005 14:52:46
Philipp
Habe es selbst rausgefunden:
Mit dem Befehl Worksheets("Tabelle1").PivotTables("PivotTable1").RefreshTable kann man die Tabelle automatisch aktualisieren. Diesem Befehl kann man dann ein Button zuordnen, oder man bindet es einfach in irgendein anderes Makro ein.
Noch ein Verbesserungsvorschlag
22.03.2005 14:53:17
Martin
Hallo Philipp,
teste mal, ob Du mit
z = Columns("C:C").SpecialCells(xlCellTypeFormulas, 3).Count + 1
MsgBox z
die letzte Zeile mit Werten in Spalte C findest. Wenn ja, ersetzte in Deinen Schleifen 3510 durch z.
Zu den Pivottabellen mach besser einen neuen Thread auf, ich glaube nicht, daß hier noch jemand mitliest.
Gruß
Martin Beck
Anzeige
AW: Noch ein Verbesserungsvorschlag
22.03.2005 15:28:27
Philipp
Wenn ich es so mache, erscheint in der MsgBox 3510, also alle Zeilen! Offensichtlich kann VBA nicht zwischen Formel und Inhalt unterscheiden! Aber das macht ja nun nichts mehr, da es ja doch so schnell geht!
Danke.
AW: Noch ein Verbesserungsvorschlag
22.03.2005 15:45:00
Martin
Hallo Philipp,
was steht denn ab Zeile 202 als Ergebnis der Formelberechnung in der Zelle (0, LEER, Fehlermeldung,...)? Excel kann im Prinzip schon unterscheiden.
Gruß
Martin Beck
AW: Noch ein Verbesserungsvorschlag
22.03.2005 15:51:02
Philipp
Die Zeilen sind leer, denn in der Quelltabelle sind die entsprechenden Zeilen auch leer.
wie schnell läuft es jetzt ?
22.03.2005 16:13:44
Herbert
Hallo Philipp,
wie schnell läuft das jetzt bei dir,
bei mir dauert das Einfügen von 400 Formeln 0,11 sec...
dafür braucht man eigentlich keinen Fortschrittsbalken...
du bist zuerst mit einer etwas falschen Fragestellung
in das Forum gegangen,aber du hast das ja in einem Beitrag selber
erkannt...
wenn du jetzt noch Hilfe brauchst,mußt du den gesamten, von
dir jetzt offensichtlich optimierten Code reinkopieren.
Gruß Herbert
Anzeige
AW: wie schnell läuft es jetzt ?
23.03.2005 09:39:42
Philipp
Hallo,
danke, dass du dich noch um mich kümmerst.
Es dauert jetzt etwa 4 Sekunden. Vorher waren es bestimmt 20 Sekunden. Ich habe aber einen 3 GHz-Rechner, darum wundert es mich, dass es bei dir so schnell geht. Also nochmal der jetzige Code.

Sub tochterfirma()
ws = ActiveSheet.Name
Application.ScreenUpdating = False
SW = 3710                                       'Schrittweite festlegen
Länge = 0
Schritt = UserForm3.Label2.Width / SW         'Schrittbreite pro Aktualisierung
Application.Calculation = xlCalculationManual
If tochter = True Then
For a = 2 To 3510
Worksheets(ws).Cells(a, 3).FormulaLocal = "=SÄUBERN('imp consult_name'!C" & a & ")"
Worksheets(ws).Cells(a, 15).FormulaLocal = "=SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH)"
Länge = Länge + Schritt
UserForm3.Label3.Width = Länge
DoEvents
Next a
tochter = False
Else
For a = 2 To 3510
Worksheets(ws).Cells(a, 3).FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH));SÄUBERN('imp consult_name'!C" & a & ");SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH))"
Worksheets(ws).Cells(a, 15).FormulaLocal = "=wenn(istfehler(SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH));SVERWEIS(C" & a & ";'imp tochter'!$B$2:$D$3510;3;FALSCH);SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH))"
Länge = Länge + Schritt
UserForm3.Label3.Width = Länge
DoEvents
Next a
tochter = True
End If
'Pivots aktualisieren
Worksheets("Firmen").PivotTables("Firmen").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable6").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable5").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable9").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable3").RefreshTable
Worksheets("Firmen").Columns("J:J").Font.Bold = True
Worksheets("Firmen").Columns("A:A").Font.Bold = True
Länge = Länge + Schritt * 100
UserForm3.Label3.Width = Länge
DoEvents
Worksheets("Firmen").Range("A7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("C7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("E7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("G7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("J6").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Länge = Länge + Schritt * 100
UserForm3.Label3.Width = Länge
DoEvents
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Unload UserForm3
End Sub

Ich brauche zwar keine Hilfe mehr, weil ich sehr zufrieden bin, aber ich danke dir trotzdem!
MfG
Philipp
AW: wie schnell läuft es jetzt ?
23.03.2005 11:18:02
Herbert
Hallo Philipp,
ich hab das jetzt interesse halber so gut es ging(ohne Pivot u.ohne Sortieren) simuliert,
sodaß zwar alle 3510 Zellen durchgelaufen werden, wo allerdings nur die
bearbeitet werden, die größer 0 sind, da läuft es bei einem 1GHz-Rechner in 0,3 sec...
und alles was mit dem Fortschrittsbalken zusammenhing, hatte ich auch deaktiviert...
aber du bist ja schon zufrieden...
Gruß Herbert
AW: Noch ein Verbesserungsvorschlag
22.03.2005 16:16:45
Martin
Hallo Philipp,
die Zellen sind vermutlich nicht leer, denn SÄUBERN liefert einen Leerstring von der Länge 0. Das könntest Du in Deiner Schleife abprüfen und bei Länge = 0 mit Exit For abbrechen.
Gruß
Martin Beck
AW: Noch ein Verbesserungsvorschlag
23.03.2005 10:37:02
Philipp
Wie lautet der Code dafür?
AW: Codebeispiel
23.03.2005 15:14:16
Martin
Hallo Philipp,
vor die Zeile If Tochter ... folgenden Code

For i = 2 To 3510
If Len(Cells(i, 3).Value) = 0 Then
z = i - 1
Exit For
End If
Next i

und in Deinen beiden For-Schleifen statt 3510 z.
Gruß
Martin Beck
AW: Codebeispiel
23.03.2005 15:28:47
Philipp
Hallo Martin,
offensichtlich sind meine Zellen nicht mit 0 gefüllt, weil die Geschwindigkeit gleich bleibt und außerdem wurde mit diesem Code keine Box angezeigt:

For a = 2 To z
If Len(Cells(a, 2).Value) = 0 Then
MsgBox ("test")
z = a - 1
Exit For
End If
Worksheets(ws).Cells(a, 3).FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH));SÄUBERN('imp consult_name'!C" & a & ");SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH))"
Worksheets(ws).Cells(a, 15).FormulaLocal = "=wenn(istfehler(SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH));SVERWEIS(C" & a & ";'imp tochter'!$B$2:$D$3510;3;FALSCH);SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH))"
Länge = Länge + Schritt
UserForm3.Label3.Width = Länge
DoEvents
Next a

Aber mir ist soeben aufgefallen, dass ich die anderen 3310 Zellen eigentlich sowieso nicht auslassen will, da sie ja auch immer die aktuelle Formel haben sollen.
Belassen wir es also dabei.
Vielen Dank für die Hilfe
Philipp
AW: Korrektur Deiner Umsetzung
23.03.2005 16:06:21
Martin
Hallo Philipp,
Du hast meinen Vorschlag nicht richtig umgesetzt, so war's gemeint:

Sub tochterfirma()
ws = ActiveSheet.Name
Application.ScreenUpdating = False
SW = 3710                                       'Schrittweite festlegen
Länge = 0
Schritt = UserForm3.Label2.Width / SW         'Schrittbreite pro Aktualisierung
Application.Calculation = xlCalculationManual
For i = 2 To 3510
If Len(Cells(i, 3).Value) = 0 Then
z = i - 1
Exit For
End If
Next i
If tochter = True Then
For a = 2 To z
Worksheets(ws).Cells(a, 3).FormulaLocal = "=SÄUBERN('imp consult_name'!C" & a & ")"
Worksheets(ws).Cells(a, 15).FormulaLocal = "=SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH)"
Länge = Länge + Schritt
UserForm3.Label3.Width = Länge
DoEvents
Next a
tochter = False
Else
For a = 2 To z
Worksheets(ws).Cells(a, 3).FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH));SÄUBERN('imp consult_name'!C" & a & ");SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH))"
Worksheets(ws).Cells(a, 15).FormulaLocal = "=wenn(istfehler(SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH));SVERWEIS(C" & a & ";'imp tochter'!$B$2:$D$3510;3;FALSCH);SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH))"
Länge = Länge + Schritt
UserForm3.Label3.Width = Länge
DoEvents
Next a
tochter = True
End If
'Pivots aktualisieren
Worksheets("Firmen").PivotTables("Firmen").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable6").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable5").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable9").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable3").RefreshTable
Worksheets("Firmen").Columns("J:J").Font.Bold = True
Worksheets("Firmen").Columns("A:A").Font.Bold = True
Länge = Länge + Schritt * 100
UserForm3.Label3.Width = Länge
DoEvents
Worksheets("Firmen").Range("A7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("C7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("E7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("G7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("J6").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Länge = Länge + Schritt * 100
UserForm3.Label3.Width = Länge
DoEvents
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Unload UserForm3
End Sub

Wenn Du die Formel immer in allen Zeilen bis 3510 haben willst, brauchst Du im übrigen keine Schleife. Trage die Formel in Zeile 2 ein und kopiere sie bis Zeile 3510. Das geht dann so schnell, daß Du die Useform rauswerfen kannst.
Gruß
Martin Beck
AW: Korrektur Deiner Umsetzung
23.03.2005 16:18:37
Philipp
Jetzt geht das ganze zwar unheimlich schnell, leider passiert jedoch auch nichts mehr...
Deine Schleife mit i und z will mir irgendwie nicht ganz einleuchten.
AW: Korrektur Deiner Umsetzung
23.03.2005 16:29:03
Martin
Hallo Philipp,
ich werden den Verdacht nicht los, daß Du uns relevante Informationen unwissentlich "vorenthältst". Die Schleife prüft, ab wann die Zellinhalte in Spalte C die Länge (nicht den Wert) 0 haben. Das sollte dann der Fall sein, wenn die Säbern-Formel auf eine leere Zelle zugreift. Das dies so sei, hast Du irgendwann schon mal geschrieben. Wenn nun dieser Fall gar nicht eintritt, ist z gleich 0 und Deine beiden Schleifen werden nicht durchlaufen.
Kannst Du mal die Datei hochladen, das Problem ist bestimmt ganz einfach zu lösen, wenn man die "wahren" Zellinhalte kennt.
Gruß
Martin Beck
AW: Korrektur Deiner Umsetzung
23.03.2005 16:36:30
Philipp
Hallo,
es ist echt total lieb, dass du dich so kümmerst.
Die Datei hätte ich schon tausendmal hochgeladen, aber ich kann das nicht, weil das streng vertrauliche Daten sind. Darum muss ich Code, den ich veröffentliche, auch immer erst etwas bearbeiten. Vielleicht ist mir dabei ein entscheidender Fehler unterlaufen (obwohl ich es immer genau prüfe).
Sei mir deshalb bitte nicht böse, wenn ich deine Hilfe ablehne(n muss).
Vielen Dank
Philipp
AW: Ohne Schleifen
23.03.2005 16:37:40
Martin
Hallo Philipp,
hier noch die Alternative ohne Schleifen und Userform (ungetestet):

Sub tochterfirma2()
ws = ActiveSheet.Name
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If tochter = True Then
Worksheets(ws).Cells(2, 3).FormulaLocal = "=SÄUBERN('imp consult_name'!C" & a & ")"
Worksheets(ws).Cells(2, 15).FormulaLocal = "=SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH)"
tochter = False
Else
Worksheets(ws).Cells(2, 3).FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH));SÄUBERN('imp consult_name'!C" & a & ");SVERWEIS(SÄUBERN('imp consult_name'!C" & a & ");'imp tochter'!$A$1:$B$3510;2;FALSCH))"
Worksheets(ws).Cells(2, 15).FormulaLocal = "=wenn(istfehler(SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH));SVERWEIS(C" & a & ";'imp tochter'!$B$2:$D$3510;3;FALSCH);SVERWEIS(C" & a & ";$Q$2:$R$3510;2;FALSCH))"
tochter = True
End If
Worksheets(ws).Cells(2, 3).Copy Destination:=Worksheets(ws).Range(Cells(3, 3), Cells(3510, 3))
Worksheets(ws).Cells(2, 15).Copy Destination:=Worksheets(ws).Range(Cells(3, 15), Cells(3510, 15))
'Pivots aktualisieren
Worksheets("Firmen").PivotTables("Firmen").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable6").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable5").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable9").RefreshTable
Worksheets("Firmen").PivotTables("PivotTable3").RefreshTable
Worksheets("Firmen").Columns("J:J").Font.Bold = True
Worksheets("Firmen").Columns("A:A").Font.Bold = True
Worksheets("Firmen").Range("A7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("C7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("E7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("G7").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Worksheets("Firmen").Range("J6").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
Orientation:=xlTopToBottom
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Gruß
Martin Beck
AW: Anzahl der beschriebenen Zeilen zählen
22.03.2005 12:11:45
Hajo_Zi
Hallo Philipp,
die Code beruhen auf dem gleichen Prinzip. Bei meinen Code wird nur der Fehler ausgeschlossen das Zelle 65536 auch belegt sein kann und ich gehe von hinten nach vorne und Herbert hat die andere Reihenfolge gewählt.
Da bei Dir nur 200 Zeilen belegt sind, würde ich Herberts Variante vorziehen. 200 Zellen prüfen dürfte ja nich so lange dauern.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

216 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige