Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

VBA Excel-Programmierung

pol / 10 Antworten / Baumansicht Nickles

Hi! Ich möchte gern in Excel zwei Varianten vorsehen, um z.B. entweder den Preis pro Einheit anhand der Gesamtkosten zu berechnen oder umgekehrt die Gesamtkosten anhand des Preise (also 2 Zellen mit jeweils einer Formel). Die Ausgabe der Berechnung soll in der Zelle erfolgen, in der die Formel steht. Dabei sollen die zugrundeliegenden Formeln (eigentlich ein Zirkelbezug) nicht gelöscht werden, so dass man nachträglich auch noch die zweite Berechnungs-Variante durchführen kann. Wie geht das???


Ich hoffe, das Problem einigermassen verständlich rübergebracht zu haben!? Ich weiss, dass die Aufgabe zu lösen ist, da ich vor kurzem in einem Shareware-Programm diese Möglichkeit entdeckt habe. Leider habe ich trotz eifrigem Probieren noch keine Lösung gefunden. Vielen Dank im Voraus für jeden Tipp!


Pol

bei Antwort benachrichtigen
Lars.L pol „VBA Excel-Programmierung“
Optionen

Hallo pol,

bist du sicher, dass du das in VBA machen musst, hört sich für mich nach wenn-Formeln an, ggf. Hilfszelle zur Berechnung nutzen und ausblenden. Aber das Problem habe ich nicht wirklich verstanden.

Lars

Gruss Lars\"Duct tape is like the force. It has a light side, and a dark side, and it holds the universe together ...\" -- Carl Zwanzig
bei Antwort benachrichtigen
UselessUser pol „VBA Excel-Programmierung“
Optionen

Hi pol,

gebe mal ein praktisches Beispiel!

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
pol UselessUser „Hi pol, gebe mal ein praktisches Beispiel! MfG UselessUser“
Optionen

Also, hier ein Beispiel: Du hast im Excel-Sheet drei Spalten. (1) Stückzahl, (2) Einzelpreis, (3) Gesamtbetrag. Der Wert für die Stückzahl beträgt z.B. 47. Nun schreibe ich eine Formel (S2=S3/S1) in die Spalte (2) und eine Formel (S3=S2*S1) in die Spalte (3). Normalerweise wäre das ein Zirkelbezug, da beide Formeln auf eine andere Formel verweisen. Wenn ich nun z.B. in der Spalte (2) einen Wert eingebe, berechnet die Formel in der Spalte (3) den entsprechenden Gesamtbetrag. Dabei wird jedoch die Formel in der Spalte (2) überschrieben. Und genau das will ich vermeiden, damit ich nachher auch die umgekehrte Berechnung durchführen kann ohne die Formel neu eingeben zu müssen! Ich hoffe, das war verständlich.

bei Antwort benachrichtigen
Lars.L pol „VBA Excel-Programmierung“
Optionen

Hört sich immer noch nach wenn Funktion mit Hilfsspalten an.

Tabelle: Tabelle1

  A B C D E
1 Stückzahl Einzelpreis Gesamtbetrag Einzelpreis Gesamtbetrag
2 232 0,15 34,8 =+WENN(B2="";C2/A2;"") =+WENN(C2="";B2*A2;"")
3 22 0,29   =+WENN(B3="";C3/A3;"") =+WENN(C3="";B3*A3;"")
4 33   29,04 =+WENN(B4="";C4/A4;"") =+WENN(C4="";B4*A4;"")
5 5 2,99 14,95 =+WENN(B5="";C5/A5;"") =+WENN(C5="";B5*A5;"")




Die nicht benötigente Spalten kann man ausblenden oder weiße Schrift verwenden.

Gruss Lars\"Duct tape is like the force. It has a light side, and a dark side, and it holds the universe together ...\" -- Carl Zwanzig
bei Antwort benachrichtigen
pol Lars.L „Hört sich immer noch nach wenn Funktion mit Hilfsspalten an. Tabelle: Tabelle1...“
Optionen

Das stimmt schon, was du da schreibst, aber das ganze sollte innerhalb der gleichen Zellen ablaufen. Also nix mit Hilfsspalten und so! In dem Beispiel, das ich gesehen habe, funktionierte das ganze nur mit den drei Spalten!
Also man hat den Wert in Spalte 2 eingegeben, der berechnete Wert wurde anschliessend in der Spalte 3 angezeigt. Danach konnte man gleich wieder den Wert in Spalte 3 ändern und der daraufhin berechnete Wert wurde in der Zelle angezeigt, dessen Wert kurz zuvor noch von Hand eingegeben wurde (und wo ja eigentlich keine Formel mehr stehen dürfte!).

Pol

bei Antwort benachrichtigen
UselessUser pol „VBA Excel-Programmierung“
Optionen

Hallo pol!

Habe leider nicht die Zeit, das jetzt zusammenzusuchen, aber das müsste mit einem VBA-Makro gehen, welches mit dem Öffnen des Worksheets sich selbst aufruft. In VBA müsste man eine Ereignisprozedur basteln können, die überprüft, ob in einer Zelle bzw. Spalte ein Wert geändert wurde, worauf je nach Spalte die eine oder andere Formel zur Anwendung kommt und das Ergebnis neu in die Zelle geschrieben wird.
Schaue doch einmal nach, ob sich in der Excel-Arbeitsmappe deines Shareware-Programmes nicht auch ein Makro versteckt.

MfG

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
pol UselessUser „Hallo pol! Habe leider nicht die Zeit, das jetzt zusammenzusuchen, aber das...“
Optionen

Die Makros in dem Programm sind leider per Passwort geschützt. Ich habe aber jetzt den VBA-Befehl (SheetChange) gefunden, mit dem das Problem zu lösen sein müsste. Leider habe ich ausser der Syntax keine Dokumentation gefunden. Ich habe jetzt ein bisschen rumprobiert. Das Ergebnis ist aber noch nicht zufriedenstellend. Weiss vielleicht jemand, wo ich im Internet was brauchbares finden kann?

Die benötigte Ereignisprozedur "Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)" beruht auf den beiden Variablen "Sh" (also Tabellenblatt) und "Source" (Also ein Range-Objekt), und die krieg ich irgendwie nicht sauber angesprochen.

bei Antwort benachrichtigen
Lars.L pol „Die Makros in dem Programm sind leider per Passwort geschützt. Ich habe aber...“
Optionen

Hallo pol

versuche es noch mal im Spotlight Forum
http://spotlight.de/zforen/mse/t/forum_mse_1.html
die sind in solchen Fragen ganz gut.

Gruss Lars\"Duct tape is like the force. It has a light side, and a dark side, and it holds the universe together ...\" -- Carl Zwanzig
bei Antwort benachrichtigen
pol Lars.L „Hallo pol versuche es noch mal im Spotlight Forum...“
Optionen

Hab das Problem gelöst!!! In "Diese Arbeitsmappe" muss man folgendes Makro reinschreiben:
"Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
ActiveWorkbook.Worksheets(1).OnEntry = "Formula"
End Sub"
Dieser Code verweist nun auf das folgende "Modul-Makro":
"Sub Formula()
With ActiveCell
If .Column = 2 And ActiveCell Range("B1") Then
If ActiveCell.Value = "" Or ActiveCell.Value = "0" Then
ActiveCell.Offset(0, 1).Value = ""
Else
ActiveCell.Offset(0, 1).FormulaR1C1 = "=RC[-2]*RC[-1]"
End If
ElseIf .Column = 3 And ActiveCell Range("C1") Then
If ActiveCell.Value = "" Or ActiveCell.Value = "0" Then
ActiveCell.Offset(0, 1).Value = ""
Else
ActiveCell.Offset(0, -1).FormulaR1C1 = "=RC[1]/RC[-1]"
End If
Else
End If
End With
End Sub"

Und schon funktioniert's!
Danke für den Link!

Pol

bei Antwort benachrichtigen
Lars.L pol „VBA Excel-Programmierung“
Optionen

OK,
wenn es zwingend in den gleichen Zellen ablaufen soll, dann muss das über VBA erfolgen: Bei jeder Zelleingabe Prüfen, wo sie stattfindet und dann die entsprechende Formel in die zugehörige Zelle eintragen, also alle Formeln erst bei bedarf eintragen.

Gruss Lars\"Duct tape is like the force. It has a light side, and a dark side, and it holds the universe together ...\" -- Carl Zwanzig
bei Antwort benachrichtigen