Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
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

VBA - Auswahl von Treffer nach Kriterium

VBA - Auswahl von Treffer nach Kriterium
11.02.2023 13:11:46
Treffer
Hallo Excel Experten,
ich habe zu der Ausführung eines Makros eine Frage:
Das weiter unten angegeben Makro kopiert von "Auswahl1" nach "Ansicht1" bestimmte Daten:
Die Werte aus den Spalten 5 Min. vor "I3" bis 10 Min. nach "I3"
wobei in "I3" der "Richtwert" steht.
Sub b_KopierenHeimHeim()
    Dim TB1 As Worksheet, TB2 As Worksheet
    Dim Z1 As Integer, LR As Long, SP As Integer
    Dim Zelle As String, RNG As Range, Such As String
    '*****
    Set TB1 = Sheets("Ansicht1")
    Set TB2 = Sheets("Auswahl1")
    Zelle = "I3"
    Z1 = 10
    '*****
    Such = TB1.Range(Zelle)
    LR = TB2.Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes
    If WorksheetFunction.CountIf(TB2.Rows(Z1), Such) > 0 Then
        SP = WorksheetFunction.Match(Such, TB2.Rows(Z1), 1)
        Set RNG = TB2.Cells(Z1 + 1, SP - 5).Resize(LR - Z1 + 1, 16)
        RNG.SpecialCells(xlCellTypeVisible).Copy TB1.Range("D9")
    End If
End Sub

Das Makro funktioniert eigentlich wie gewünscht bis auf den "Umstand", dass wenn in "I3" eine Minutenzahl von unter 20 eingegeben ist,- dann kommt Fehlermeldung.
Meine Frage;
Wie ändere ich das Makro, so das ich in "I3" auch Werte von 6-19 eintragen kann?
Zur Beispielmappe:
https://www.herber.de/bbs/user/157784.xlsb
Kann ein Experte bitte mal drauf schauen und mir eine Lösung anbieten?!
Gruss
Fred

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Auswahl von Treffer nach Kriterium
11.02.2023 17:34:55
Treffer
Hallo Fred,
wie läuft das gekicke?
Es ist zu hinterfragen, ob eine Variable, die nur einmal verwendet wird, sein muss. Konstanten können helfen, wenig Variable zu haben.
Dein Problem liegt wahrscheinlich daran, dass wenn SP <= 5 einen negativen Spaltennummer entsteht -> Fehler!
Genau gesehen sollte LR auch so "beschränkt" werden. Es sei denn das Risiko besteht nicht, weil LR immer >= cMinutenZeile.
Sub b_KopierenHeimHeim()
Dim TB2 As Worksheet
Dim LR As Long
Dim SP As Long
Const cMinuteZelle = "I3" 'Wert, die nicht geändert werden, kann man als Konstante definieren: Definition + Init in einem
Const cMinutenZeile = 10
Const cMinSpalte = 6 'anpassen!
    Set TB2 = Sheets("Auswahl1")
    LR = TB2.Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes
    With WorksheetFunction
        If .CountIf(TB2.Rows(cMinutenZeile), TB1.Range(cMinuteZelle)) > 0 Then
            SP = .Match(Such, TB2.Rows(cMinutenZeile), 1)
            SP = .Max(cMinSpalte, SP) 'Korrektur: nie weiter nach links als cMinSpalte. Sonst könnte SP - 5 negativ werden
            Set RNG = TB2.Cells(cMinutenZeile + 1, SP - 5).Resize(LR - cMinutenZeile + 1, 16)
            RNG.SpecialCells(xlCellTypeVisible).Copy Sheets("Ansicht1").Range("D9")
        End If
    End With
End Sub
VG
Yal
Anzeige
AW: VBA - Auswahl von Treffer nach Kriterium
11.02.2023 19:17:57
Treffer
Danke Yal und Oraculix
für eure Aufmerksamkeit und Mühe!
Leider klappt keines eurer Korrekturen, Ergänzungen ...
entweder kommt Fehlermeldung (Yal) oder macht falsche Einträge (Oraculix)
.. da habe ich heute Nacht noch einiges zu probieren ...
Gruss
Fred
AW: VBA - Auswahl von Treffer nach Kriterium
11.02.2023 21:05:29
Treffer
Hallo Yal,
dein Makro verursacht eine Fehlermeldung.
Wenn ich dieses mit
Dim TB1 As Worksheet
Set TB1 = Sheets("Ansicht1")
ergänze

'Deklaration der Variablen
Dim TB2 As Worksheet
Dim LR As Long
Dim SP As Long
'Definition von Konstanten für nicht veränderbare Werte
Const cMinuteZelle As String = "I3"
Const cMinutenZeile As Integer = 10
Const cMinSpalte As Integer = 6
'Zuweisung des Worksheets "Auswahl1" zur Variablen TB2
Set TB2 = Sheets("Auswahl1")
'Zuweisung des Worksheets "Ansicht1" zur Variablen TB1
Set TB1 = Sheets("Ansicht1")
'Berechnung der letzten belegten Zeile im Worksheet "Auswahl1"
LR = TB2.Cells.SpecialCells(xlCellTypeLastCell).Row
'Berechnung des ersten Auftretens des gesuchten Werts
With WorksheetFunction
    If .CountIf(TB2.Rows(cMinutenZeile), TB1.Range(cMinuteZelle)) > 0 Then
        SP = .Match(Such, TB2.Rows(cMinutenZeile), 1)
        SP = .Max(cMinSpalte, SP) 'Korrektur: nie weiter nach links als cMinSpalte. Sonst könnte SP - 5 negativ werden
        Set RNG = TB2.Cells(cMinutenZeile + 1, SP - 5).Resize(LR - cMinutenZeile + 1, 16)
        'Kopieren des sichtbaren Bereichs aus dem Worksheet "Auswahl1" in das Worksheet "Ansicht1"
        RNG.SpecialCells(xlCellTypeVisible).Copy Sheets("Ansicht1").Range("D9")
    End If
End With
kommt immernoch eine Fehlermeldung:
Laufzeitfehler 1004
Die Match-Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden
Was ist daran falsch?
Gruss
Fred
Anzeige
AW: VBA - Auswahl von Treffer nach Kriterium
11.02.2023 23:18:04
Treffer
Hallo Fred,
ich wollte WorksheetFunction im With auslagern, um den Code leichter zu machen, aber es scheint nicht einen Objekt zu sein, sondern ein Bezeichner für eine Bibliothekzuordnung zu sein, also nicht "with"-fähig.
Mache es aus dem with raus und füge es vor dem Match und vor dem Max.
VG
Yal
AW: VBA - Auswahl von Treffer nach Kriterium
11.02.2023 17:45:33
Treffer
Sorry besser bekomme ich es nicht hin. Es wird jetzt kein Fehler mehr Angezeigt.
Sub b_KopierenHeimHeim()
Dim TB1 As Worksheet, TB2 As Worksheet
Dim Z1 As Integer, LR As Long, SP As Integer
Dim Zelle As String, RNG As Range, Such As String
Set TB1 = Sheets("Ansicht1")
Set TB2 = Sheets("Auswahl1")
Zelle = "I3"
Z1 = 10
Such = CStr(TB1.Range(Zelle))
LR = TB2.Cells.SpecialCells(xlCellTypeLastCell).Row
If WorksheetFunction.CountIf(TB2.Rows(Z1), Such) > 0 Then
    On Error Resume Next
    SP = WorksheetFunction.Match(Such, TB2.Rows(Z1), 1)
    On Error GoTo 0
    If SP > 0 Then ' Überprüfung, ob "Such" in der Reihe gefunden wurde
        Set RNG = TB2.Cells(Z1 + 1, SP - 5).Resize(LR - Z1 + 1, 16)
        RNG.SpecialCells(xlCellTypeVisible).Copy TB1.Range("D9")
    End If
End If
End Sub
Gruß
Oraculix
Anzeige
AW: VBA - Auswahl von Treffer nach Kriterium
11.02.2023 17:54:01
Treffer
Versuche auch mal das Feld i3 auf Zahl zu formatieren.
Gruß
Oraculix

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige