Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1016to1020
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schleife mit IF Abfrage

Schleife mit IF Abfrage
28.10.2008 07:31:34
Hanspeter
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 Wenn A1 = C1 dann soll in B1 „G“ stehen
….
Wenn A34 > C1 dann soll in B34 „G“ stehen
Wenn A34 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

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife mit IF Abfrage
28.10.2008 07:50:19
Beverly
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




AW: Schleife mit IF Abfrage
28.10.2008 08:02:56
Hanspeter
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
Anzeige
AW: Schleife mit IF Abfrage
28.10.2008 08:07:00
Beverly
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) 




AW: Schleife mit IF Abfrage
28.10.2008 07:52:00
Heiko
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 !

Anzeige
AW: Schleife mit IF Abfrage
28.10.2008 19:08:35
Hanspeter
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
AW: Schleife mit IF Abfrage
28.10.2008 08:03:00
Tino
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

Anzeige
AW: Schleife mit IF Abfrage
28.10.2008 08:33:22
Tino
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


Anzeige
AW: Schleife mit IF Abfrage
28.10.2008 08:48:28
Hanspeter
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)
AW: Schleife mit IF Abfrage
28.10.2008 09:14:00
Tino
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
Anzeige
Leicht ausbaufähig
28.10.2008 09:33:19
Tino
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

Anzeige
AW: Leicht ausbaufähig
28.10.2008 09:55:00
Hanspeter
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
AW: Leicht ausbaufähig
28.10.2008 10:19:08
Tino
Hallo,
nein, dazwischen können auch leere Zellen sich befinden, kommt eben auf Deinen aufbau an.
Hier eine Grafik, diese sollte alles erklären.
Userbild
Gruß Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige