Anzeige
Archiv - Navigation
1468to1472
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

prüfen sortieren

prüfen sortieren
14.01.2016 17:22:31
thomas
Hallo excelfreunde,
ich bin auf der suche nach einem macro das ein nicht actives tabellenblatt (die Arbeitsmappe ist offen) prüft ob sich in der spalte C nur Datumswerte befinden und wenn ja dann nach spalte c ( hat überschrift ) aufsteigend sortiert ( der zu sortierende Bereich wäre A:X ) und wenn nicht eine MSG Box aufgeht welche mir sagt wo ich die Fehlerhaften Werte finde.
Das mit dem sortieren kann ich ja noch aufzeichnen aber da ist wieder viel select drin. zu dem Püfen ob es datumswerte sind finde ich einfach nichts. ( Eins hatte ich fast aber es war leider viel zu langsam und funktionierte nur im aktiven Blatt.
Kann mir jemand dabei unterstützen? Oder hat jemand ein link für mich?
liebe grüsse thomas

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: prüfen sortieren
14.01.2016 17:36:13
Sepp
Hallo Thomas,
es wird auf Zahlen geprüft, denn jedes datum ist eine Zahl!
Eventuelle Textwerte werden markiert.
Sub checkDateandSort()
Dim rng As Range

With Sheets("Tabelle1") 'Tabellenname anpassen!
  With .Range("A1").CurrentRegion
    Set rng = .Columns(3).Offset(1, 0).Resize(.Rows.Count - 1, 1)
    If Application.CountA(rng) = Application.Count(rng) Then
      .Sort Key1:=.Cells(1, 3), Order1:=xlAscending, Header:=xlYes
    Else
      Set rng = rng.SpecialCells(xlCellTypeConstants, 2)
      rng.Interior.Color = vbRed
      MsgBox "Es befinden sich Textwerte in Spalte C!"
      Application.Goto rng
    End If
  End With
End With

Set rng = Nothing
End Sub

Gruß Sepp

Anzeige
AW: prüfen sortieren
14.01.2016 20:06:30
Thomas
Hallo Sepp und Peter,
es ist immer wieder erstaunlich wie schnell ihr so etwas aus dem ärmel schüttelt.
Habt recht vielen dank beide Macros sind sau schnell und zuverlässig. Die Idee die stellen gleich zu färben ist natürlich auch cool.
Jedoch wie es immer so ist bekommt man noch eine Prüfung mit rein?
Ich habe gerade festgestellt das ich noch die Spalte B prüfen muss ob die Werte positiv und sich kein #WERT! darin befindet.
Falls ein wert negativ ist oder ein Fehlerwert in der Spalte ist sollen wieder die betroffenen Stellen markiert und gemeldet werden.
Dazu habe ich ein teilmacro gefunden aber ich bekomme es in keins von beiden integriert.
könnt ihr noch mal schauen?
liebe grüsse thomas
Dim rngCell As Range
Set rngCell = .Columns(2).Offset(1, 0).Resize(.Rows.Count - 1, 1)
If rngCell.Value 0 Then
MsgBox "Bitte rote Zellen beachten !"

Anzeige
AW: prüfen sortieren
14.01.2016 20:40:06
Sepp
Hallo Thomas,
zweistufig, weil Spalte B lässt sich z. T. nur per Schleife prüfen.
Sub checkDateandSort()
Dim rng As Range, rngF As Range, rngC As Range

With Sheets("Tabelle1") 'Tabellenname anpassen!
  With .Range("A1").CurrentRegion
    Set rng = .Columns(3).Offset(1, 0).Resize(.Rows.Count - 1, 1)
    If Application.CountA(rng) = Application.Count(rng) Then
      Set rng = Nothing
      Set rng = .Columns(2).Offset(1, 0).Resize(.Rows.Count - 1, 1)
      On Error Resume Next
      Set rngF = rng.SpecialCells(xlCellTypeFormulas, 16)
      On Error GoTo 0
      If Application.CountA(rng) <> Application.Count(rng) Or _
        Application.CountIf(rng, "<0") > 0 Or Not rngF Is Nothing Then
        For Each rngC In rng.SpecialCells(xlCellTypeFormulas, 1)
          If rngC < 0 Then
            If rngF Is Nothing Then
              Set rngF = rngC
            Else
              Set rngF = Union(rngF, rngC)
            End If
          End If
        Next
        rngF.Interior.Color = vbRed
        MsgBox "Es befinden sich Fehler- oder Minus-Werte in Spalte B!"
        Application.Goto rngF
      Else
        .Sort Key1:=.Cells(1, 3), Order1:=xlAscending, Header:=xlYes
      End If
    Else
      Set rng = rng.SpecialCells(xlCellTypeConstants, 2)
      rng.Interior.Color = vbRed
      MsgBox "Es befinden sich Textwerte in Spalte C!"
      Application.Goto rng
    End If
  End With
End With

Set rng = Nothing
End Sub

Gruß Sepp

Anzeige
AW: prüfen sortieren
14.01.2016 21:48:02
Thomas
Hallo Sepp,
hab besten dank erstmal für die viele Arbeit.
Leider bekomme ich eine Fehlermeldung in der Zeile
Set rngF = rng.SpecialCells(xlCellTypeFormulas, 16)
Sie lautet " keine Zellen gefunden"
Ich hab schon versucht die 16 zu verändern aber es will nicht gelingen.
Findest Du den wurm?
hab recht vielen dank schon mal im voraus
liebe grüsse thomas

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


AW: prüfen sortieren
14.01.2016 21:51:15
Sepp
Hallo Thomas,
falsch gedacht ;-)) - von mir!
Da du von #WERT! gesprochen hast, war ich der Meinung, dass Formeln in Splate B stehen.
So läufts.
Sub Sepp_sortieren2()

Dim rng As Range, rngF As Range, rngC As Range

With Sheets("Tabelle1") 'Tabellenname anpassen!
  With .Range("A1").CurrentRegion
    Set rng = .Columns(3).Offset(1, 0).Resize(.Rows.Count - 1, 1)
    If Application.CountA(rng) = Application.Count(rng) Then
      Set rng = Nothing
      Set rng = .Columns(2).Offset(1, 0).Resize(.Rows.Count - 1, 1)
      On Error Resume Next
      Set rngF = rng.SpecialCells(xlCellTypeConstants, 16)
      On Error GoTo 0
      If Application.CountA(rng) <> Application.Count(rng) Or _
        Application.CountIf(rng, "<0") > 0 Or Not rngF Is Nothing Then
        For Each rngC In rng.SpecialCells(xlCellTypeConstants, 1)
          If rngC < 0 Then
            If rngF Is Nothing Then
              Set rngF = rngC
            Else
              Set rngF = Union(rngF, rngC)
            End If
          End If
        Next
        rngF.Interior.Color = vbRed
        MsgBox "Es befinden sich Fehler- oder Minus-Werte in Spalte B!"
        Application.Goto rngF
      Else
        .Sort Key1:=.Cells(1, 3), Order1:=xlAscending, Header:=xlYes
      End If
    Else
      Set rng = rng.SpecialCells(xlCellTypeConstants, 2)
      rng.Interior.Color = vbRed
      MsgBox "Es befinden sich Textwerte in Spalte C!"
      Application.Goto rng
    End If
  End With
End With

Set rng = Nothing
End Sub

Gruß Sepp

Anzeige
Sepp schaust du noch mal kurz?
14.01.2016 22:17:19
Thomas
Hallo Sepp,
erst war noch der selbe Fehler.
Dann habe ich die zeile
'Set rngF = rng.SpecialCells(xlCellTypeConstants, 16)
zum test deaktiviert und nun läuft es wie es scheint.
Es werden auch alle Prüfungen durchgeführt und ist sau schnell.
Kann es so bleiben? Oder lieber nicht.
ich hoffe ich nerve nicht.
besten dank für dein verständnis.
liebe grüsse thomas

AW: Sepp schaust du noch mal kurz?
14.01.2016 22:47:37
Sepp
Hallo Thomas,
also in deiner Datei kann ich den Fehler nicht reproduzieren!
Was steht den in B, wenn der Fehler auftritt?
Ohne diese Prüfung, werden Fehlerwerte nicht beachtet!
Gruß Sepp

Anzeige
AW: Sepp schaust du noch mal kurz?
15.01.2016 05:24:25
Thomas
Hallo Sepp,
es kommt noch der Fehler "keine Zellen" gefunden. Ich habe gerade festgestellt das der Fehler nur dann kommt
wenn in der Spalte c alles ok ist ( wenn das Macro kein text findet).
Schreibe ich ein text in spalte C rein läuft das Macro durch.
https://www.herber.de/bbs/user/102789.xlsm
liebe grüsse thomas

besten dank an sepp
15.01.2016 07:20:37
thomas
Hallo Sepp,
es ist zwar merkwürdig aber ich habe heute das Macro auf ein anderen Rechner getestet und da läuft es durch. Meine 1. Test habe ich auf ein Excel 2013 gemacht da läuft es nicht, aber auf Excel 2010 ( was ich ja auch angegeben habe) läuft es super und die Geschwindigkeit ist auch bei 5000 Datensätzen kaum zu merken, Wahnsinn. Ich benutze das Macro zwar am ende auch auf 2010 aber hast Du eine Idee wie man es zukunfts sicherer machen könnte?
liebe grüsse thomas

Anzeige
AW: besten dank an sepp
15.01.2016 08:47:27
Sepp
Hallo Thomas,
das der Fehler nur auftritt wenn in C alles OK ist, ist klar, weil B nur dann geprüft wird.
Probier es unter mal so.
Sub Sepp_sortieren2()
Dim rng As Range, rngF As Range, rngC As Range

With Sheets("Tabelle1") 'Tabellenname anpassen!
  With .Range("A1").CurrentRegion
    Set rng = .Columns(3).Offset(1, 0).Resize(.Rows.Count - 1, 1)
    If Application.CountA(rng) = Application.Count(rng) Then
      Set rng = Nothing
      Set rng = .Columns(2).Offset(1, 0).Resize(.Rows.Count - 1, 1)
      If Application.CountIf(rng, CVErr(xlErrValue)) > 0 Or Application.CountA(rng) > 0 Then
        On Error Resume Next
        Set rngF = rng.SpecialCells(xlCellTypeConstants, 18)
        Err.Clear
        On Error GoTo 0
      End If
      If Application.CountA(rng) <> Application.Count(rng) Or Application.CountIf(rng, "<0") > 0 Then
        For Each rngC In rng.SpecialCells(xlCellTypeConstants, 1)
          If rngC < 0 Then
            If rngF Is Nothing Then
              Set rngF = rngC
            Else
              Set rngF = Union(rngF, rngC)
            End If
          End If
        Next
        rngF.Interior.Color = vbRed
        MsgBox "Es befinden sich Fehler- oder Minus-Werte in Spalte B!"
        Application.Goto rngF
      Else
        .Sort Key1:=.Cells(1, 3), Order1:=xlAscending, Header:=xlYes
      End If
    Else
      Set rng = rng.SpecialCells(xlCellTypeConstants, 2)
      rng.Interior.Color = vbRed
      MsgBox "Es befinden sich Textwerte in Spalte C!"
      Application.Goto rng
    End If
  End With
End With

Errorhandler:

Set rng = Nothing
End Sub

Gruß Sepp

Anzeige
Super Sepp es passt
15.01.2016 10:20:16
Thomas
Hallo Sepp,
jetzt passt es super.
Hab recht vielen dank für deine Geduld und auch vor allen für die perfekte Lösung.
Ist sau gut und schnell.
liebe grüsse thomas

Super Sepp es passt
18.01.2016 10:00:46
Thomas
Hallo Sepp,
jetzt passt es super.
Hab recht vielen dank für deine Geduld und auch vor allen für die perfekte Lösung.
Ist sau gut und schnell.
liebe grüsse thomas

AW: prüfen sortieren
14.01.2016 17:51:19
Peter
Hallo Thomas,
das könnte so funktionieren:
Option Explicit
Public Sub Pruefen_sortieren()
Dim lLetzte  As Long
Dim lZeile   As Long
Dim sText    As String
With ThisWorkbook.Worksheets("Tabelle3") ' den Tabellenblattnamen ggf. anpassen!
lLetzte = .Cells(.Rows.Count, 3).End(xlUp).Row
For lZeile = 2 To lLetzte
If Not IsDate(.Range("C" & lZeile).Value) Then
If sText = "" Then
sText = "kein oder fehlerhaftes Datum in Zeile" & vbLf & vbLf & lZeile
Else
sText = sText & vbLf & lZeile
End If
End If
Next lZeile
If sText  "" Then
MsgBox sText
Exit Sub
End If
.Range("A2:X" & lLetzte).Sort _
Key1:=.Range("C2"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub

Gruß Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige