Zellinhalt analysieren: Formel oder Zahl

Hallo Experten,
auch nach langer Suche habe ich keine Lösung für mein an sich relativ einfaches Problem gefunden:
Bei der Erstellung eines Rechnungsformulars möchte ich entweder den Nettobetrag eingeben, aus dem dann die MwSt. und der Bruttobetrag, oder den Bruttobetrag eingeben, aus dem dann die anderen fehlenden Werte ermittelt werden. Ich möchte also alle Zellen mit den entsprechenden Abfragen, sprich Formeln, füllen und bei der Eingabe dann die eine oder die andere Zelle mit einem Zahlenwert überschreiben. Dazu müsste ich eine Abfrage kennen, die unterscheiden kann zwischen Zahl und Formel.
Kann mir jemand helfen? Danke im Voraus

Hi,

mal abgesehen davon, das Excel wohl nicht das tolle Tool für Rechnungen ist… :frowning:(

Ich lasse mich von den anderen gerne belehren, aber ich glaube an der Oberfläche geht die Prüfung so nicht.

Es gibt eine Funktion ZELLE, die kann dir mit der Syntax ZELLE(„Typ“;C5), wobei C5 eben irgendeine Zelle ist, ausgeben ob eine Zahl oder ein Text drinsteht. Da könnte man ja mit Hilfe von wenn noch ein wenig dran rumschrauben und das so testen.

Alternative ist nur in VBA zu machen. Da gibt es eine Eigenschaft einer Zelle, die heisst: .HasFormula und gibt entsprechende Werte zurück.

Weisst du, wie du eigene Funktionen in VBA machen kannst ?
Damit wäre das recht einfach

Gruß
Proteus

Danke für den einfachen Lösungsversuch, aber die Abfrage „TYP“ ergibt kein Ergebnis das weiterbringt, weil eine Formel kein Text ist. Und schon bin ich wieder vor die Wand gefahren.
Dein Ansatz mit VBA scheint mir mehr Erfolg zu versprechen. Könntest Du mir ein rudimentäres Programm schreiben, weil meine Erfahrungen mit VBA kann ich mit Fug und Recht als nicht ausreichend bezeichnen. Danke!

Bei der Erstellung eines Rechnungsformulars möchte ich
entweder den Nettobetrag eingeben, aus dem dann die MwSt. und
der Bruttobetrag, oder den Bruttobetrag eingeben, aus dem dann
die anderen fehlenden Werte ermittelt werden. Ich möchte also
alle Zellen mit den entsprechenden Abfragen, sprich Formeln,
füllen und bei der Eingabe dann die eine oder die andere Zelle
mit einem Zahlenwert überschreiben. Dazu müsste ich eine
Abfrage kennen, die unterscheiden kann zwischen Zahl und
Formel.

Hallo Winfried,

welcher Mwst.-Satz, immer 19%?

Rechtsklick unten auf den Tabellenreiter, Code anzeigen, dort folgenden Code reinkopieren, ggfs. Zelladressen anpassen, Editor schließen.

Code ist für diese Situation:

A1: Netto
A2: Mwst.
A3: Brutto

Option Explicit
'
Private Sub Worksheet\_Change(ByVal Target As Range)
If Target.Address(0, 0) "A1" And Target.Address(0, 0) "A3" Then Exit Sub
If Target.Address(0, 0) = "A1" Then
 Range("A3").Value = Application.Round(Range("A1").Value \* 1.19, 2)
Else
 Range("A1").Value = Application.Round(Range("A3").Value / 1.19, 2)
End If
Range("A2").Value = Range("A3").Value - Range("A1").Value
End Sub

Gruß
Reinhard

Danke Reinhard, Dein Code funktioniert. Wie kann ich jetzt diesen Code dazu bringen, dass er in jeder Zeile der Rechnung funktioniert und nicht nur in einer?
Gruß
Winfried

Danke Reinhard, Dein Code funktioniert. Wie kann ich jetzt
diesen Code dazu bringen, dass er in jeder Zeile der Rechnung
funktioniert und nicht nur in einer?

Hallo Winfried,

es geht schneller *denk*, du beschreibst genau wie so eine Rechnungaufgebaut ist, also was wo steht oder schickst eine xls hoch mit rapidshare, siehe FAQ:2606

Gruß
Reinhard

1 „Gefällt mir“

Hallo Reinhard,
das geht ja wie das Brezelbacken.
Hier der Link:
http://rapidshare.com/files/367727428/Rechnungsvorla…
Gruß
Winfried

das geht ja wie das Brezelbacken.
Hier der Link:
http://rapidshare.com/files/367727428/Rechnungsvorla…

Hallo Winfried,

Private Sub Worksheet\_Change(ByVal Target As Range)
Set Target = Intersect(Target, Range("F2:F11,H2:H11"))
If Target Is Nothing Then Exit Sub
If Target.Count \> 1 Then Exit Sub
If Target.Column = 6 Then
 Target.Offset(0, 2).Value = Application.Round(Target.Value \* 1.19, 2)
Else
 Target.Offset(0, -2).Value = Application.Round(Target.Value / 1.19, 2)
End If
Cells(Target.Row, 7).Value = Cells(Target.Row, 8).Value - Cells(Target.Row, 6).Value
End Sub

Gruß
Reinhard

1 „Gefällt mir“

Hallo Reinhard,
es funktioniert wie erwartet - ganz große Klasse - vielen Dank!
Ich werde versuchen, Deinen Code zu verstehen, um dann auch für die vorderen Spalten die Werte zu generieren. Vielleicht klappt es ja - eine faszinierend elegante Lösung.
Gruß
Winfried

Hi,

ok.
Gehe mit ALT+F11 in den VBA-Editor
Auf der linken Seite im Baum steht irgendwo „VBAProject (XXX)“
wobei XXX der NAme deiner Datei ist.
rechte Maustaste drauf, Einfügen Modul
Darauf erscheint im Baum Modul
Aufklappen
Darunter jetzt vermutlich Modul1
Doppelklick drauf
Dann folgenden Code reinkopieren:

Function isFormula(ByVal Bereich As Range) As Boolean
isFormula = Bereich.HasFormula
End Function

Dann mal testhalber im Arbeitsblatt:

in A1: 10
in A2: 10
in A3: =Summe(A1:A2)
in B2: =isFormula(A2)
in B3: =isFormula(A3)

sollte in B2: FALSCH geben und in B3: WAHR

Damit sollte es dann gehen oder ?

Gruß
Proteus

Hallo Proteus,
jetzt habe ich zwei elegante und funktionierende Wege bekommen, mein Problem zu lösen - Herzlichen Dank.
Zusätzlich habe ich auch noch viel über das Anlegen eigener Funktionen und über VBA gelernt. Besser kann ein Tag nicht laufen.
Viele Grüße
Winfried