Live-Forum - Die aktuellen Beiträge
Datum
Titel
07.05.2024 14:51:38
07.05.2024 13:27:17
Anzeige
Archiv - Navigation
1924to1928
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

makro änderung

makro änderung
18.03.2023 10:43:10
Thomas

Hallo Excelfreunde,

ich blende mit dem untenstehenden Makro alle Zeilen/Zellen der aktiven spalte aus, bei den der Wert entweder nur Zahlen sind oder den Kriterien "F" "U" oder "K" ( genaue Übereinstimmung, groß bzw. Kleinschreibung soll nicht unterschieden werden) entsprechen aus.

Nun möchte ich aber diese Kriterien aus den Zell Bereich Tabelle1 C1 : c12 nehmen. Aber ich bekomme es nicht hin.

So funktioniert es
If Not IsNumeric(sval) And sval > "F" And sval > "U" And sval > "K" Then ' so geht es

So aber leider nicht:

For i = 1 To 12

'If Not IsNumeric(sval) And sval > Tabelle1.Cells(i, 3).Value Then
bAus = False
Exit For ' Abbruch der Schleife, sobald ein Kriterium erfüllt ist
End If
Next i

Es werden zwar noch alle Numerischen Werte ausgeblendet aber die Kriterien der Tabelle1 werden nicht berücksichtigt.

Was ist falsch?

Sub Ausblenden8()
Application.ScreenUpdating = False

Dim lngZeile As Long
Dim lngLetzte As Long
Dim arrSuch As Variant
Dim i As Long
Dim bAus As Boolean
Dim arrI As Variant
Dim strAUS As String, vntAUS As Variant
Dim rngAus As Range
Dim s As Long
Dim ZWB As Workbook
Dim ZWS As Worksheet
Dim Start As Double
Dim sval As String
Dim cel As Range

Set ZWB = ThisWorkbook ' Ziel: Workbook mit diesem Makro
Set ZWS = ZWB.Worksheets("Urlaub")
Start = Timer
GetMoreSpeed

If mblnEvent = True Then Exit Sub
mblnEvent = True

Tabelle21.Protect Password:=""
ZWB.Worksheets("Urlaub").Activate
Tabelle1.Range("B1:B15").ClearContents
s = ActiveCell.Column

' letzte Zeile in Spalte E ermitteln
lngLetzte = ZWS.Range("E:E").Find("*", ZWS.Range("E2"), xlValues, , xlByRows, xlPrevious).Row

' nun alle Zeilen in Spalte E ab Zeile 2 durchlaufen (Zeile 1 enthält Überschrift - ggf. anpassen)
arrI = ZWS.Range(ZWS.Cells(1, s), ZWS.Cells(lngLetzte, s)).Value

For Each cel In ZWS.Range(ZWS.Cells(45, s), ZWS.Cells(lngLetzte, s))
' Marker für Ausblenden auf wahr setzen
bAus = True
sval = cel.Value

' Schleife durch die Kriterien-Range in Tabelle1


For i = 1 To 12

'If Not IsNumeric(sval) And sval > "F" And sval > "U" And sval > "K" Then ' so geht es
If Not IsNumeric(sval) And sval > Tabelle1.Cells(1, 3).Value And sval > "U" And sval > "K" Then ' so nicht
'If Not IsNumeric(sval) And sval > Tabelle1.Cells(i, 3).Value Then
bAus = False
Exit For ' Abbruch der Schleife, sobald ein Kriterium erfüllt ist
End If
Next i




If bAus Then
If rngAus Is Nothing Then
Set rngAus = cel.EntireRow
Else
Set rngAus = Union(rngAus, cel.EntireRow)
End If
Else
strAUS = strAUS & "|" & cel.Value
End If
Next cel

If Not rngAus Is Nothing Then
rngAus.EntireRow.Hidden = True
'vntAUS = Split(Mid(strAUS, 2), "|")
'Tabelle1.Cells(1, 2).Resize(UBound(vntAUS) + 1) = Application.Transpose(vntAUS)
End If

ZWS.Range(ZWS.Cells(45, s), ZWS.Cells(lngLetzte, s)).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Tabelle1").Range("B1")

GetMoreSpeed (0)
mblnEvent = False
MsgBox Format(Timer - Start, "#0.00") & " Sekunden gerödelt!"
End Sub


Kann mir jemand von euch dabei helfen?


mfg thomas

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

Betreff
Datum
Anwender
Anzeige
AW: makro änderung
18.03.2023 10:53:07
Oberschlumpf
Hi,

kannstdu per Upload eine Bsp-Datei mit Bsp-Daten + dem Code zeigen?

Ciao
Thorsten


AW: makro änderung
18.03.2023 12:58:41
Thomas
Hallo Oberschlumpf ,

besten dank das du mal geschaut hast.

Anbei ein kleines Beispiel, hat ein wenig gedauert sorry.

im Beispiel habe ich das Makro Ausblenden drin, eine Erklärung und ein Makro zum herstellen des original Zustands. Dies ist nur für diesen Test gedacht.

https://www.herber.de/bbs/user/158311.xlsm

mfg thomas


AW: makro änderung
18.03.2023 15:29:59
Eifeljoi5
Hallo

Wo ist das Problem mit einem Makro auszublenden?
Ausblenden:
ActiveSheet.Range("$A$42:$NP$158").AutoFilter Field:=10, Criteria1:=RGB(0, _
        176, 80), Operator:=xlFilterCellColor


Anzeige
AW: makro änderung
18.03.2023 15:32:39
Eifeljoi5
Und zum
Einblenden:
ActiveSheet.Range("$A$42:$NP$158").AutoFilter Field:=10


AW: makro änderung
18.03.2023 15:49:15
Thomas
Hallo Eifeljoi5 ,

besten dank für dein Interesse.

Die Werte habe ich nur zur besseren Erklärung grün formatiert. Im normalen Zustand sind diese nicht farblich.

Es sollen alle Zahlen und alle Werte die den Kriterien der Tabelle1 C1:C3 entsprechen ausgeblendet werden.

Hast du noch eine andere Idee?

mfg thomas


AW: makro änderung
18.03.2023 16:00:59
Eifeljoi5
Hallo

A) In Register Tabelle 1 in den Zellen C1 bis C3 steht schon mal gar nix.
B) Im Register Urlaub steht oben eine Bedingung.
So mit sind deine beiden Aussagen komplett falsch, dann kann der Antworter auch nur falsches Zeug liefern


Anzeige
AW: makro änderung
18.03.2023 16:18:54
Eifeljoi5
Hallo

Und wenn es diese 3 Buchstaben in Spalte B gemeint sind, dann zum ausblenden:
ActiveSheet.Range("$A$42:$NP$158").AutoFilter Field:=10, Criteria1:=Array( _
        "F", "K", "U"), Operator:=xlFilterValues
Beachte Groß- und Kleinschreibung


AW: makro änderung
19.03.2023 09:13:33
Thomas
Hallo Eifeljoi5,

erstmal besten dank das du dich trotz meiner unklaren Erklärung mit meinem Problem beschäftigt hast.

Ich habe das Beispiel und die Erklärung angepasst.

https://www.herber.de/bbs/user/158317.xlsm

Ich blende mit dem untenstehenden Makro alle Zeilen/Zellen der aktiven Spalte aus, bei den der Wert entweder nur reine Zahlen sind oder den Kriterien "F" "U" oder "K" ( genaue Übereinstimmung, groß bzw. Kleinschreibung soll nicht unterschieden werden) entsprechen, aus.

Nun möchte ich gern die zusätzlichen Kriterien ( zusätzlich zu den Zahlenwerten), welche derzeit im Makro fest verankert sind (F,U,K) variabel gestalten. Sie stehen jetzt in der Tabelle1 c1:c3. Mit
For Each c In Tabelle1.Range("C1:C3") ( im Makro gekennzeichnet)
versuche ich diese zusätzlichen Kriterien zu Berücksichtigen.
Aber dies funktioniert leider nicht. ( Die reinen Zahlenwerte sollen immer mit ausgeblendet werden) Weiß jemand was daran Falsch ist?

Sub ausblenden()
    Application.ScreenUpdating = False
    
    Dim lngZeile As Long
    Dim lngLetzte As Long
    Dim arrSuch As Variant
    Dim i As Long
    Dim bAus As Boolean
    Dim arrI As Variant
    Dim strAUS As String, vntAUS As Variant
    Dim rngAus As Range
    Dim s As Long
    Dim ZWB As Workbook
    Dim ZWS As Worksheet
    Dim Start As Double
    Dim sval As String
    Dim cel As Range
    
    Set ZWB = ThisWorkbook ' Ziel: Workbook mit diesem Makro
    Set ZWS = ZWB.Worksheets("Urlaub")
    Start = Timer
    'GetMoreSpeed


Range("j21").Activate ' nur zum testen



    If mblnEvent = True Then Exit Sub
    mblnEvent = True

    'Tabelle21.Protect Password:=""
    ZWB.Worksheets("Urlaub").Activate
    Tabelle1.Range("B1:B15").ClearContents
    s = ActiveCell.Column
    
    ' letzte Zeile in Spalte E ermitteln
    lngLetzte = ZWS.Range("E:E").Find("*", ZWS.Range("E2"), xlValues, , xlByRows, xlPrevious).Row
    
    ' nun alle Zeilen in Spalte E ab Zeile 2 durchlaufen (Zeile 1 enthält Überschrift - ggf. anpassen)
    arrI = ZWS.Range(ZWS.Cells(1, s), ZWS.Cells(lngLetzte, s)).Value
    
    For Each cel In ZWS.Range(ZWS.Cells(45, s), ZWS.Cells(lngLetzte, s))
        ' Marker für Ausblenden auf wahr setzen
        bAus = True
        sval = cel.Value
        
        ' Schleife durch die Kriterien-Range in Tabelle1
        
   '-----------------------------------------------------------------------------------------------------------------------------------------
        For i = 1 To 12
        If Not IsNumeric(sval) And sval > "F" And sval > "U" And sval > "K" Then                         ' so geht es
       ' If Not IsNumeric(sval) And sval > Tabelle1.Cells(i, 3).Value Then                                   ' so leider nicht
        
                bAus = False
                Exit For ' Abbruch der Schleife, sobald ein Kriterium erfüllt ist
            End If
        Next i
        
   '-------------------------------------------------------------------------------------------------------------------------------------
        
        
        If bAus Then
            If rngAus Is Nothing Then
                Set rngAus = cel.EntireRow
            Else
                Set rngAus = Union(rngAus, cel.EntireRow)
            End If
        Else
            strAUS = strAUS & "|" & cel.Value
        End If
    Next cel
    
    If Not rngAus Is Nothing Then
        rngAus.EntireRow.Hidden = True
        'vntAUS = Split(Mid(strAUS, 2), "|")
        'Tabelle1.Cells(1, 2).Resize(UBound(vntAUS) + 1) = Application.Transpose(vntAUS)
    End If
    
    ZWS.Range(ZWS.Cells(45, s), ZWS.Cells(lngLetzte, s)).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Tabelle1").Range("B1")

    'GetMoreSpeed (0)
    mblnEvent = False
    MsgBox Format(Timer - Start, "#0.00") & " Sekunden gerödelt!"
End Sub
Weiss jemand was ich falsch mache?

mfg thomas


Anzeige
AW: makro änderung
19.03.2023 13:52:14
Piet
Hallo Thomas

ein mordslanger Code, bitte teste mal den unteren Teilcode. Würde mich feuen wenn es damit klappt!

Störe dich bitte nicht an der 1. If Then Aanweisung, mein Programmerer Trick um unerwünschte Kriterien (z.b. Leerzellen in Tabelle1, oder Zahl) zu überspringen! (IF ohne Befehl dahinter!! vereinfacht das Programmmieren!)
Massgeblich ist dann die ElseIf Anweisung für die korrekte Auswertung. Verstanden??

mfg Piet

  • For i = 1 To 12 ' so geht es
    'If Not IsNumeric(sval) And sval > "F" And sval > "U" And sval > "K" Then
    If Tabelle1.Cells(i, 3) = Empty Or IsNumeric(sval) Then
    ElseIf sval = Tabelle1.Cells(i, 3).Value Then
    bAus = False: Exit For ' Abbruch webb Kriterium erfüllt ist
    End If
    Next i



  • Anzeige
    AW: makro änderung
    19.03.2023 16:38:02
    Thomas
    Hallo Piet,

    hab rechtvielen dank das du dir das mal angeschaut hast.

    Leider werden bei deiner Lösung alle Zeilen der Tabelle Urlaub ab Zeile 45 ausgeblendet.

    Kannst du noch mal rüber schauen?

    mfg thomas


    AW: makro änderung
    21.03.2023 20:19:31
    Piet
    Hallo

    dann versuche es bitte mal so wie unten. Kannst du, wenn es nicht klappt, eine Beispieldatei hochladen??

    mfg Piet

  • If Not IsNumeric(sval) Then
    For i = 1 To 12 ' so geht es
    If sval = Tabelle1.Cells(i, 3).Value Then
    bAus = False: Exit For ' Abbruch webb Kriterium erfüllt ist
    End If
    Next i
    End If



  • Anzeige
    AW: makro änderung
    21.03.2023 20:31:34
    Piet
    Nachtrag

    ich habe deine Beispieldatei gefunden und geöffnet. Das hat mich köstlich amüsiert!!
    Wenn du in allen Zellen "Reserve Feld" stehen hast muss das Makro ja so reagieren!!

    mfg Piet


    AW: makro änderung
    22.03.2023 10:37:37
    Piet
    Nachtrag

    mir fiel auf, dass der Text in Tabelle1 Kleinschrift ist. Wen du Fehler mit Gross/Kleinschrift vermeiden willst dann programmiere es so:
    Ob du UCase Grosschrift oder LCase Kleinchrift bnutzt ist egal! Beide müssen nur gleich sein!!
    If LCase(sval) = LCase(Tabelle1.Cells(i, 3)) Then

    mfg Piet

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige