Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1148to1152
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

if-Funktion in vlookup - VBA

if-Funktion in vlookup - VBA
PeterO
Hallo Forum,
ich stoße bei der Integration von Formeln in VBA immer wieder an meine Grenzen. Folgende Formel möchte ich gern in meinem Makro darstellen:
=WENN(SVERWEIS($B$16;amob;WENN($B$11="Da";2;WENN($B$11="Fa";3;4));1)*$B$16/1000>=mp_amob; SVERWEIS($B$16;amob;WENN($B$11="Da";2;WENN($B$11="Fa";3;4));1)*$B$16/1000;mp_amob) 
Als normale Formel eingegeben funktioniert sie einwandfrei. Bei der Umsetzung im Makro scheitere ich allerdings an der if-Funktiom im sverweis und weis nicht wie ich es darstellen soll.
Mit worksheetfunction.vlookup(cells(16,2), amob, if... geht es offensichtlich nicht.
Habe mir bis jetzt mit FormulaLocal beholfen, finde ich allerdings nicht so "schön".
Vielleicht hat ja jemand eine Lösung für mich.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
If-Auswahl VOR VLookup
09.04.2010 13:45:43
Erich
Hi Peter,
das muss doch nicht alles in einer Zeile sein, oder?
erst bestimmt man da die Spalte, dann rechnet man den SVERWEIS, den man dann mit der Konstanten vergleicht.
Das hat dann auch den Vorteil, dass - andewrs als in der Formel - SVERWEIS nurt einmal gerechnet werden muss.
So könnte das aussehen:

Sub xxx()
Dim lngSp As Long, dblSVw As Double, dblErg As Double
Select Case Cells(11, 2)
Case "Da":     lngSp = 2
Case "Fa":     lngSp = 3
Case Else:     lngSp = 4
End Select
dblSVw = Application.VLookup(Cells(16, 2), Range("amob"), lngSp, 1)
dblSVw = dblSVw * Cells(16, 2) / 1000
dblErg = Application.Max(dblSVw, Range("mp_amob"))
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: If-Auswahl VOR VLookup
09.04.2010 13:55:21
PeterO
Danke! Funktioniert, nach einer kleinen Anpassung.
Nur mit der Funktion Application.Max kann ich noch nichts nafangen, aber das finde ich schon noch raus ;-)
Es ist schön immer wieder dazuzulernen!
Gruß Peter
Deine Formel
09.04.2010 13:51:14
Erich
Hi Peter,
deine Excelformel lässt sich auch in Excel geschickter schreiben:
 A
412,3
512,3
612,3

Formeln der Tabelle
ZelleFormel
A4=WENN( SVERWEIS($B$16;amob;WENN($B$11="Da";2;WENN($B$11="Fa";3;4)); 1)*$B$16/1000>=mp_amob; SVERWEIS($B$16;amob;WENN($B$11="Da";2;WENN($B$11="Fa";3;4)); 1)*$B$16/1000;mp_amob)
A5=MAX(SVERWEIS($B$16;amob;WENN($B$11="Da";2;WENN($B$11="Fa";3;4)); 1)*$B$16/1000;mp_amob)
A6=MAX(SVERWEIS($B$16;amob;4-2*($B$11="Da")-($B$11="Fa"); 1)*$B$16/1000;mp_amob)

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Deine Formel
09.04.2010 13:57:35
PeterO
Dank auch für diesen Hinweis. Liegt wohl daran, dass ich mit der MAx-Funktion noch nie zu tun hatte. Muss ich mir wohl mal merken...
AW: if-Funktion in vlookup - VBA
09.04.2010 14:17:04
fcs
Hallo Peter,
wenn du den Formel-Ausdruck unbedingt in eine VBA-Prozedur umsetzen willst, dann solltest du die Logik etwas anders aufbauen und Variablen für Zwischenergebnisse einsetzen. Außerdem muss du die Bereichsnamen in der Formel für die VBA-Prozedur in entsprechende Range-Objekte umsetzen.
Ansonsten kannst dein Glück noch mit der Evaluate-Methode versuchen, um einen Formel-Ausdruck zu berechnen. Oder auch Iif statt WENN verwenden, wenn du denn den Formel-Lindwurm in einer VBA-Zeile unterbringen willst.
Gruß
Franz
Sub bbtest()
Dim wks As Worksheet, lSpalte As Long, dWert As Double, dErgebnis As Double
Set wks = ActiveSheet
With wks
Select Case .Cells(11, 2).Value
Case "Da"
lSpalte = 2
Case "Fa"
lSpalte = 3
Case Else
lSpalte = 4
End Select
dWert = Application.WorksheetFunction.VLookup(.Cells(16, 2), Application.Range("amob"), _
lSpalte, 1) * .Cells(16, 2) / 1000
If dWert >= Application.Range("mp_amob") Then
dErgebnis = dWert
Else
dErgebnis = Application.Range("mp_amob")
End If
.Cells(16, 3) = dErgebnis
End With
End Sub

Anzeige
gelöst - owT
09.04.2010 14:28:47
PeterO

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige