Anzeige
Archiv - Navigation
1172to1176
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
Inhaltsverzeichnis

Begriffe gegen Zahlen austauschen zu langsam

Begriffe gegen Zahlen austauschen zu langsam
VolkerM
Hallo Forum,
mit folgenden Code werden Begriffe in einem Bereich abgefragt und gegen hinterlegte Zahlen ausgetauscht:
Private Sub Wertigkeit()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Dim rng As Range, rngCell As Range
Dim fct As WorksheetFunction
Dim var As Variant
Set rng = Sheets("Index").UsedRange
Set fct = WorksheetFunction
For Each rngCell In rng.Cells
If Not IsEmpty(rngCell) And fct.CountIf(rng, rngCell.Value) > 0 Then
var = Application.Match(rngCell.Value, Sheets("Daten").Columns(2), 0)
If Not IsError(var) Then
rngCell.Value = Sheets("Daten").Cells(var, 8).Value
End If
End If
Next rngCell
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.Calculate
End With
End Sub

Beispieldatei: https://www.herber.de/bbs/user/71294.xlsm
Im Blatt Daten beträgt die Anzahl der Begriffe ca. 1200.
Die Begriffe im Blatt Index stehen ab Spalte 3 untereinander und bis zu 25 in einer Zeile.
Insgesamt sind ca. 2500 Zeilen und sehr viele Leerzellen vorhanden
Der Code läuft zwar, aber es dauert unendlich lange.
Kann man den Code beschleunigen, oder einen schnelleren nutzen ?
Vielen Dank im Voraus.
Gruß Volker

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Begriffe gegen Zahlen austauschen zu langsam
28.08.2010 10:08:04
ransi
Hallo Volker
Um das Ganze zu beschleunigen kannst du mit der replace-Methode arbeiten.
Ist aber immer nocht recht langsam.
Versuch mal sowas:
Public Sub machs()
Dim arrIn
arrIn = Sheets("Index").UsedRange
Dim L As Long
Dim I As Integer
Dim vntStrings
Dim objDic As Object
vntStrings = Sheets("Daten").Range("A1").CurrentRegion
Set objDic = CreateObject("Scripting.dictionary")
For L = LBound(vntStrings) To UBound(vntStrings)
    objDic(vntStrings(L, 2)) = vntStrings(L, 8)
Next
For L = LBound(arrIn) To UBound(arrIn)
    For I = LBound(arrIn, 2) To UBound(arrIn, 2)
        If arrIn(L, I) <> "" Then
            If objDic.exists(arrIn(L, I)) Then
                arrIn(L, I) = objDic(arrIn(L, I))
            End If
        End If
    Next
Next
Sheets("Index").UsedRange = arrIn
End Sub



ransi
Anzeige
AW: Begriffe gegen Zahlen austauschen zu langsam
28.08.2010 10:18:47
VolkerM
Hallo ransi
Dein Code ist doch erheblich schneller.
Vielen Dank
Volker
einfache und schnelle Lösung (Formel!)
28.08.2010 14:20:58
Daniel
Hi
hier noch ne andere Lösungsvariante, ist zwar etwas langsamer als Ransis methode (bei mir 3 sec zu 1,5 sec), dafür aber leichter zu verstehen (kein Spezialwissen erforderlich "Dictionary") und im Prinzip auch ohne Makro von Hand in vertretbarer Zeit machbar (2-3 min, wenn man die Formel kennt).
Sub test3()
Sheets("Daten").UsedRange.Sort Key1:=Sheets("Daten").Cells(2, 2), order1:=xlAscending, Header:= _
xlYes
Sheets.Add after:=Sheets("Index")
With ActiveSheet.Range(Sheets("Index").UsedRange.Address)
Sheets("Index").UsedRange.Copy
.PasteSpecial xlPasteFormats
.FormulaR1C1 = "=if(Index!RC="""","""",If(VLookUP(Index!RC,Daten!C2,1,1)=Index!RC,VLookUp(Index! _
RC,Daten!C2:C8,7,1),Index!RC))"
.Copy
.PasteSpecial xlPasteValues
End With
Application.DisplayAlerts = False
Sheets("Index").Delete
Application.DisplayAlerts = True
ActiveSheet.Name = "Index"
End Sub

Gruß, Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige