Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Differenz mit Offset in activer Zelle berechnen

Differenz mit Offset in activer Zelle berechnen
Dietmar
Hallo zusammen,
ich möchte zur Ressourcenschonung keine Excel-Formeln verwenden, sondern Einzelfallbezogen eine Differenz
berechnen lassen.
Und zwar soll das Ergebnis per VBA-Code in die active Zelle geschreiben werden.
Dabei muss sichergestellt sein, dass das Ergebnis
a) nur dann erzeugt wird, wenn die ErgebnisZelle in einer bestimmten Spalte aktiviert wird
b) wenn in der Zelle links daneben ein Wert steht.
Beigefügt habe ich eine kleine Beispieldatei.
https://www.herber.de/bbs/user/79623.xls
Herzlichen Dank vorab!
Ich bin wieder sehr gespannt :-)
Dietmar aus Aachen
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Differenz mit Offset in activer Zelle berechnen
31.03.2012 12:50:45
Hajo_Zi
Hallo Dietmar,
benutze doch das Ereignis
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

AW: Differenz mit Offset in activer Zelle berechnen
31.03.2012 12:50:46
Hajo_Zi
Hallo Dietmar,
benutze doch das Ereignis
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Anzeige
sorry, ...
31.03.2012 13:20:37
Dietmar
Hallo Hajo,
... leider bin ich noch nicht soweit, dass ich diesen Tipp verarbeiten kann.
VBA ist halt recht *bescheiden*, so wie angegeben.
Ideen habe ich viele, allein die Umsetzung ist oft schwierig für mich.
Obwohl, dass darf ich sagen, ich hier schon viel gelernt habe :-)
Viele Grüße
Dietmar
Anzeige
AW: Differenz mit Offset in activer Zelle berechnen
31.03.2012 12:58:24
Reinhard
Hallo Dietmar,
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Zelle As Range, Zei As Long
Set Target = Intersect(Target, Range("O10:O26"))
If Target Is Nothing Then Exit Sub
For Each Zelle In Target
Zei = Zelle.Row
If Zelle.Offset(0, -1).Value  "" Then
Target.Value = Application.Sum(Range("A" & Zei & ":M" & Zei)) - Zelle.Offset(0, -1).Value
Else
MsgBox Zelle.Offset(0, -1).Address & " ist leer."
Exit For
End If
Next Zelle
End Sub

Gruß
Reinhard
Anzeige
Cool ...
31.03.2012 13:23:02
Dietmar
Hallo Reinhard,
super gelöst. Damit komme ich klar
Herzlichen Dank! Auch bei allem guten Willen, da wäre ich im Detail nicht daraufgekommen.
Viele Grüße und ein schönes WE !
Dietmar
Korrekturbedarf
01.04.2012 12:42:08
Dietmar
Hallo Reinhard,
habe getüftelt, finde die Lösung aber leider nicht.
Wie müsste ich den Code anpassen wenn ich einen Eintrag in einer Zelle von Spalte N eingebe und nach Verlassen der Zelle das Ergebnis in der Zelle rechts daneben (also Spalte O) haben möchte?
Beispiel:
In 'O10' soll also die Differenz aus 'A10:M10' und dem Eintrag in 'N10' erzeugt werden, wenn ich 'N10' verlasse.
Erneut vielen Dank voab!
Dietmar aus Aachen
Anzeige
AW: Korrekturbedarf
01.04.2012 12:47:56
Hajo_Zi
Hallo Dietmar,
selection ist da das flasche Ereignis.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 14 Then
Application.EnableEvents = False
Target.Offset(0, 1) = Target
Application.EnableEvents = True
End If
End Sub


Anzeige
herzlichen Dank! ...
01.04.2012 13:19:34
Dietmar
Hallo Hajo,
herzlichen Dank und noch einen schönen sonnigen Sonntag.
Das ist ja der Hammer, wann bist denn eigentlich mal nicht 'on`?
Viele Grüße
Dietmar aus Aachen
AW: herzlichen Dank! ...
01.04.2012 13:23:16
Hajo_Zi
Hallo Dietmar,
ich muss irgendwann auch mal arbeiten und da bin ich nicht in den Foren.
Gruß Hajo
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Differenz mit Offset in aktiver Zelle berechnen


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei, in der Du die Differenzen berechnen möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Wähle im Projektfenster das entsprechende Arbeitsblatt aus.

  4. Füge den folgenden VBA-Code in das Arbeitsblattmodul ein:

    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       Dim Zelle As Range, Zei As Long
       Set Target = Intersect(Target, Range("O10:O26"))
       If Target Is Nothing Then Exit Sub
       For Each Zelle In Target
           Zei = Zelle.Row
           If Zelle.Offset(0, -1).Value <> "" Then
               Target.Value = Application.Sum(Range("A" & Zei & ":M" & Zei)) - Zelle.Offset(0, -1).Value
           Else
               MsgBox Zelle.Offset(0, -1).Address & " ist leer."
               Exit For
           End If
       Next Zelle
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Aktiviere die Zellen in Spalte O (O10 bis O26). Die Differenzen werden nun automatisch berechnet, wenn in der linken Zelle ein Wert steht.


Häufige Fehler und Lösungen

  • Fehler: "Die Zelle ist leer."

    • Lösung: Stelle sicher, dass in der Zelle links neben der aktiven Zelle ein Wert steht, bevor Du die Berechnung anforderst.
  • Fehler: Der Code wird nicht ausgeführt.

    • Lösung: Überprüfe, ob das Makro aktiviert ist. Gehe zu Datei > Optionen > Sicherheit und stelle sicher, dass die Makros aktiviert sind.

Alternative Methoden

Eine alternative Methode zur Berechnung der Differenzen ohne VBA ist die Nutzung von Excel-Formeln. Du kannst die OFFSET-Funktion verwenden, um die Differenz direkt in einer Zelle zu berechnen:

=SUM(A10:M10) - OFFSET(N10, 0, -1)

Diese Formel kannst Du in die Zelle O10 eingeben und dann nach unten ziehen. Damit kannst Du die differenzen berechnen, ohne VBA zu verwenden.


Praktische Beispiele

  1. Beispiel 1: Berechnung in Zelle O10 basierend auf Werten in A10 bis M10 und N10.
  2. Beispiel 2: Wenn Du in N15 einen Wert eingibst und O15 die Differenz zwischen der Summe von A15 bis M15 und N15 anzeigen soll, funktioniert das gleiche Prinzip.

Tipps für Profis

  • Verwende den Worksheet_Change-Ereignis, um die Berechnung direkt auszulösen, wenn Du die Zelle verlässt. Dies optimiert den Code und sorgt dafür, dass die Berechnung nur dann erfolgt, wenn es notwendig ist:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Column = 14 Then ' Spalte N
           Application.EnableEvents = False
           Target.Offset(0, 1).Value = Application.Sum(Range("A" & Target.Row & ":M" & Target.Row)) - Target.Value
           Application.EnableEvents = True
       End If
    End Sub
  • Nutze die Application.EnableEvents = False-Anweisung, um zu verhindern, dass der Code in eine Endlosschleife gerät.


FAQ: Häufige Fragen

1. Wie kann ich den VBA-Code anpassen, um die Differenz in eine andere Spalte zu schreiben? Du kannst die Offset-Methode anpassen, um die Zelle zu ändern, in die das Ergebnis geschrieben wird.

2. Funktioniert dieser Code in allen Excel-Versionen? Der VBA-Code ist in den meisten Excel-Versionen ab 2010 funktionsfähig. Achte darauf, dass du die richtige Version verwendest, um Probleme zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige