Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Eingabe und Ausgabe in der gleichen Zelle

Eingabe und Ausgabe in der gleichen Zelle
07.04.2005 19:10:46
Dr.
Schönen guten Tag,
ich habe folgendes Problem.
Ich würde gerne eine Subtraktion durchführen ;)
Soweit sogut, ABER es muss alles in einer Zelle ablaufen.
Beispiel:
Ich möchte 4500 subtrahieren in der Zelle C5
Ich schreibe in die Zelle C5 nun 5000 rein und springe zur nächsten Zelle und nun sollte in C5 500 stehen.

Ist das machbar?
Ich hab leider in Excel keine Hilfe dazu gefunden und hier im Forum auch schon rumgestöbert, aber bisher noch nicht fündig geworden.
Is ja auch verdammt viel los hier ;)
Kennt sich mit der Problematik jemand aus?
Kann mir jemand weiterhelfen?
Grüße, Doc Hilflos
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ohne VBA keine chance...
07.04.2005 19:35:43
ransi
hallo hilfloser
realnames sind hier eigentlich üblich.
Ohne VBA wirst du da nicht weiter kommen.
versuchs mal so:
rechte maus auf den tabellenreiter.
code anzeigen
in das sich öffnende fenster diesen code reinkopieren.


      
Option Explicit
Dim zelle As Double
Private 
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$5" Then
    Application.EnableEvents = True
    
Exit Sub
End 
If
On Error Resume 
Next
If IsNumeric(Target.Value) Then
    Application.EnableEvents = False
    Target.Value = zelle - Range(
"c5").Value
    zelle = Range(
"c5").Value
End 
If
Application.EnableEvents = True
End 
Sub 


..und dann mal ein wenig damit experimentieren..
ransi
Anzeige
ziehe meine antwort zurück
07.04.2005 19:51:55
ransi


      
hallo
war blödsinn eben die antwort.
ersetz den code mal durch diesen:
Option Explicit
Private 
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$5" Then
   
If IsNumeric(Target.Value) Then
        Application.EnableEvents = False
        Target.Value = Target.Value - 4500
    End 
If
End 
If
Application.EnableEvents = True
End 
Sub
ransi 


Anzeige
AW: ziehe meine antwort zurück
08.04.2005 13:56:40
Dr.
Hiho ransi,
herzlichen Dank für die superschnelle Antwort.
Hat voll gut funktioniert.
Mensch hat das gedauert, bis ich heute diesen Thread wieder gefunden hab, is ja echt viel los hier.
So, jetzt geht meine Arbeit erst richtig los. Ich muss dat Ding jetzt für ca. 100 Zellen anpassen. gibts da eigentlich en Trick, wie ich das Teil einfacher in die Zellen kopieren kann oder muss ich 100 mal in der VBA Abfrage die Zelle ändern?
Sorry wenn ich Dich mit Fragen löchere, aber ich hab leider kein Plan von VBA.
Und ich such mir immer deshalb ein Pseudonym aus, weil ich es witzig finde und es in meinen Augen im Endeffekt mehr aussagt als ein Name oder man wenigstens drüber lachen kann. Denn ein Name im Netz ist im Prinzip ja genauso anonym, wie ein Pseudonym.
Ok genuch philosophiert ;)
Danke nochmals und viele Grüße,
Torsten
Anzeige
geht mit intersect, aber mehr infos sind nötig.
08.04.2005 15:15:27
ransi
hallo torsten
man kann mit intersect abfragen ob die activecell in einem bereich liegt für den das ganze gelten soll.
wenn nicht, dann exit sub.
ist das ein zusammenhängender bereich oder sind die zellen wild über das blatt verstreut?
ransi
AW: geht mit intersect, aber mehr infos sind nötig
08.04.2005 15:35:18
Dr.
Hiho wieder mal,
die Zellen sind nur in einer Spalte, aber nicht aneinanderhängend.
Es geht los mit K3, dann K5, dann K7, dann K9 usw. bis K109.
Aber mach Dir mal keinen Stress, wenn das ganze zu viel act für Dich wird, dann kopier ich deinen geilen Code, bzw. einen Teil davon eben 109 mal und änder es von Hand ab. Hast mir jetzt schon viel geholfen.
Bis denne,
Torsten
Anzeige
für jede zelle 4500?
08.04.2005 15:54:25
ransi
hallo thorsten

das mit dem 109 mal kopieren lass mal lieber.
du willst ja schließlich auch noch mit excel arbeiten.
kannst du mämlich nicht mehr vernünftig wenn bei jeder zellenänderung 109 codes ablaufen.
vor lauter sanduhr geht dann nix mehr.
soll für jede zelle die 4500 gelten?
ransi
Anzeige
AW: für jede zelle 4500?
08.04.2005 16:08:19
Dr.
Hiho ransi,
ja in jeder Zelle soll 4500 subtrahiert werden.
Na in dem Fall nochmal Danke,
Torsten
AW: für jede zelle 4500?
08.04.2005 16:21:08
ransi
hallo thorsten
Dim bereich As Range

Private Sub Worksheet_Activate()
Dim spalten As Long
For spalten = 3 To 109 Step 2
If bereich Is Nothing Then Set bereich = Range("K3")
Set bereich = Application.Union(bereich, Cells(spalten, 11))
Next
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, bereich) Is Nothing Then
If IsNumeric(Target.Value) Then
Application.EnableEvents = False
Target.Value = Target.Value - 4500
End If
End If
Application.EnableEvents = True
End Sub

in der ersten procedur wird der bereich festgelegt für den das gelten soll.
die variable "Bereich" wird bei jeder zelländerung abgefragt.
wenn die geänderte zelle dadrin liegt wird abgezogen.
musste mal ein wenig mit experimentieren...
ransi
Anzeige
AW: für jede zelle 4500?
08.04.2005 19:24:49
Dr.
Hiho ransi,
ich habs ausprobiert und bekomme immer einen Laufzeitfehler 5 und diese Spalte
If Not Intersect(Target, bereich) Is Nothing Then
ist gelb markiert. Ich hab auch schon viel rumprobiert und experimentiert, aber eher geraten als gewusst. Hat natürlich nichts gefruchtet.
Wäre nett, wenn Du mir dieses eine Mal noch aus der Patsche helfen würdest.
Grüße,
Torsten
Anzeige
AW: für jede zelle 4500?
08.04.2005 21:07:30
ransi


      
hallo thorsten
habe den code zum bestimmen des bereiches in das worksheet_activate gepackt damit der bereich nur EINMAL festgelegt werden muss.
das passiert wenn du das blatt aktivierst.
also von einem anderen blatt in das eigentliche blatt wechselst.
versuchs mal so:
Dim bereich As Range
Private 
Sub Worksheet_Change(ByVal Target As Range)
Dim spalten As Long
If Not bereich Is Nothing Then GoTo weiter
For spalten = 3 To 109 Step 2
    
If bereich Is Nothing Then Set bereich = Range("K3")
    Set bereich = Application.Union(bereich, Cells(spalten, 11))
Next
weiter:
If Not Intersect(Target, bereich) Is Nothing Then
   
If IsNumeric(Target.Value) Then
        Application.EnableEvents = False
        Target.Value = Target.Value - 4500
    End 
If
End 
If
Application.EnableEvents = True
End 
Sub
hoffentlich ist das nicht zu verwirrend.
ransi 


Anzeige
AW: für jede zelle 4500?
10.04.2005 14:39:06
Dr.
Jippppppiieeeeeeeeeee
jippie jippieee jipppiiee
es klappt,
es klappt.
Danke, danke, danke, ransi.
Hast mir echt super gholfen.
Bis dann,
Torsten
freut mich wenns klappt..o.T.
10.04.2005 16:37:32
ransi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Eingabe und Ausgabe in der gleichen Zelle


Schritt-für-Schritt-Anleitung

Um eine Subtraktion in Excel durchzuführen, die sowohl die Eingabe als auch die Ausgabe in derselben Zelle erfolgt, musst du VBA (Visual Basic for Applications) nutzen. Hier ist eine einfache Anleitung:

  1. Öffne den Excel-Editor: Klicke mit der rechten Maustaste auf den Tabellenreiter und wähle „Code anzeigen“.

  2. Füge den folgenden Code ein:

    Option Explicit
    Dim zelle As Double
    
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = "$C$5" Then
           If IsNumeric(Target.Value) Then
               Application.EnableEvents = False
               Target.Value = Target.Value - 4500
           End If
       End If
       Application.EnableEvents = True
    End Sub
  3. Anpassen für andere Zellen: Wenn du den Code für mehrere Zellen benötigst, kannst du die Logik anpassen, um einen Bereich festzulegen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 5: Dieser Fehler tritt häufig auf, wenn der Bereich nicht korrekt definiert ist. Stelle sicher, dass der Bereich, den du abfragen möchtest, richtig angegeben ist.

  • Keine Änderungen sichtbar: Wenn keine Änderungen in der Zelle angezeigt werden, überprüfe, ob Application.EnableEvents korrekt gesetzt ist, um zu verhindern, dass das Skript blockiert wird.


Alternative Methoden

Wenn du keine VBA verwenden möchtest, kannst du auch Formeln nutzen, um Eingabe und Ausgabe zu trennen. Zum Beispiel:

  • In Zelle C5: =5000 - 4500, was dir den Wert 5000 minus 4500 anzeigt. Dies ist jedoch keine Eingabe/Ausgabe in einer Zelle, sondern zeigt nur das Ergebnis an.

Praktische Beispiele

  • Für mehrere Zellen: Um denselben Code auf Zellen K3, K5, K7, usw. bis K109 anzuwenden, kannst du den Code anpassen:

    Dim bereich As Range
    
    Private Sub Worksheet_Activate()
       Dim spalten As Long
       For spalten = 3 To 109 Step 2
           If bereich Is Nothing Then Set bereich = Range("K3")
           Set bereich = Application.Union(bereich, Cells(spalten, 11))
       Next
    End Sub
    
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, bereich) Is Nothing Then
           If IsNumeric(Target.Value) Then
               Application.EnableEvents = False
               Target.Value = Target.Value - 4500
           End If
       End If
       Application.EnableEvents = True
    End Sub

Tipps für Profis

  • Vermeide unnötige Berechnungen: Wenn du denselben Code für viele Zellen verwendest, achte darauf, dass nicht bei jeder Zelländerung die gesamte Logik ausgeführt wird. Nutze Intersect, um die Ausführung nur für die relevanten Zellen zu optimieren.

  • Experimentiere mit den Einstellungen: Teste den Code in einer Kopie deiner Datei, um Fehler zu vermeiden und sicherzustellen, dass alles reibungslos funktioniert.


FAQ: Häufige Fragen

1. Kann ich die Eingabe und Ausgabe in der gleichen Zelle ohne VBA durchführen?
Leider ist das nicht möglich. Für Eingabe und Ausgabe in derselben Zelle musst du VBA verwenden.

2. Was passiert, wenn ich den Code nicht richtig anpasse?
Wenn der Code nicht korrekt angepasst wird, erhältst du möglicherweise Laufzeitfehler oder die Subtraktion funktioniert nicht wie gewünscht.

3. Wie kann ich den Code für andere Zellen anpassen?
Du kannst die Adresse der Zelle im If Target.Address Teil des Codes ändern, um ihn auf andere Zellen anzuwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige