2016-08-16 4 views
0

Ich muss eine Datei reduzieren, die ich entwickle und ich weiß, eine gute Möglichkeit ist die Verwendung von VBA. Leider bin ich noch nicht in VBA fortgeschritten und ich habe Probleme mit dem Design. Ich habe eine Preisliste in drei verschiedenen Strömungen organisiert, und ich wie unten in einer kombinieren will:Code eine große Formel in VBA Kombination von IF und Vlookup

Stream  Site   Brand Code Price 
Mainstream Boston  Brand 01  Formula 
Midstream New York  Brand 02 
Midstream Los Angeles Brand 02 

Derzeit ich eine Formel verwende, die im Grunde macht folgend:

=IF(AND(stream="mainstream",Site = "Boston"),vlookup(Brandcode,list 1, 2,0),IF(ANd(stream="midstream", Site = "Boston", vlookup(Brandcode,list 2, 2,0),...)) 

Die Formel funktioniert eigentlich gut, das Problem ist, ich teste viele andere Bedingungen als nur diese und damit die Datei wird sehr schwer, so wollte ich einen VBA-Code erstellen, um entweder eine Funktion oder ein Unterprogramm zu erstellen, aber ich habe Mühe zu verstehen wie es geht.

Dank

Antwort

1

Dies kann tatsächlich ohne VBA erreicht werden, indem stattdessen benannte Bereiche verwenden. Wenn Sie die Formel betrachten, ist es klar, dass Ihr Lookup-Bereich basierend auf der Kombination von stream und site variiert.

Sie können für jeden dieser Suchbereiche einen Named Range erstellen. Heben Sie dazu den Zellenbereich hervor, der die erste Suchgruppe enthält (beispielsweise Midstream New York). Drücken Sie dann STRG + F3, um das Name Manager zu öffnen. Geben Sie dieser Gruppe schließlich den Namen MidstreamNewYork. (Hinweis: Sie können keine Leerzeichen in den Namen einschließen).

Als nächstes können Sie Ihre Vlookup Funktion aktualisieren. Sie müssen die Komponente IF(AND... nicht mehr einschließen, da Ihre Lookups dynamisch sind. Nehmen wir an, Sie geben eine Formel für Zeile 2 ein. Die Formel lautet:

=VLOOKUP(C2,INDIRECT(SUBSTITUTE(A2&B2, " ", "")),2,FALSE) 

Lassen Sie uns die Formel aufschlüsseln. ?. (1) C2 ist nur die brandcode (ich nahm an, es war in der Spalte C (2) The INDIREKTE function treats a String as a Bereich . We are passing in Cells A2 and B2 , which are "Midstream" and "New York", respectively. We use the ERSATZ function to remove the spaces since they aren't allowed. So now, we are looking up a named range called MidstreamNewYork` (bekannt vor) (3) Der Rest des VLOOKUP ist Standard: Nachschlagen Die zweite Spalte, und passt nur genau.

Versuchen Sie es mich und lassen Sie mich wissen, ob es Ihren Anforderungen entspricht.