Microsoft Excel

Herbers Excel/VBA-Archiv

Schleife mit IF Abfrage | Herbers Excel-Forum


Betrifft: Schleife mit IF Abfrage von: Hanspeter
Geschrieben am: 28.10.2008 07:31:34

Schleife mit IF Abfrage

Wie kann ich in VBA eine IF-Abfrage realisieren.

zB.:
Spalte A besitzt folgende Werte:
A1 20
A2 40
A3 60

A34 30

In C1 steht der Prüfwert zB. 40

Nun möchte ich mit einen Schleife die Spalte A auswerrten.

Wenn A1 > C1 dann soll in B1 „G“ stehen
Wenn A1 < C1 dann soll in B1 „K“ stehen
Wenn A1 = C1 dann soll in B1 „G“ stehen
….
Wenn A34 > C1 dann soll in B34 „G“ stehen
Wenn A34 < C1 dann soll in B34 „K“ stehen
Wenn A34 = C1 dann soll in B34 „G“ stehen

Analog für alle Werte in Spalte A, es können 20 bis 500 Werte sein.

Viele Grüße

Hanspeter

  

Betrifft: AW: Schleife mit IF Abfrage von: Beverly
Geschrieben am: 28.10.2008 07:50:19

Hi Hanspeter,

Sub schleife()
   Dim inZeile As Integer
   For inZeile = 1 To IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row,  _
Rows.Count)
      If Cells(inZeile, 1) >= Range("C1") Then
         Cells(inZeile, 2) = "G"
      Else
         Cells(inZeile, 2) = "K"
      End If
   Next inZeile
End Sub




GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Schleife mit IF Abfrage von: Hanspeter
Geschrieben am: 28.10.2008 08:02:56

Hallo Karin und Heiko,

danke für die schnelle Hilfe, leider habe ich bei der Angabe etwas geschlafen - war noch früh am Morgen ;-) Bei gleich (=) soll natürlich was anderes stehen, als "G", denn ich muss ja größer und gleich unterscheiden können. Für gleich würde ich dann einfach GL nehmen.

Gruß Hanspeter


  

Betrifft: AW: Schleife mit IF Abfrage von: Beverly
Geschrieben am: 28.10.2008 08:07:53

Hi Hanspeter,

Sub schleife()
   Dim inZeile As Integer
   For inZeile = 1 To IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row,  _
Rows.Count)
      If Cells(inZeile, 1) > Range("C1") Then
         Cells(inZeile, 2) = "G"
      ElseIf Cells(inZeile, 1) < Range("C1") Then Cells(inZeile, 2) = "K"
      Else
         Cells(inZeile, 2) = "GL"
      End If
   Next inZeile
End Sub



GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Schleife mit IF Abfrage von: Heiko S.
Geschrieben am: 28.10.2008 07:52:29

Hallo Hanspeter,

z.B. so, aber dafür brauchst du kein VBA das geht auch mit einer Formel !!!

Sub Pruefen()
Dim lngI As Long
With ActiveWorkbook.ActiveSheet
    For lngI = 1 To .Cells(65536, 1).End(xlUp).Row
        .Cells(lngI, 2) = IIf(.Cells(lngI, 1) >= .Cells(lngI, 3), "G", "K")
    Next lngI
End With
End Sub



Gruß Heiko

PS: Rückmeldung wäre nett !


  

Betrifft: AW: Schleife mit IF Abfrage von: Hanspeter
Geschrieben am: 28.10.2008 19:08:35

Hallo Heiko,

bei Deiner Lösung kommen immer "G". Nur in der ersten Zelle A1, wenn diese 20 enthält, dann steht in B1 "K" . Auch wenn in der Zelle zB A23 20 steht, wird dies ignoriert und es steht in B23 "G".

Viele Grüße Hanspeter


  

Betrifft: AW: Schleife mit IF Abfrage von: Tino
Geschrieben am: 28.10.2008 08:03:47

Hallo,
Beverly war schneller wie ich, stell meine Version dennoch hier rein.

Modul Modul1

Option Explicit 
 
Sub Auswertung() 
Dim Bereich As Range 
Dim sArea 
Dim i As Long 
 
Set Bereich = Range("A1", Cells(Rows.Count, "A").End(xlUp)) 
sArea = Bereich 
 
For i = 1 To Ubound(sArea) 
 Select Case sArea(i, 1) 
    Case Is >= Range("C1"): sArea(i, 1) = "G" 
    Case Is < Range("C1"): sArea(i, 1) = "K" 
 End Select 
Next i 
 
Bereich.Offset(0, 1) = sArea 
End Sub 



Gruß Tino


  

Betrifft: AW: Schleife mit IF Abfrage von: Tino
Geschrieben am: 28.10.2008 08:33:22

Sub Auswertung()
Dim Bereich As Range
Dim sArea
Dim i As Long
 
Set Bereich = Range("A1", Cells(Rows.Count, "A").End(xlUp))
sArea = Bereich
 
For i = 1 To Ubound(sArea)
 Select Case sArea(i, 1)
    Case Is > Range("C1"): sArea(i, 1) = "G"
    Case Is < Range("C1"): sArea(i, 1) = "K"
    Case Else: sArea(i, 1) = "GL"
 End Select
Next i
 
Bereich.Offset(0, 1) = sArea
End Sub




  

Betrifft: AW: Schleife mit IF Abfrage von: Hanspeter
Geschrieben am: 28.10.2008 08:48:28

Danke an Alle,

klappt natürlich.

Noch eine Frage an Tino:

was ist sArea?
bzw. was bewirkt Dim sArea?
Warum weist Du "Bereich" "sArea" zu und arbeitest nicht direkt mit "Bereich"?

Gruß Hanspeter (VBA Anfänger)



  

Betrifft: AW: Schleife mit IF Abfrage von: Tino
Geschrieben am: 28.10.2008 09:14:16

Hallo,
ich speichere den Zellbereich in einer Aria (Matrix),
in dieser kann ich wie in Zellen auch mit Zeilen und Spalten arbeiten
(in Deinem Beispiel gibt es nur eine Spalte).
In dieser Matrix kann ich die Werte bearbeiten und schreibe diese danach in den Bereich nebendran (Offset).
Grund, die Bearbeitung in der Area geht bei großen Zellbereichen wesentlich schneller als in der Zelle direkt.

Ich hoffe, dass ich es richtig erklärt habe!


Gruß Tino


  

Betrifft: Leicht ausbaufähig von: Tino
Geschrieben am: 28.10.2008 09:33:19

Hallo,
man kann dies natürlich jetzt noch leicht weiter ausbauen,
daher habe ich die Select Case Funktion gewählt.
Zum Beispiel, wenn nun in diesem Bereich eine Leere Zelle auftaucht,
soll diese bestimmt nicht mit bewertet werden.

Option Explicit

Sub Auswertung()
Dim Bereich As Range
Dim sArea
Dim i As Long
 
Set Bereich = Range("A1", Cells(Rows.Count, "A").End(xlUp))
sArea = Bereich
 
For i = 1 To Ubound(sArea)
 Select Case sArea(i, 1)
    Case Empty: sArea(i, 1) = ""
    Case Is > Range("C1"): sArea(i, 1) = "G"
    Case Is < Range("C1"): sArea(i, 1) = "K"
    Case Else: sArea(i, 1) = "GL"
 End Select
Next i
 
Bereich.Offset(0, 1) = sArea
End Sub




Gruß Tino


  

Betrifft: AW: Leicht ausbaufähig von: Hanspeter
Geschrieben am: 28.10.2008 09:55:29

ok, CASE habe ich verstanden,

aber kann denn eine leere Zelle auftauchen, wenn Du mit
.End(xlUp)
arbeitest? Wird dann nicht zur ersten leeren gesprungen?

Gruß Hanspeter


  

Betrifft: AW: Leicht ausbaufähig von: Tino
Geschrieben am: 28.10.2008 10:19:08

Hallo,
nein, dazwischen können auch leere Zellen sich befinden, kommt eben auf Deinen aufbau an.
Hier eine Grafik, diese sollte alles erklären.



Gruß Tino


Beiträge aus den Excel-Beispielen zum Thema "Schleife mit IF Abfrage"