Anzahl der beschriebenen Zeilen zählen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm Label MsgBox
Bild

Betrifft: Anzahl der beschriebenen Zeilen zählen von: Philipp
Geschrieben am: 22.03.2005 11:40:25

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
Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Hajo_Zi
Geschrieben am: 22.03.2005 11:54:52

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.




Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Herbert H.
Geschrieben am: 22.03.2005 11:56:08

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


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Philipp
Geschrieben am: 22.03.2005 12:03:19

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


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Herbert H.
Geschrieben am: 22.03.2005 12:10:09

was sind für dich "die 200 Zeilen" ?
was verstehst du unter "Wartezeit" ?

Gruß Herbert


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Philipp
Geschrieben am: 22.03.2005 12:14:47

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!


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Hajo_Zi
Geschrieben am: 22.03.2005 12:22:06

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.


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Herbert H.
Geschrieben am: 22.03.2005 12:40:31

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


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Philipp
Geschrieben am: 22.03.2005 13:36:11

Die Geschwindigkeit hat sich dadurch noch mehr verlangsamt!
Aber trotzdem vielen Dank für die Hilfe!


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Martin Beck
Geschrieben am: 22.03.2005 12:43:32

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


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Philipp
Geschrieben am: 22.03.2005 13:35:04

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.


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Hajo_Zi
Geschrieben am: 22.03.2005 13:38:45

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.


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Martin Beck
Geschrieben am: 22.03.2005 13:48:20

Hallo Philipp,

dann poste mal Deinen Schleifen-Code und ein Beispiel für die Formeln.

Gruß
Martin Beck


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Philipp
Geschrieben am: 22.03.2005 13:59:11

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!


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Martin Beck
Geschrieben am: 22.03.2005 14:14:25

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


Bild


Betrifft: Genial! Danke! von: Philipp
Geschrieben am: 22.03.2005 14:30:30

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).


Bild


Betrifft: Nochmal genial! Danke! von: Philipp
Geschrieben am: 22.03.2005 14:52:46

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.


Bild


Betrifft: Noch ein Verbesserungsvorschlag von: Martin Beck
Geschrieben am: 22.03.2005 14:53:17

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


Bild


Betrifft: AW: Noch ein Verbesserungsvorschlag von: Philipp
Geschrieben am: 22.03.2005 15:28:27

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.


Bild


Betrifft: AW: Noch ein Verbesserungsvorschlag von: Martin Beck
Geschrieben am: 22.03.2005 15:45:00

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


Bild


Betrifft: AW: Noch ein Verbesserungsvorschlag von: Philipp
Geschrieben am: 22.03.2005 15:51:02

Die Zeilen sind leer, denn in der Quelltabelle sind die entsprechenden Zeilen auch leer.


Bild


Betrifft: wie schnell läuft es jetzt ? von: Herbert H.
Geschrieben am: 22.03.2005 16:13:44

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


Bild


Betrifft: AW: wie schnell läuft es jetzt ? von: Philipp
Geschrieben am: 23.03.2005 09:39:42

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


Bild


Betrifft: AW: wie schnell läuft es jetzt ? von: Herbert H.
Geschrieben am: 23.03.2005 11:18:02

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


Bild


Betrifft: AW: Noch ein Verbesserungsvorschlag von: Martin Beck
Geschrieben am: 22.03.2005 16:16:45

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


Bild


Betrifft: AW: Noch ein Verbesserungsvorschlag von: Philipp
Geschrieben am: 23.03.2005 10:37:02

Wie lautet der Code dafür?


Bild


Betrifft: AW: Codebeispiel von: Martin Beck
Geschrieben am: 23.03.2005 15:14:16

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


Bild


Betrifft: AW: Codebeispiel von: Philipp
Geschrieben am: 23.03.2005 15:28:47

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


Bild


Betrifft: AW: Korrektur Deiner Umsetzung von: Martin Beck
Geschrieben am: 23.03.2005 16:06:21

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


Bild


Betrifft: AW: Korrektur Deiner Umsetzung von: Philipp
Geschrieben am: 23.03.2005 16:18:37

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.


Bild


Betrifft: AW: Korrektur Deiner Umsetzung von: Martin Beck
Geschrieben am: 23.03.2005 16:29:03

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


Bild


Betrifft: AW: Korrektur Deiner Umsetzung von: Philipp
Geschrieben am: 23.03.2005 16:36:30

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


Bild


Betrifft: AW: Ohne Schleifen von: Martin Beck
Geschrieben am: 23.03.2005 16:37:40

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


Bild


Betrifft: AW: Anzahl der beschriebenen Zeilen zählen von: Hajo_Zi
Geschrieben am: 22.03.2005 12:11:45

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.


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Anzahl der beschriebenen Zeilen zählen"