Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
988to992
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
988to992
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wert soll = > sein

Wert soll = > sein
24.06.2008 21:40:00
Kurt
Guten Abend Allerseits,
ich habe folgendes, um einen Bereich zu selektieren, klappt soweit.
Der Wert steht in Nt z.b. 30
Nun möchte ich das die Variable aber als Wert nimmt => 30, um also
den nächsten Wert zu suchen der mit 30 oder 31 anfängt, da
auch 30 fehlen kann.
Dim ez As String
ez = ActiveSheet.Range("N5").Value
ez >= 30 ?
'MsgBox ez
Dim zz
Dim ze As Long
Dim z As Long
ActiveSheet.Range("A5").Select
zz = ActiveCell.Address()
Dim cc As Range
For Each cc In Range(Cells(6, 1), Cells(Rows.Count, 1).End(xlUp))
If Day(cc) = ez Then Application.Goto cc, True: Exit For
Next cc
mfg kurt

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

Betreff
Datum
Anwender
Anzeige
AW: Wert soll = > sein
25.06.2008 01:03:33
fcs
Hallo Kurt,
ich versteh nicht genau was du da vorhast. Auf alle Fälle darf die Variable ez nicht als String deklariert sein, wenn du sie mit einer Zahl vergleichen möchtes.
Was steht denn in N5 für eine Information, dass die ersten beiden Zeichen >= 30 sein sollen?

Dim ez As long
ez = Val(Left(ActiveSheet.Range("N5").Value, 2)
if ez >= 30 Then
'do what?
'MsgBox ez
Else
'do what?
End If


AW: Wert soll = > sein
25.06.2008 08:27:00
Kurt
Guten Morgen fcs,
ich möchte als erstes in der Spalte alles löschen was mit 30 oder größer anfängt,
wenn ich 30 so einsetze und in der Tabelle ist nicht das Datum 30 vorhanden sondern erst
2.07.08 dann springt dieser in den Juli.
In N5 steht die Zahl 30 als "Das löschen < als :" ##
gruß kurt

Anzeige
AW: Wert soll = > sein
25.06.2008 09:54:00
fcs
Hallo Kurt,
in N5 steht also einfach nur die Zahl mit einem benutzerdefinierten Format so dargestellt.
Dann steht in der Variablen auch "nur" die Zahl drin.
Wie du den Vergleich in der Prozedur dann machen muss hängt vom Inhalt der Zellen ab, die in de Spalte stehen.
Gruß
Franz

Sub aaaTest()
Dim ez As Variant
Dim zz
Dim ze As Long
Dim z As Long
Dim cc As Range
ez = ActiveSheet.Range("N5").Value
MsgBox ez 'Testzeile
'Inhalt in Zellen mit Wert >= 30 im Bereich löschen
For Each cc In Range(Cells(6, 1), Cells(Rows.Count, 1).End(xlUp))
If Day(cc) >= ez Then cc.ClearContents 'Bei Datum im Bereich
'    If cc >= ez Then cc.ClearContents 'Bei Zahl im Bereich
'    If Val(Left(cc, 2)) >= ez Then cc.ClearContents 'Bei Text im Bereich, der mit Zahl beginnt
Next cc
ActiveSheet.Range("A5").Select
zz = ActiveCell.Address()
For Each cc In Range(Cells(6, 1), Cells(Rows.Count, 1).End(xlUp))
If Day(cc) = ez Then Application.Goto cc, True: Exit For
Next cc
End Sub


Anzeige
Soweit verstand aber
25.06.2008 10:14:26
Kurt
Hallo Franz,
es klappt soweit allerdings habe ich ein kleines Problem.
In der Spalte stehen auch Daten vom nächsten Monat da kann es sein das eine
30 auftaucht somit wird erst weiter unten selectiert u. gelöscht.
Könnte man es so einbauen, wenn z.b. nehme ich dann 28:
Wenn >=28 bzw. nächste Zahl die drin steht z.b. 29,30 oder 31.
Geht das irgendwie ?
Ansonsten läuft dein Vorschlag.
gruß Kurt

AW: Soweit verstand aber
25.06.2008 10:51:06
fcs
Hallo Kurt,
wenn in dem Bereich ein Datum steht, dann kannst du zusätzlich auf den aktuellen Monat prüfen.

If Day(cc) >= ez And Month(cc) = Month(Date) Then cc.ClearContents


Dann wird nur gelöscht, wenn beide Kriterien erfüllt sind.
Aber irgendwie verstehe ich den Gesamtsinn der Prozedur nicht.
Du hast in Zelle N5 einen Wert z.B. 30 eingegeben.
Jetzt werden in der 1. For-Each-Schleife der Prozedur die Inhalte aller Zellen mit zutreffender Bedingung(>=30) gelöscht.
in der 2. For-Each-Schleife soll dann nach Zellen mit Wert ez gesucht werden und die Zelle der 1. Fundstelle gesprungen werden.
Das funktioniert doch nicht oder sind die Bereiche der beiden Schleifen verschieden?
Gruß
Franz

Anzeige
verschieden !
25.06.2008 11:12:22
Kurt
Hallo Franz,
ich habe die 1. Schleife so, die funktuioniert auch:
Dim ez As Variant
ez = Val(Left(ActiveSheet.Range("M2").Value, 2))
If ez >= ez Then
Habe den Bezug jetzt auf M2 geändert.
Aus If ez >= ez Then
sollte jetzt deine Info kommen: If Day(cc) >= ez And Month(cc) = Month(Date) Then cc.ClearContents
gruß Kurt

Bitte mal schauen
25.06.2008 12:29:00
Kurt
Hallo Franz,
ich habe mal was zusammengebastelt.
1. Werden die Daten ab 30.06.08 gelöscht und gleichzeitig wird ab 23.06.08
bis 30.06.08 selectiert.
2. Ich benötige jetzt nur die Lösung, wenn z.b. in M2 = 25 steht aber nicht vorhanden ist,
soll das NÄCHSTE Datum bzw. die Zahl genommen werden also wenn 27 da steht,
soll ab 27 selectiert werden.
Bitte nicht lachen aber das unten aufgeführt Makro läuft soweit:
Dim ez As Variant
ez = Val(Left(ActiveSheet.Range("M2").Value, 2))
If ez >= ez Then
Dim zz
Dim ze As Long
Dim z As Long
ActiveSheet.Range("I6").Select
zz = ActiveCell.Address()
Dim cc As Range
For Each cc In Range(Cells(6, 9), Cells(Rows.Count, 9).End(xlUp))
'If Day(cc) = ez Then Application.Goto cc, True: Exit For
If Day(cc) >= ez And Month(cc) = Month(Date) Then cc.Select
Next cc
z = Range(zz).End(xlDown).Row
Range(Cells(ActiveCell.Row, 1), Cells(z, 13)).Select
Selection.Delete Shift:=xlUp ' zeile löschen nach oben setzen
Dim c As Range
For Each c In Range(Cells(6, 9), Cells(Rows.Count, 9).End(xlUp))
If Day(c) = ez Then Application.Goto c, True: Exit For
Next c
Dim az
az = ActiveCell.Address() '
ActiveWindow.ScrollRow = 5 '5 Zeile
ActiveWindow.ScrollColumn = 1 '1 Spalte
Range(az).Select
'-------- ab jetzt den Rest löschen --------------
Dim za As Long
Dim Antwort As String
za = Range(az).End(xlDown).Row
Range(Cells(ActiveCell.Row, 1), Cells(za, 13)).Select
End If
Exit Sub
herzlichst Kurt

Anzeige
Habe Ergänzung brauch dringend DEINE Unterstützung
25.06.2008 14:25:00
Kurt
Hallo Franz,
habe mal weiter versucht, habe weitere Abfragen eingebaut, dies müßte irgendwie in eine
Schleife oder ?
'----------------------------------------
Dim ez As Variant
ez = Val(Left(ActiveSheet.Range("M2").Value, 2))
If ez >= ez Then
'----------------------------------------
Dim zz
Dim ze As Long
Dim z As Long
ActiveSheet.Range("I6").Select
zz = ActiveCell.Address()
Dim cc As Range
For Each cc In Range(Cells(6, 9), Cells(Rows.Count, 9).End(xlUp))
'If Day(cc) = ez Then Application.Goto cc, True: Exit For
If Day(cc) >= ez And Month(cc) = Month(Date) Then cc.Select
Next cc
z = Range(zz).End(xlDown).Row
Range(Cells(ActiveCell.Row, 1), Cells(z, 13)).Select
Selection.Delete Shift:=xlUp ' zeile löschen nach oben setzen
'Dim Mz As String
' Mz = Format(ActiveSheet.Range("M2").Value, "DD")
'Dim Mz As String
' Mz = 19
'MsgBox Mz
Dim c As Range
For Each c In Range(Cells(6, 9), Cells(Rows.Count, 9).End(xlUp))
If Day(c) = ez Then Application.GoTo c, True: Exit For
Next c
' ActiveCell.Offset(1, -8).Select
'-----------------------------------------------
<i>Dim nz As Variant
If ez <> "" Then
MsgBox "Datum kann nicht gefunden werden "
ActiveSheet.Range("I6").Select
nz = ez + 1
MsgBox nz
If nz <> "" Then
nz = ez + 2
MsgBox ez & "auch nicht da"
For Each c In Range(Cells(6, 9), Cells(Rows.Count, 9).End(xlUp))
If Day(c) = nz Then Application.GoTo c, True: Exit For
Next c
End If
End If</i>'---------------<b></b>--------------------------------
Dim az 'Orginal hier
az = ActiveCell.Address() '
ActiveWindow.ScrollRow = 5 '5 Zeile
ActiveWindow.ScrollColumn = 1 '1 Spalte
Range(az).Select
'-------- ab jetzt den Rest löschen --------------
Dim za As Long
Dim Antwort As String
za = Range(az).End(xlDown).Row
Range(Cells(ActiveCell.Row, 1), Cells(za, 13)).Select
End If
Exit Sub
gruß kurt

Anzeige
AW: Habe Ergänzung brauch dringend DEINE Unterstützung
26.06.2008 00:27:08
fcs
Hallo Kurt,
hier ein Beispiel.
Die Prozedur sucht zunächst im Bereich nach dem eingelesenen Wert. Wird dieser nicht gefunden, dann wir der Wert in der Schleife immer um 1 erhöht bis zum vorgegebenen Max-Wert.

Sub aaatest()
Dim varGesucht As Variant, varGefunden As Variant
Dim Zelle As Range
'Gesuchten wert einlesen
varGesucht = Val(Left(ActiveSheet.Range("M2").Value, 2))
varGefunden = varGesucht 'Hilfswert setzen
Do
'Prüfen, ob der Hilfswert die Bedingungen für eine Zelle im Bereich erfüllt
For Each Zelle In Range(Cells(6, 9), Cells(Rows.Count, 9).End(xlUp))
'If Day(Zelle) = varGefunden Then Application.Goto Zelle, True: Exit For
If Day(Zelle) = varGefunden And Month(Zelle) = Month(Date) Then
Zelle.Select
'Testzeilen --------------------- Anfang
If varGefunden = varGesucht Then
MsgBox varGesucht & " wurde gefunden"
Else
MsgBox varGesucht & " wurde nicht gefunden, aber nächst höherer Wert " & varGefunden
End If
'Testzeilen --------------------- Ende
Exit Do
End If
Next Zelle
varGefunden = varGefunden + 1
If varGefunden = 32 Then
MsgBox varGesucht & " nicht gefunden und auch kein anderer Wert bis 31"
Exit Sub
End If
Loop
End Sub


Noch ein paar Tipps:
Alle Dim-Anweisungen sollten zu Beginn einer Prozedur stehen und nicht verstreut im Code.
Du musst auch nicht unbedingt für jede Schleife neue Variablen deklarieren. Nur wenn du die Inhalte von Variablen später in der Prozedur nochmals benötigst dann sind unterschiedliche Variablen erforderlich. Ansonsten ist die wiederholte Verwendung der gleichen Variablen sinnvoll.
Ansonsten könnte man den Code noch um einige
....Select
Selection ....
Konstrukte bereinigen


ActiveSheet.Range("I6").Select
zz = ActiveCell.Address()
wir z.B. zu
zz=ActiveSheet.Range("I6").Address
oder
zz = "$I$6"


Gruß
Franz

Anzeige
DANKE Franz ! -)
26.06.2008 09:48:40
Kurt
Guten Morgen Franz,
danke !!!
Leider bin ich nicht so GUT wie Du, bin allerdings bereit noch einiges zu lernen,
dieses Makro hätte ich so nie geschafft.
DIM Anweisungen werde ich mal beachten auch das mit SELECT, habe schon viel
von meinem Vater abgesehen, der schon etwas besser ist als ich,
nochmals DANKE !
herzlichst Kurt

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige