VBA-Lösungen ohne SVERWEIS, mit Array
21.03.2013 07:41:13
Erich
Hi Selma,
probier auch mal diese beiden:
Sub test3()
Dim sp1 As Long, sp2 As Long, ze1 As Long, ze2 As Long
Dim arrDa, arrDb, arrW, zz As Long, varF
ze1 = 2
ze2 = Cells(Rows.Count, 1).End(xlUp).Row
sp1 = ActiveCell.Column
sp2 = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column + 1
With Sheets("Daten")
arrDa = .Cells(2, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row - 1)
arrDb = .Cells(2, 2).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row - 1)
End With
With ActiveSheet
arrW = .Cells(2, sp1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row - 1)
For zz = 1 To UBound(arrW)
If Application.IsNumber(arrW(zz, 1)) Then
varF = Application.Match(arrW(zz, 1), arrDa, 0)
If IsNumeric(varF) Then arrW(zz, 1) = arrDb(varF, 1)
End If
Next zz
.Cells(2, sp2).Resize(UBound(arrW)) = arrW
End With
End Sub
Sub test2()
Dim sp1 As Long, sp2 As Long, ze1 As Long, ze2 As Long
Dim arrD, arrW, zz As Long, dd As Long
ze1 = 2
ze2 = Cells(Rows.Count, 1).End(xlUp).Row
sp1 = ActiveCell.Column
sp2 = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column + 1
With Sheets("Daten")
arrD = .Cells(2, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row - 1, 2)
End With
With ActiveSheet
arrW = .Cells(2, sp1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row - 1)
For zz = 1 To UBound(arrW)
If Application.IsNumber(arrW(zz, 1)) Then
For dd = 1 To UBound(arrD)
If arrW(zz, 1) = arrD(dd, 1) Then
arrW(zz, 1) = arrD(dd, 2)
Exit For
End If
Next dd
End If
Next zz
.Cells(2, sp2).Resize(UBound(arrW)) = arrW
End With
End Sub
Darin werden in einem Rutsch alle Quelldaten in Arrays eingelesen, im Array arrW ersetzt,
und dann - auch wieder in einem Rutsch - die Ergebnisse ausgegeben.
@Daniel: SVERWEIS mit WAHR/1 als 4. Parameter findet auch "ungefähre" Entsprechungen.
Das ist hier sicher nicht erwünscht. Man müsste zumindest noch auf Gleichheit des Treffers prüfen.
Zwischen (VBA-)Formellösung und der VBA-Bearbeitung der einzelnen Zellen gibt es andere, schnellere Möglichkeiten.
In einem Array arbeitet VBA sehr flott. Wenn die Ein- und Ausgabe der Array in einem Rutsch erfolgt,
geht auch das schnell.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich