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

Forumthread: Formel per VBA einfügen, wenn Wert in Zelle = "IST

Formel per VBA einfügen, wenn Wert in Zelle = "IST
09.03.2008 11:25:09
wossi
Hallo zusammen,
wünsche erstmal einen schönen Sonntag.
Folgendes, in eine Zelle soll eine Formel kopiert werden, wenn ein bestimmtes Kriterium in einer Zelle vorhanden ist. Per Formel alles kein Problem, nur muss in der Zelle vorher ein manuell eingetragener Wert stehen. So dass man die Formel nicht von vorneherein einfügen kann. Zur Veranschaulichung habe ich mal eine Beispieltabelle hochgeladen.
Wer kann mir helfen? Danke.

Die Datei https://www.herber.de/bbs/user/50585.xls wurde aus Datenschutzgründen gelöscht


MfG
wossi

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel per VBA einfügen, wenn Wert in Zelle = "IST
09.03.2008 12:09:01
Gerd
Hallo Wossi,
wie kommt das Wort "Ist" in die Zelle(n) der Zeile 10 rein ?
(per Eingabe, per Code, per Formel ?)
Gruß Gerd

AW: Formel per VBA einfügen, wenn Wert in Zelle =
09.03.2008 12:46:53
wossi
Hi Gerd,
auf der Seite ist ein Drehfeld, dass bei betätigung hochzählt, und auf den Ausgabewert ist die Zelle "IST" mit einer WENN Formel verknüpft.
wossi

Anzeige
Danke. EIn paar Fragen habe ich noch dazu
09.03.2008 13:56:00
wossi
Hallo Herby,
vielen Dank. Da ich gerade erst anfange mich mit vba zu beschäftigen, habe ich doch glatt noch ein paar Verständnisfragen, denn nur cop/paste ist auch doof, wenn man es nicht versteht.
- warum ist der code in "Tabelle1" eingefügt und nicht als "Modul"?
- die "ActiveCell" ist gleich die "IST" Zelle? in der orginaldatei in der ich diesen Code einfügen möchte, ist die "ActiveCell" mit einer WENN Funktion hinterlegt
- in der Orginaldatei soll dieses Beispiel für viele Zellen verwendet werden, muss ich den Code dann x-mal einfügen und abändern? oder gibt es eine elegantere Lösung?
Kannst Du mir vielleicht hinter den Code eine kurze Erklärung geben?
Wossi

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Z As Range
Set Z = ActiveCell
If Not Intersect(Target, Z) Is Nothing Then
If Cells(16, Z.Column) > 0 Then
Cells(16, Z.Column).FormulaR1C1 = _
"=IF(R[-6]C=""IST"",VLOOKUP(R16C4,Tabelle2!C3:C7,R[-13]C[1],0),"""")"
Cells(16, Z.Column).Select
Else
MsgBox "In Zeile 16 fehlt der manuell erfasste Wert"
End If
End If
End Sub


Anzeige
AW: Danke. EIn paar Fragen habe ich noch dazu
09.03.2008 18:23:08
Herby
Hallo Wossi,
ich hab noch einen Fehler ausgemerzt und getestet:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Z As Range
'der Variablen Z ein Bereichsobjekt mit dem benötigten Bereich zuweisen
Set Z = Range("E10:P10")
' Prüfen ob die gerade geänderte Zelle sich im Bereich Z befindet
If Not Intersect(Target, Z) Is Nothing Then
' wenn geänderte Zelle im Bereich E10:P10 dann prüfen ob in Zeile 16 ein Wert steht
If Cells(16, Target.Column) > 0 Then
' in Zeile 16 die Formel eintragen
Cells(16, Target.Column).FormulaR1C1 = "=IF(R[-6]C=""IST"",VLOOKUP(R16C4,Tabelle2!C3: _
C15,R[-13]C[1],0),"""")"
' Cursor auf zeile 16 setzen
Cells(16, Target.Column).Select
Else
MsgBox "In Zeile 16 fehlt der manuell erfasste Wert"
Cells(16, Target.Column).Select
End If
End If
End Sub


Viele Grüße
Herby

Anzeige
AW: Formel per VBA einfügen, wenn Wert in Zelle = "IST
09.03.2008 12:12:01
Tino
Hallo,
als code ins entsprechende tabellenblatt.

Private Sub Worksheet_Change(ByVal Target As Range)
If (Intersect(Target, Range("F10:P10")) Is Nothing) And LCase(Target)  "ist" Then Exit Sub
Application.EnableEvents = False
Target.Offset(6, 0).FormulaLocal = "=SVERWEIS($D$16;Tabelle2!$C:$G;H3;0)"
Application.EnableEvents = True
End Sub


Gruß
Tino

Anzeige
AW: Fehler
09.03.2008 12:15:46
Tino
Hallo,
nur mit Formula ist nicht richtig, schreibe lieber mit
Target.Offset(6, 0).FormulaR1C1 = _
"=IF(R[-6]C=""IST"",VLOOKUP(R16C4,Tabelle2!C3:C7,R[-13]C[1],0),"""")"

sonst werden die Zellbereiche in der formel nicht angepasst.
Gruß
Tino

Danke, und auch an Dich noch ne Frage
09.03.2008 14:09:00
wossi
Hi Tino,
danke auch Dir. Auch wenn ich den Code, den Du mir geschrieben hast, etwas kürzer aus der von Herby aussieht, funktioniert er glaube ich besser, weil die "IST" Zelle mit einer WENN Funktion hinterlegt ist.
Wie ich auch schon zu Herby geschrieben habe, kannst du mir evtl. eine kurze Erläuterung hinter den Code schreiben? Und, in der Orginaldatei, sollen wesentlich mehr Zellen wie in diesem Beispiel so behandelt werden, muss ich diesen Code auf jede Zelle Anpassen und einfügen, oder würde das komfortabler gehen (für vba DAU´s)?
wossi

Anzeige
AW: Danke, und auch an Dich noch ne Frage
09.03.2008 14:21:03
Tino
Hallo,
siehe Beitrag oben (mit Kommentar)
Gruß
Tino

AW: Formel per VBA einfügen, wenn Wert in Zelle =
09.03.2008 13:37:00
fcs
Hallo wossi,
den folgende Code im VBA-Editor unter der Tabelle einfügen. Er wird ausgeführt, wenn SOLL in IST geändert wird (direkte Zellwert eingabe). Ob es in Verbindung mit dem Spilbutton funktioniert weiss icht nicht.
DIe Hilfswerte in Zeile 3 (1, 2, 3 usw) werden nicht benötigt, kann man mit Funktion SPALTE lösen.
Gruß
Franz

erzeugte Formel in H4:
=SVERWEIS($D16; Tabelle2!$C:$R; SPALTE(H16) - SPALTE($D16)+ 1; FALSCH)
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Zeile As Long, strFormel As String
If Not Intersect(Target, Range("E10:P10")) Is Nothing _
And Target.Cells.Count = 1 Then
If LCase(Target.Value) = "ist" Then
If MsgBox("Sollen die Werte in Spalte " & Target.Column _
& " (" & Chr$(Target.Column + 64) & ") durch die Formel ersetzt werden?", _
vbQuestion + vbYesNo) = vbYes Then
'Wert durch Formel ersetzen für Zeilen mit Eintrag in Spalte 4 eintragen
For Zeile = Target.Row + 2 To Cells(Rows.Count, 4).End(xlUp).Row
If Not IsEmpty(Cells(Zeile, Target.Column)) Then
strFormel = "=VLOOKUP(R[0]C4, 'Tabelle2'!C3:C18, column(R[0]C[0]) " _
& "- column(R[0]C4)+ 1 , False)"
Cells(Zeile, Target.Column).FormulaR1C1 = strFormel
End If
Next
End If
End If
End If
End Sub


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Formel per VBA einfügen, wenn Wert in Zelle = "IST"


Schritt-für-Schritt-Anleitung

Um eine Formel per VBA in Excel einzufügen, wenn der Wert in einer bestimmten Zelle "IST" ist, befolge diese Schritte:

  1. Öffne den VBA-Editor, indem Du ALT + F11 drückst.

  2. Wähle das entsprechende Arbeitsblatt aus, in das Du den Code einfügen möchtest.

  3. Füge den folgenden Code in das Codefenster ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Z As Range
       Set Z = Range("E10:P10")
       If Not Intersect(Target, Z) Is Nothing Then
           If Cells(16, Target.Column) > 0 Then
               Cells(16, Target.Column).FormulaR1C1 = _
               "=IF(R[-6]C=""IST"",VLOOKUP(R16C4,Tabelle2!C3:C15,R[-13]C[1],0),"""")"
               Cells(16, Target.Column).Select
           Else
               MsgBox "In Zeile 16 fehlt der manuell erfasste Wert"
           End If
       End If
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Ändere einen Wert in den Zellen E10 bis P10. Wenn der Wert "IST" ist, wird die Formel in Zeile 16 eingefügt.


Häufige Fehler und Lösungen

  • Fehler: Die Formel wird nicht eingefügt, wenn der Wert "IST" nicht erkannt wird.

    • Lösung: Stelle sicher, dass der Wert in der Zelle exakt "IST" und nicht "ist" oder "Ist" geschrieben ist. Du kannst die Eingabe auch in Kleinbuchstaben normalisieren.
  • Fehler: „In Zeile 16 fehlt der manuell erfasste Wert“ wird angezeigt, obwohl ein Wert vorhanden ist.

    • Lösung: Überprüfe, ob in Zeile 16 tatsächlich ein Wert steht. Der Code prüft nur, ob der Wert größer als 0 ist.

Alternative Methoden

Eine alternative Methode, um eine Formel einzufügen, besteht darin, die Worksheet_Change-Ereignisprozedur zu verwenden, um auf andere Bereiche zu reagieren. Du kannst den Code so anpassen, dass er in anderen Zellen oder Bereichen funktioniert.

Ein Beispiel:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("F10:P10")) Is Nothing Then
        If LCase(Target.Value) = "ist" Then
            Target.Offset(6, 0).FormulaR1C1 = "=SVERWEIS($D$16;Tabelle2!$C:$G;H3;0)"
        End If
    End If
End Sub

Praktische Beispiele

Hier sind einige Beispiele, die Dir helfen können, die VBA-Formel in verschiedenen Szenarien zu implementieren:

  1. Verwende die Formel, um Daten aus einer anderen Tabelle zu ziehen, wenn der Wert "IST" eingegeben wird:

    Cells(16, Target.Column).FormulaR1C1 = "=VLOOKUP(R[0]C4, 'Tabelle2'!C3:C18, column(R[0]C[0]) - column(R[0]C4)+ 1 , False)"
  2. Setze den Wert in eine andere Zelle, wenn ein bestimmtes Kriterium erfüllt ist:

    If Target.Value = "IST" Then
       Cells(Target.Row + 1, Target.Column).Value = "Neuer Wert"
    End If

Tipps für Profis

  • Nutze Application.EnableEvents = False, um unendliche Schleifen zu vermeiden, wenn Du Zellen innerhalb des Worksheet_Change-Ereignisses änderst.
  • Verwende FormulaR1C1, um sicherzustellen, dass Deine Formeln dynamisch angepasst werden, egal wo sie eingefügt werden.
  • Dokumentiere Deinen Code gut, damit Du auch in Zukunft verstehst, was Du programmiert hast.

FAQ: Häufige Fragen

1. Wie kann ich den Bereich für die Eingabe anpassen?
Du kannst den Bereich in Set Z = Range("E10:P10") ändern, um jeden gewünschten Bereich anzupassen.

2. Was passiert, wenn ich mehrere Zellen gleichzeitig ändere?
Der Code funktioniert möglicherweise nicht richtig, wenn mehrere Zellen gleichzeitig geändert werden. Achte darauf, dass nur eine Zelle geändert wird.

3. Funktioniert dieser Code in Excel 365?
Ja, der Code ist mit Excel 365 und auch mit früheren Versionen kompatibel, solange VBA unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige