Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
780to784
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
780to784
780to784
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Formel einfügen zu langsam
08.07.2006 09:33:04
Giuseppe
Hallo Freunde guten morgen,
wie immer wenn ich nicht weiter weiß....stelle ich euch men Problem vor:
Ich habe ein Database mit 45 Felder und mittlerweile mehr als 6000 Einträge.
Die Daten werden mittels Userform angegeben.
Bei Verlassen der UF werden durch Makro in 3 Felder Formel hinzugefügt.
Der Code habe mit Hilfe der Macrorecorder erstellt:

Sub Formel_einfügen()
' Makro1 Makro
' Makro am 21.12.2005 von G.Bonfirraro aufgezeichnet
Application.ScreenUpdating = False
Auf
Dim loLetzte As Long
With Worksheets("Database")
If IsEmpty(Cells(65536, 1)) Then
loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
End If
End With
Range("W3").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[23],Categorie!R2C[-21]:R1500C[-20],2,FALSE)),""?"",VLOOKUP(RC[23],Categorie!R2C[-21]:R1500C[-20],2,FALSE))"
Selection.AutoFill Destination:=Range(Cells(3, 23), Cells(loLetzte + 1, 23)), Type:=xlFillDefault
Range("AR3").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-42]=""."",TEXT(RC[-1],) &"" ""&TEXT(RC[-23],),TEXT(RC[-1],) &"" ""&TEXT(RC[-42],)&"" ""&TEXT(RC[-23],))"
Selection.AutoFill Destination:=Range(Cells(3, 44), Cells(loLetzte + 1, 44)), Type:=xlFillDefault
Range("AT3").Select
ActiveCell.FormulaR1C1 = _
"=IF(OR(RC[-24]="""",RC[-24]=""AAA""),RC[-25],RC[-25]&"" ""&RC[-24])"
Selection.AutoFill Destination:=Range(Cells(3, 46), Cells(loLetzte + 1, 46)), Type:=xlFillDefault
Range("B3").Select
Application.ScreenUpdating = True
Zu
End Sub

Mit 1000 Daten dauert relativ schnell, aber mit mehr als 6000 kann man dabei
einschlafen bis die Operationen durchgeführt werden (fast 10 Sekunden).
Kann man der Code so ändern, dass das ganze scheller wird?
Ich bedanke mich für eure Hilfe.
Giuseppe

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel einfügen zu langsam
ransi
HAllo
Mal für die erste aktion angepasst:
Dim loLetzte As Long
loLetzte = Range("A65536").End(xlUp).Row
Range(Cells(3, 23), Cells(loLetzte + 1, 23)).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[23],Categorie!R2C[-21]:R1500C[-20],2,FALSE)),""?"",VLOOKUP(RC[23],Categorie!R2C[-21]:R1500C[-20],2,FALSE))"

ransi
AW: Formel einfügen zu langsam
08.07.2006 09:47:01
Gerd
Hallo Guiseppe,
wie übeträgst Du die Daten aus der Userform ins Tabellenblatt ?
Wenn je einzelne Zeilen gefüllt werden, könntest Du die Formeln da
pro Zeile gleich mit eintragen lassen.
Gruß
Gerd
AW: Formel einfügen zu langsam
08.07.2006 10:07:17
Giuseppe
Hallo Gerd,
ich wollte so machen, aber kriege nicht hin.
Die Daten werden so übertragen:

Private Sub NEU_einfügen_Click()
NEU_eintragen.Enabled = True
Dateischutz_auf
If TextBox2 = "" Then
MsgBox "Inserire almeno un Nome nel campo 'Cliente'....."
TextBox2.SetFocus
Exit Sub
End If
Dim irisposta As Integer
irisposta = MsgBox("Inserire il nuovo Record con i dati di  " & TextBox2.Value & " ?", vbYesNo)
If irisposta = vbYes Then
nuovocodice
Range("B2").Value = Worksheets("NominaCampi").Range("C5")
Range("B2").End(xlDown).Offset(1, 0).Select
ActiveCell.Value = TextBox2
'ActiveCell.Offset(0, -1).Value = iRow - 2
ActiveCell.Offset(0, 1).Value = TextBox3
ActiveCell.Offset(0, 2).Value = TextBox4
ActiveCell.Offset(0, 3).Value = TextBox5
ActiveCell.Offset(0, 4).Value = TextBox6
ActiveCell.Offset(0, 5).Value = TextBox7
ActiveCell.Offset(0, 6).Value = TextBox8
ActiveCell.Offset(0, 7).Value = TextBox9
ActiveCell.Offset(0, 8).Value = TextBox10
ActiveCell.Offset(0, 9).Value = TextBox11
ActiveCell.Offset(0, 10).Value = TextBox12
ActiveCell.Offset(0, 11).Value = TextBox13
ActiveCell.Offset(0, 12).Value = TextBox14
ActiveCell.Offset(0, 13).Value = TextBox15
ActiveCell.Offset(0, 14).Value = TextBox16
ActiveCell.Offset(0, 15).Value = TextBox17
ActiveCell.Offset(0, 16).Value = TextBox18
ActiveCell.Offset(0, 17).Value = TextBox19
ActiveCell.Offset(0, 18).Value = TextBox20
ActiveCell.Offset(0, 19).Value = TextBox21
ActiveCell.Offset(0, 20).Value = TextBox22
ActiveCell.Offset(0, 21).Value = TextBox23
ActiveCell.Offset(0, 22).Value = TextBox24
If TextBox24.Value <> "" Then ActiveCell.Offset(0, 22).Value = ""
ActiveCell.Offset(0, 23).Value = TextBox25
If TextBox25.Value <> "" Then ActiveCell.Offset(0, 23).Value = ""
ActiveCell.Offset(0, 24).Value = TextBox26
If TextBox26.Value <> "" Then ActiveCell.Offset(0, 24).Value = ""
ActiveCell.Offset(0, 25).Value = TextBox27
ActiveCell.Offset(0, 26).Value = TextBox28
ActiveCell.Offset(0, 27).Value = TextBox29
ActiveCell.Offset(0, 28).Value = TextBox30
ActiveCell.Offset(0, 29).Value = TextBox31
ActiveCell.Offset(0, 30).Value = TextBox32
ActiveCell.Offset(0, 31).Value = TextBox33
ActiveCell.Offset(0, 32).Value = TextBox34
ActiveCell.Offset(0, 33).Value = TextBox35
ActiveCell.Offset(0, 34).Value = TextBox36
ActiveCell.Offset(0, 35).Value = TextBox37
ActiveCell.Offset(0, 36).Value = TextBox38
ActiveCell.Offset(0, 37).Value = TextBox39
ActiveCell.Offset(0, 38).Value = TextBox40
ActiveCell.Offset(0, 39).Value = TextBox41
ActiveCell.Offset(0, 40).Value = TextBox3.Value & " " & TextBox41.Value
ActiveCell.Offset(0, 41).Value = TextBox43
'MEIN VERSUCH DIE FORMEL EINZUFÜGEN!!!!!
'ActiveCell.Offset(0, 42).Value = ActiveCell.FormulaR1C1 = _
"=IF(RC[-42]=""."",TEXT(RC[-1],) &"" ""&TEXT(RC[-23],),TEXT(RC[-1],) &"" ""&TEXT(RC[-42],)&"" ""&TEXT(RC[-23],))"
'Selection.AutoFill Destination:=Range(Cells(loLetzte, 42), Cells(loLetzte + 1, 42)), Type:=xlFillDefault
'ActiveCell.Offset(0, 43).Value = TextBox45
Y = [a3].End(xlDown).Row
Label101.Caption = Y - 2 & " Record presenti"
' HIER ist noch code
Dim f As Integer
For f = 1 To 45
Controls("TextBox" & f) = ""
Next
Y = [a3].End(xlDown).Row
Label101.Caption = Y - 2 & " Record presenti"
Aggiornamento_CodCat
'Attualizza_AAA
End If
End If
'Aggiungi_formula
End Sub

statt die Formel die Zelle füllt sich mi FALSCH
Ciao
Giuseppe
Anzeige
AW: Formel einfügen zu langsam
ransi
HAllo guiseppe
versuchs mal so:


Option Explicit
Public Sub getestet()
Dim start As Double
Dim loLetzte As Long
start = Timer
loLetzte = Range("A65536").End(xlUp).Row
Range(Cells(3, 23), Cells(loLetzte + 1, 23)).FormulaLocal = _
    "=WENN(ISTFEHLER(SVERWEIS(AT3;Categorie!B$2:C$1500;2;FALSCH));""?"";SVERWEIS(AT3;Categorie!B$2:C$1500;2;FALSCH))"
Range(Cells(3, 46), Cells(loLetzte + 1, 46)).FormulaLocal = _
    "=WENN(ODER(V3="""";V3=""AAA"");U3;U3&"" ""&V3)"
    MsgBox Timer - start 'Gibt bei 6000 datensätzen in A1:A6000  0,4301 sekunden
End Sub


ransi
Anzeige
AW: Formel einfügen zu langsam
08.07.2006 10:15:56
Giuseppe
Hallo Ransi, danke für deine Antwort.
Es fehlt eine Formel,oder sehe ich falsch!!!!
Ciao Giuseppe
AW: Formel einfügen zu langsam
ransi
Hallo
"Es fehlt eine Formel,oder sehe ich falsch!!!!"
Stimmt, hatte ich überlesen.


Option Explicit
Public Sub getestet()
Dim start As Double
Dim loLetzte As Long
start = Timer
loLetzte = Range("A65536").End(xlUp).Row
Range(Cells(3, 23), Cells(loLetzte + 1, 23)).FormulaLocal = _
       "=WENN(ISTFEHLER(SVERWEIS(AT3;Categorie!B$2:C$1500;2;FALSCH));""?"";SVERWEIS(AT3;Categorie!B$2:C$1500;2;FALSCH))"
Range(Cells(3, 44), Cells(loLetzte + 1, 44)).FormulaLocal = _
       "=WENN(B3=""."";TEXT(AQ3;) &"" ""&TEXT(U3;);TEXT(AQ3;) &"" ""&TEXT(B3;)&"" ""&TEXT(U3;))"
Range(Cells(3, 46), Cells(loLetzte + 1, 46)).FormulaLocal = _
       "=WENN(ODER(V3="""";V3=""AAA"");U3;U3&"" ""&V3)"
    MsgBox Timer - start 'Gibt bei 10000 datensätzen in A1:A6000  0,6875 sekunden
End Sub


ransi
Anzeige
AW: Formel einfügen zu langsam
08.07.2006 11:15:33
Giuseppe
Hallo Ransi
danke für deine Antwort
es funktioniert
Allerdings braucht der code 11 sekunden.
Die beste lösung wäre die formel gleich bei übertragen einzufügen, aber ich schaffe es nicht!!!!
Danke
Giuseppe
AW: Formel einfügen zu langsam
08.07.2006 14:00:03
Gerd
Hallo Giuseppe,
probiers mal aus.
Aber gleich noch vor weg. Ich bin bestimmt kein Formelexperte.

Private Sub NEU_einfügen_Click()
Dim i As Long
Dim c As Integer
'.....Rumpfcode
Range("B2").Value = Worksheets("NominaCampi").Range("C5")
i = Range("B2").End(xlDown).Offset(1, 0).Row
If Userform1.Controls(Textbox2).Value = "" Then Exit Sub
For c = 2 To 41
Cells(i, 2).Offset(0, c - 2) = Userform1.Controls(TextBox & c).Value
If c >= 24 And c <= 26 Then
If Userform1.Controls(TextBox & c).Value <> "" Then
Cells(i, 2).Offset(0, c - 2).Value = ""
End If
End If
Next
Cells(i, 2).Offset(0, 40).Value = TextBox3.Value & " " & TextBox41.Value
Cells(i, 2).Offset(0, 41).Value = TextBox43.Value
Cells(i, 23).FormulaLocal = "=WENN(ISTFEHLER(SVERWEIS(AT3;Categorie!B$2:C$1500;2;FALSCH));""?"";SVERWEIS(AT3;Categorie!B$2:C$1500;2;FALSCH))"
Cells(i, 44).FormulaLocal = "=WENN(B3=""."";TEXT(AQ3;) &"" ""&TEXT(U3;);TEXT(AQ3;) &"" ""&TEXT(B3;)&"" ""&TEXT(U3;))"
Cells(i, 46).FormulaLocal = "=WENN(ODER(V3="""";V3=""AAA"");U3;U3&"" ""&V3)"
End Sub

Gruß Gerd
Anzeige
AW: Formel einfügen zu langsam
08.07.2006 15:41:34
Giuseppe
Vielen dank, Gerd.
Es sieht gut aus.
Ich werde es später ausprobieren (meine Frau hat heute Geburtstag!!!!)
Nochmal Danke
Ciao
Giuseppe
P.S.:VW FINALE : Drücke die Daumen für Heute Abend!!! Es sollte zu schaffen sein!!!

130 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige