Clever-Excel-Forum

Normale Version: VBA-Äquivalent zum sVerweis
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo und einen angenehmen Start in die Feiertage,

meine Frage bezieht sich auf eine möglicherweise elegantere Variante des sVerweises:

In einer Tabelle innerhalb der Range F5:F2000 habe ich (durcheinander vermischt) die Zahlen 1 bis 20 stehen. Diese sollen in der Range G5:G2000 durch einen möglichen
Ersatz zum sVerweis ausgetauscht werden. Jeder Zahl ist dabei eine festen Buchstabenreihenfolge zugewiesen (1 = aba / 2 = cdc / ...etc)

Ist dies durch VBA möglich oder sollte hier doch zum sVErweis gegriffen werden?

Mit freundlichem Gruß

Bookshelf3011
Hi,

meinst du so?

Tabelle1

FGHIJ
11aba
22cdc
33bab
44geg
52cdc5fef
61aba
75fef
89#NV
915#NV
103bab
116#NV
Formeln der Tabelle
ZelleFormel
G5=SVERWEIS(F5;$I$1:$J$5;2;0)

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Falls nicht, wäre ein Tabellenausschnitt (KEIN ScrShot) oder eine kleine Mustertabelle von Vorteil. Bei meinem Beispiel kannst du die #NV durch eine Fehlerabfrage eliminieren.
Hi,

Zitat:Ist dies durch VBA möglich oder sollte hier doch zum sVErweis gegriffen werden
Natürlich ist das möglich, aber es wird auch in VBA auf einen SVERWEIS  (Vlookup) hinauslaufen. Du gewinnst nichts.
Hallöchen,

einen Gewinn hättest Du eventuell dann, wenn durch eine Vielzahl an Formeln und Berechnungen Deine Mappe an Performance zu wünschen übrig lässt. Die Formeln haben auch den Vorteil, dass Eintragungen in mehrere Zellen gleichzeitig einfach möglich sind. Na ja, und wenn man löscht, muss das ja auch irgendwie berücksichtigt werden. Bei VBA wird der Code immer komplizierter, ja mehr "Handlungsweisen" man einbeziehen will.

Ich hab hier mal eine Variante ohne SVERWEIS.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Variablendeklaration - Array
Dim arrAustausch
'Array fuellen
arrAustausch = Array("AAA", "BBB", "CCC")
'Wenn genau eine Zelle im Bereich in Spalte F geändertt wurde, dann
If Not Intersect(Target, Range("F5:F2000")) Is Nothing And Target.Cells.Count = 1 Then
 'Wenn der neue Zellinhalt von 1 bis 3 liegt, dann
 If Target.Value >= 1 And Target.Value <= 3 Then
   Zelle daneben mit dem Eintrag versehen
   Target.Offset(0, 1) = arrAustausch(Target.Value - 1)
 'Wenn der neue Zellinhalt nicht von 1 bis 3 liegt, dann
 Else
   Zelle daneben entfernen
   Target.Offset(0, 1) = ""
 'Ende Wenn der neue Zellinhalt von 1 bis 3 liegt, dann
 End If
'Ende Wenn genau eine Zelle im Bereich in Spalte F geändertt wurde, dann
End If
End Sub

Die hat allerdings dann den nächsten Nachteil, dass man die "Austauschworte" fest programmiert. Wenn also mal was anderes dran ist dann heißt es Code ändern Sad Könnte man aber auch anders lösen, sodass keine Codeänderung nötig ist.
In B1:B20 "aba" ...  "cdc"

In F2:F2000  random 1..20


Code:
Sub M_snb()
  sn=range("F2:G2000")
  sp=range("B1:B20")

  for j=1 to ubound(sn)
    sn(j,2)=sp(sn(j,1),1)
  next

  range("F2:G2000")=sn
End Sub