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

Verschachtelte IF Anweisung

Forumthread: Verschachtelte IF Anweisung

Verschachtelte IF Anweisung
19.12.2017 14:45:27
Silke
Hallo zusammen,
folgendes Problem:
zwei Werte sollen überprüft werden.
Spalte 3 enthält Personal-Nr. mit Werte von
kleiner 18999
19000-19999
größer 90000
Spalte 2 enthält Kostenträger
100 für kleiner 19000
199 für 19000-19999
999 für größer 90000
Jetzt sollen alle Personal-Nr. geprüft werden und den richtigen Kostenträgern zugeordnet werden.
ABER: wenn die Zelle Personal-Nr. leer ist dann soll er unverrichteter Dinge weiter gehen zur nächsten Zelle. Es kommen nämlich leere Zellen vor.
Ich hab mich in VBA versucht, leider klappt es nicht. Nachfolgend der Code (bitte nicht erschrecken ich bin absoluter Anfänger) :-)
Option Explicit
Sub KostentraegerVerwalten()
Dim ls As Integer
Dim s As Integer
'** Ermittlung der letzten Zeile in Spalte 3
Application.ScreenUpdating = False
ls = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
'klappt
'** Durchlauf aller Zeilen
For s = ls To 2 Step -1 'Zählung rückwärts bis Spalte 1
'** Abfragen, ob in der ersten Spalte der Wert "" steht
'wenn ja dann nexte Zelle
Select Case Cells(s, 3).Value = ""
Case True
End Select
'Alles was kleiner 19000 ist soll den Kostenträger 100 erhalten.
If Cells(s, 3).Value  19000 & Cells(s, 3).Value = 90000 Then
Cells(s, 2).Value = 999
Else
End If
End If
End If
Next s
Application.ScreenUpdating = True
End Sub

Danke schon mal für die Hilfe.
LG Silke
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Verschachtelte IF Anweisung
19.12.2017 14:56:44
Bernd
Hi Silke,
teste mal

Sub KostentraegerVerwalten()
Dim ls As Integer
Dim s As Integer
ls = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
For s = ls To 2 Step -1
If Cells(i, 3).Value >= 90000 Then Cells(i, 2).Value = 999
If Cells(i, 3).Value >= 19000 And Cells(i, 3).Value 
Grüße, Bernd
Anzeige
AW: Verschachtelte IF Anweisung
19.12.2017 15:03:21
Bernd
Hi,
Leerzeilen vergessen und falsche Laufvariable...

Sub KostentraegerVerwalten()
Dim ls As Integer
Dim s As Integer
ls = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
For s = ls To 2 Step -1
If Cells(s, 3).Value = "" Then s = s - 1
If Cells(s, 3).Value >= 90000 Then Cells(s, 2).Value = 999
If Cells(s, 3).Value >= 19000 And Cells(s, 3).Value 

Anzeige
AW: Verschachtelte IF Anweisung
19.12.2017 15:08:04
ede
sorry, hab deinen code nochmals angepasst...., war noch ein kleiner Fehler drin
Sub KostentraegerVerwalten()
Dim ls As Integer
Dim i As Integer
ls = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
For i = ls To 2 Step -1
If Cells(i, 3).Value >= 90000 Then Cells(i, 2).Value = 999
If Cells(i, 3).Value >= 19000 And Cells(i, 3).Value 

Anzeige
AW: Verschachtelte IF Anweisung
19.12.2017 19:58:08
Bernd
Servus,
worin liegt denn mein Fehler?
Wenn die Zelle leer ist spring ich direkt in die nächste Zeile weiter...
Grüße Bernd
AW: Verschachtelte IF Anweisung
19.12.2017 20:37:54
guenni
.

Wenn nix drinnsteht ist 

AW: Verschachtelte IF Anweisung
19.12.2017 22:00:05
Bernd

ABER: wenn die Zelle Personal-Nr. leer ist dann soll er unverrichteter Dinge weiter gehen zur nächsten Zelle. 

Anzeige
AW: Verschachtelte IF Anweisung
20.12.2017 01:52:32
guenni
Du hast gefragt was du falsch gemacht hast, und nicht was passieren soll.
Ich habe Dir beschrieben, was Dein code macht
AW: Verschachtelte IF Anweisung
19.12.2017 15:10:25
guenni

Sub KostentraegerVerwalten()
Dim ls As Integer
Dim s As Integer
dim zellchen as range
'** Ermittlung der letzten Zeile in Spalte 3
Application.ScreenUpdating = False
ls = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
'klappt
'** Durchlauf aller Zeilen
For each zellchen in range(cells(1,3),cells(ls,3))
select case zellchen
case = 90000
zellchen.offset(0,1) = 999
case else
end select
Next
End Sub

Anzeige
AW: Verschachtelte IF Anweisung
19.12.2017 15:14:37
guenni
Offset(0,1) muss durch Offset(0,-1) ersetzt werden
habe die Spaltenanordnung verwechselt
AW: Verschachtelte IF Anweisung
19.12.2017 15:33:26
Silke
Hi nochmals,
es klappt alles wie gewünscht ;-)
Merci für eure Hilfe. Ihr seid Gold wert :-)
LG Silke
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Verschachtelte IF Anweisung in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine verschachtelte IF Anweisung in Excel VBA zu erstellen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub KostentraegerVerwalten()
        Dim ls As Integer
        Dim s As Integer
        ls = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
    
        For s = ls To 2 Step -1
            If Cells(s, 3).Value = "" Then
                ' Zelle ist leer, weiter zur nächsten
                Continue For
            ElseIf Cells(s, 3).Value < 19000 Then
                Cells(s, 2).Value = 100
            ElseIf Cells(s, 3).Value < 90000 Then
                Cells(s, 2).Value = 199
            Else
                Cells(s, 2).Value = 999
            End If
        Next s
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus: Drücke ALT + F8, wähle KostentraegerVerwalten und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: Zelle wird nicht übersprungen
    Lösung: Stelle sicher, dass Du die Bedingung für leere Zellen korrekt überprüfst. Nutze If Cells(s, 3).Value = "" Then Continue For.

  • Fehler: Falsche Kostenträgerzuweisung
    Lösung: Überprüfe die Bedingungen für die Kostenträgerzuweisung und stelle sicher, dass die Vergleichsoperatoren korrekt sind.

  • Fehler: Laufvariable nicht korrekt
    Lösung: Achte darauf, dass Du in der Schleife die richtige Variable verwendest (z.B. s statt i).


Alternative Methoden

Eine Alternative zur Verwendung von verschachtelten IF-Anweisungen ist die Verwendung von Select Case:

Sub KostentraegerVerwalten()
    Dim ls As Integer
    Dim s As Integer
    ls = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row

    For s = ls To 2 Step -1
        Select Case Cells(s, 3).Value
            Case Is < 19000
                Cells(s, 2).Value = 100
            Case 19000 To 89999
                Cells(s, 2).Value = 199
            Case Is >= 90000
                Cells(s, 2).Value = 999
            Case Else
                ' Zelle ist leer oder außerhalb der definierten Bereiche
        End Select
    Next s
End Sub

Praktische Beispiele

Ein Beispiel für die Anwendung einer verschachtelten IF Funktion:

Angenommen, Du hast eine Liste von Personalnummern in Spalte C und möchtest die entsprechenden Kostenträger in Spalte B zuweisen. Verwende den oben genannten Code, um die Werte automatisch zuzuweisen, abhängig von den Bedingungen.


Tipps für Profis

  • Debugging: Nutze Debug.Print innerhalb Deiner Schleifen, um den aktuellen Wert der Zellen zu überprüfen und Fehlerquellen zu identifizieren.

  • Optimierung: Vermeide redundante Berechnungen in Schleifen, indem Du Werte in Variablen speicherst.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen mit On Error Resume Next, um Laufzeitfehler elegant zu handhaben.


FAQ: Häufige Fragen

1. Was ist eine verschachtelte IF Anweisung in VBA?
Eine verschachtelte IF Anweisung ermöglicht es Dir, mehrere Bedingungen innerhalb einer IF-Anweisung zu überprüfen und darauf basierend unterschiedliche Aktionen auszuführen.

2. Wie gehe ich mit leeren Zellen um?
Überprüfe vor der Auswertung der Werte, ob die Zelle leer ist, und überspringe sie gegebenenfalls mit Continue For.

3. Kann ich auch Select Case verwenden?
Ja, Select Case ist eine gute Alternative zu verschachtelten IF-Anweisungen und kann oft den Code lesbarer machen.

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