2017-08-11 3 views
0

Der Versuch, eine Formel auf eine Zelle anzuwenden, wenn Kriterien erfüllt sind. Makro sucht zuerst nach dem Blatt, um alle zu finden, und behält alle Zeilen bei, wenn die Initialen in den Spalten D bis G erscheinen. In meinem Makro suche ich nach Initialen RPR (andere Initialen werden in NEIN sein). Wenn RPR in D, aber nicht in E gefunden wird, sollte die Berechnung K * 0,3 sein. Wenn das nicht der Fall ist, muss ich weitermachen und nach dem zweiten Szenario und so weiter suchen. Ich habe ein Bild von einem Tisch angefügt, da ich nicht sicher bin, was ich unten gepostet habe, wird korrekt angezeigt. table of dataExcel VBA Multiple, wenn dann Berechnungen für eine Zelle resultieren

D  E    K  N 
RPR NO   2000  result (K*0.3) 
NO RPR   1000  result (K*0.3) 
RPR (blank)  1000  result (K*0.5) 
RPR RPR   2000  result (K*0.5) 
NO no   2000  result 0 
No (Blank)  2000  result 0 

Ich habe mit vielen verschiedenen Formaten gespielt und nichts zu arbeiten bekommen. Hier bin ich. Ich bin jetzt seit über einem Tag dabei und könnte wirklich Hilfe gebrauchen. Ich glaube nicht, dass ich etwas für die Nullen haben muss, da die Zelle leer sein kann, wenn sie die anderen Kriterien nicht erfüllt.

Dim lrow As Long 
    lrow = Cells(Cells.Rows.Count, "D").End(xlUp).Row 

    Range("N2:N" & lrow).Formula = "=IF(D2 = ""RPR"") AndIF (F2 = ""RPR"" Or"""") 
     then N2 = (K2 * 0.5,0)" 

    Range("N2:N" & lrow).Formula = "IF D2 = ""RPR"" AndIF E2 <> ""RPR"" Then N2 = 
     (K2 * 0.3)" 

    Range("N2:N" & lrow).Formula = "IF D2 <> ""RPR"" AndIF E2 = ""RPR"" Then N2 = 
     (K2*0.3)" 

    Range("N2:N" & lrow).Value = Range("N2:N" & lrow).Value 

Antwort

0
sub sum() 
Dim lrow As Long 
lrow = Cells(Cells.Rows.Count, "D").End(xlUp).Row 
'\\assuming you are starting with row 1 
For r = 1 to lrow 
if range("D"& r) = "RPR" and (range("F"& r) = "RPR" or isempty(range("F"& _ 
r)) then range("N"& r) = 0.5 * range("K"& r) 
elseif range("D"& r) = "RPR" and range("F"& r) <> "RPR" then range("N"& _ 
r) = 0.3 * range("K"& r) 
elseif range("D"& r) <> "RPR" and range("E"& r) = "RPR" then range("N"& _ 
r) = 0.3 * range("K"& r) 
next r 
End Sub 
+0

Danke, aber das wird nicht Konto für die ZF-Komponente des Problems. Ich brauche es mal 0,3 zu multiplizieren, wenn "D = RPR und E nicht = RPR" und auch wenn "D nicht = RPR und E = RPR" – Jen

+0

Ich habe den Code aktualisiert, indem ich ein paar weitere elseifs hinzugefügt habe. –

+0

Ich bekomme immer einen Kompilierfehler Sonst ohne Wenn, wird das zweite Wort "range" in der ersten Elseif-Anweisung hervorgehoben. Ich habe versucht,() um die Aussage herum hinzuzufügen, aber das hat nicht geholfen. – Jen

Verwandte Themen