Eingabe und Ausgabe in der gleichen Zelle

Bild

Betrifft: Eingabe und Ausgabe in der gleichen Zelle
von: Dr. Hilflos
Geschrieben am: 07.04.2005 19:10:46
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

Bild

Betrifft: ohne VBA keine chance...
von: ransi
Geschrieben am: 07.04.2005 19:35:43
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 

     Code eingefügt mit Syntaxhighlighter 3.0


..und dann mal ein wenig damit experimentieren..
ransi
Bild

Betrifft: ziehe meine antwort zurück
von: ransi
Geschrieben am: 07.04.2005 19:51:55


      
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 

     Code eingefügt mit Syntaxhighlighter 3.0


Bild

Betrifft: AW: ziehe meine antwort zurück
von: Dr. Hilflos
Geschrieben am: 08.04.2005 13:56:40
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
Bild

Betrifft: geht mit intersect, aber mehr infos sind nötig.
von: ransi
Geschrieben am: 08.04.2005 15:15:27
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
Bild

Betrifft: AW: geht mit intersect, aber mehr infos sind nötig
von: Dr. Hilflos
Geschrieben am: 08.04.2005 15:35:18
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
Bild

Betrifft: für jede zelle 4500?
von: ransi
Geschrieben am: 08.04.2005 15:54:25
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
Bild

Betrifft: AW: für jede zelle 4500?
von: Dr. Hilflos
Geschrieben am: 08.04.2005 16:08:19
Hiho ransi,
ja in jeder Zelle soll 4500 subtrahiert werden.
Na in dem Fall nochmal Danke,
Torsten
Bild

Betrifft: AW: für jede zelle 4500?
von: ransi
Geschrieben am: 08.04.2005 16:21:08
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
Bild

Betrifft: AW: für jede zelle 4500?
von: Dr. Hilflos
Geschrieben am: 08.04.2005 19:24:49
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
Bild

Betrifft: AW: für jede zelle 4500?
von: ransi
Geschrieben am: 08.04.2005 21:07:30


      
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 

     Code eingefügt mit Syntaxhighlighter 3.0


Bild

Betrifft: AW: für jede zelle 4500?
von: Dr. Hilflos
Geschrieben am: 10.04.2005 14:39:06
Jippppppiieeeeeeeeeee
jippie jippieee jipppiiee
es klappt,
es klappt.
Danke, danke, danke, ransi.
Hast mir echt super gholfen.
Bis dann,
Torsten
Bild

Betrifft: freut mich wenns klappt..o.T.
von: ransi
Geschrieben am: 10.04.2005 16:37:32

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Eingabe und Ausgabe in der gleichen Zelle"