Formeln in VBA konvertieren

18/01/2009 - 01:38 von Willy Steffen | Report spam
Hallo Guten Tag
Ich habe eine Frage, gibt es ein Tool mit dem man Formeln in VBA
konvertieren kann?
Oder gib es da eine Technik wie man es umschreiben kann?
Denn ich möchte gerne die folgenden Formeln umwandeln:
1. Ich habe ein Projektplan mit Ganttdiagramm mit den Kolonnen
MaschNummer(C); Ressource(E); Anfansdatum(H); KWAnfang(I); Dauer(J);
Enddatum(K); KWEnde(L); ErledigtDatum(M); KolonneQ=leer; Ganttdiagramm ab
Kolonne R bis und mit HS.
Die Einteilung ist in Kalenderwochen, jeweils mit dem Datum vom Montag.
01.01.2008 bis zum Jahr 2012. Die Anzeige der Kalenderwoche ist z.B: 03-09
und wird über eine Funktion erstellt.
Das Ganttdiagramm wird über die bedingte Formatierung
"=UND(ODER(R$5>=$H6;$H6<S$5);ODER(R$5<=$K6))" gemacht. Mit dieser werden die
Felder der KW Anfansdatum bis und mit Enddatum hellgrün eingefàrbt.
2. Nun wird in das 1te gefàrbte Feld den Kürzel der Ressource(E6)
eingetragen und in das anschliessende Feld die Endzahl der MaschNummer(C6)
eingetragen. Die Formel ist "=WENN($I6=R$2;$E6;WENN(Q6=$E6;RECHTS($C6;3);""))"
Eben gibt es die Möglichkeit oder Methode um diese Formeln ins VBA
umzuschreiben. Bin leider immer noch ein Anfanger darin.
Kann mir da jemand helfen?
Vielen Dank im Vorraus
Willy
 

Lesen sie die antworten

#1 Andreas Killer
18/01/2009 - 10:09 | Warnen spam
Willy Steffen schrieb:

Ich habe eine Frage, gibt es ein Tool mit dem man Formeln in VBA
konvertieren kann?


Nein.

Oder gib es da eine Technik wie man es umschreiben kann?


Nein.

Naja, so als Gedankengriff: Vieles was Du aus den Formeln als deutschen
Begriff kennst kannst Du im VBA ins englische übersetzt verwenden.

Denn ich möchte gerne die folgenden Formeln umwandeln:


...
eingetragen. Die Formel ist "=WENN($I6=R$2;$E6;WENN(Q6=$E6;RECHTS($C6;3);""))"
Eben gibt es die Möglichkeit oder Methode um diese Formeln ins VBA
umzuschreiben. Bin leider immer noch ein Anfanger darin.


So mal vorab, VB ist eine Hochsprache, d.h. damit geht viel viel viel
mehr als das was Du mit Formeln machen kannst.

Ein WENN;DANN;SONST könnte man quasi in VBA mit einem IF;THEN;ELSE
übersetzen. Wenn Du in einer Formel I6 sagt, kommst Du in VBA mit
Range("I6") an die gleiche Zelle. Das RECHTS übersetzt sich zu Right.

Wenn man die Formel nun wortwörtlich übersetzt würde sie in VBA so
aussehen, wobei das X dann der Zelle entsprechen würde in der die Formel
steht:

If Range("I6") = Range("R2") Then
X = Range("E6")
Else
If Range("Q6") = Range("E6") Then
X = Right(Range("C6"), 3)
Else
X = ""
End If
End If

Schreib mal im VBA-Editor ein if und drück dann auf Strg-F1 und sieh Dir
auch die Beispiele in der Hilfe an.

Die obige Übersetzung hilft Dir aber nicht viel weiter, weil eine Formel
IMMER nur eine einzige Berechnung anstellt und Du diese Formel aber über
viele Zellen ziehst und sie dann "=WENN($I7..", "=WENN($I8.." usw. lautet.

Das in VBA nachzubilden ginge theoretisch auch, ist aber Unsinn. Hier
kommt ein riesiger Vorteil von VBA, man kann Schleifen programmieren und
so eine einzige Formel über einen großen Bereich ausführen.

Ist der Bereich festgelegt dann empfiehlt sich FOR, es lassen sich aber
auch Schleifen mit DO und WHILE machen. (GOTO geht theoretisch auch, das
solltest Du aber lassen, kann man sich schnell vertun und es gibt
Murks.) Ein Beispiel:

Angenommen wir möchten gerne die Werte von A1 bis A10 prüfen und WENN
der Wert > 5 ist, DANN in Spalte B eine 1 reinschreiben, SONST schreiben
wir eine 0 rein.

Wenn Du den obigen Satz mal anschaust könntest Du ohne Schwierigkeiten
daraus eine Formel ableiten: =WENN($A1 > 5;1;0)". Diese würdest Du in B1
reinschreiben und dann nach unten ziehen.

In VBA sàhe das so aus:

Sub Test()
For Y = 1 To 10
If Range("A" & Y) > 5 Then
Range("B" & Y) = 1
Else
Range("B" & Y) = 0
End If
Next
End Sub

Schau Dir mal die Hilfe zu FOR und auch das Beispiel an, das sollte
alles erklàren. Ergànzend dazu:

In VBA kommst Du an die Zelle A1 mit Range("A1") oder mit Range("A" & Y)
oder auch Cells(Y,1) vorausgesetzt Y=1.

Weiterhin lassen sich Schleifen auch schachteln, angenommen wir möchten
den Bereich A1:J10 die Zahlen von 1 bis 100 schreiben. Mit Formeln wàre
das grausig, mit VBA ist es ganz simpel:

Sub Test()
For Y = 1 To 10
For X = 1 To 10
Cells(Y, X) = X * Y
Next
Next
End Sub

Okay, was ist noch wichtig zu wissen?

Immer gut den Source dokumentieren, das hilft spàter beim nachschauen
und/oder umschreiben/ergànzen.

Trenne einzelne Aufgaben in jeweilige SUB, bzw. FUNCTION auf, wie Du es
schon von der "function KW" her kennst. Das macht die Fehlersuche leichter.

Angenommen wir möchten gerne sehen welche von unseren 100 Zahlen ein
gerade ist und fàrben den Hintergrund der Zellen rot:

Function Odd(ByVal X) As Boolean
'True wenn X eine ungerade Zahl ist
Odd = X Mod 2 = 1
End Function

Sub Test()
For Y = 1 To 10
For X = 1 To 10
'Ergebnis berechnen
Z = X * Y
'Ergebnis ausgeben
Cells(Y, X) = Z
'Ergebnis prüfen
If Not Odd(Z) Then
'Zellhintergrund wird rot
Cells(Y, X).Interior.ColorIndex = 3
Else
'Zellhintergrund wird "keine Farbe"
Cells(Y, X).Interior.ColorIndex = xlAutomatic
End If
Next
Next
End Sub

Schau Dir mal die Hilfe zu NOT an und gehe dann auf "Siehe auch" und
schau Dir mal "logische Operatoren" an, speziell OR und AND, die wirst
Du zusammen mit NOT oft brauchen. =WENN(UND(NICHT(... => if A and not B

Wenn man etwas nicht weiß wie's geht: Makro aufzeichnen, sich die Hilfe
zu dem aufgezeichneten Code anschauen und dann an eigene Bedürfnisse
anpassen.

Und wenn's gar nicht weiter geht: Den Code posten, beschreiben was er
machen sollte, hier gibt es viele Augen die helfen können.

Andreas.

Ähnliche fragen