Clever-Excel-Forum

Normale Version: Mehrere Suchergebnisse pro Zeile
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
[attachment=47704]

Hallo zusammen,

Ich habe in einer Tabelle Messergebnisse, bei der eine Messung pro Zeile aufgeführt ist.
In der Zeile sind dann Messwerte, bei denen hinter dem Messergebnis ein C steht, wenn das Ergebnis okay ist. Ein N,M oder H stehen dahinter, wenn der Messwert Niedrig,Mittel oder hoch ist.
Jetzt hätte ich gern in einem anderen Registerblatt oder unter der Originaltabelle eine Ausgabe aller Messwerte, die ein N,M oder H haben. Ich hatte das schon mit der Formel "FILTER" probiert, aber dann habe ich ja leere Spalten dazwischen.

Ich habe das mal als Beispieltabelle hinzugefügt.

Vielen Dank im Voraus schon einmal für Eure Hilfe.
Moin

Arbeitsblatt mit dem Namen 'Tabelle1'
ABCDEFGHIJKL
2503.03.2023 14:001420250,568M1452,63H325,145M365,412M2431,54H
2603.03.2023 14:156032547,22H3542,12H
2703.03.2023 14:171511
2803.03.2023 15:03815100,253N354,221M2468,12H

ZelleFormel
C25=LET(
a;ZEILENUMBRUCH
(C5:X5;2);
b;SPALTENWAHL
(a;2);
d;FILTER
(a;b<>"C";"");
ZUZEILE
(d))
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg
Sie können auch VBA verwenden, um die gewünschten Ergebnisse zu erzielen.
Hier ist ein Beispiel-Code, der Ihnen helfen könnte:
 
Code:
Sub FilterData()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastRow As Long, i As Long
    Dim criteria As Variant
    
    Set ws1 = Sheets("Sheet1") 'Ändern Sie "Sheet1" in den Namen Ihres Quellblatts
    Set ws2 = Sheets("Sheet2") 'Ändern Sie "Sheet2" in den Namen Ihres Zielblatts
    lastRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row 'Letzte Zeile in Spalte A finden
    criteria = Array("N", "M", "H") 'Kriterien festlegen
   
    For i = 2 To lastRow 'Von Zeile 2 bis zur letzten Zeile durchlaufen
        If IsNumeric(Application.Match(ws1.Cells(i, 4), criteria, 0)) Then 'Überprüfen, ob der Wert in Spalte D eines der Kriterien erfüllt
            ws1.Rows(i).Copy ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) 'Zeile kopieren und in das Zielblatt einfügen
        End If
    Next i
End Sub

 
Dieser Code durchläuft alle Zeilen in Ihrem Quellblatt und überprüft, ob der Wert in Spalte D eines der Kriterien (N, M oder H) erfüllt.
Wenn ja, wird die gesamte Zeile kopiert und in das Zielblatt eingefügt.
Sie müssen den Code anpassen und die Namen Ihrer Arbeitsblätter angeben.
Sie können diesen Code in einem VBA-Modul einfügen und ausführen.
 
Beispiel Datei: [attachment=47705]
 
 
Hoffe das es Ihnen in Ihren vorhaben weiterhilft.
Hallo,

der Makrovorschlag von Niko war schon mal ein guter Ansatz, nur es sollte eine spezifische Auswertung erfolgen.
Deshalb der geänderte Vorschlag (für nicht 365 Nutzer) im Anhang.

Gruß Stephan
Hallo Shift-Del,

Vielen Dank für Deine schnelle Antwort. Die Tabelle sieht genau so aus, wie ich es mir vorgestellt habe.
Also habe es heute auch gleich ausprobiert. Wenn ich die Formel allerdings eingebe, erhalte ich nur #WERT in der Zelle.

Hallo Nico,

Vielen Dank für die schnelle Antwort.
Der VBA-Code überprüft leider nur die Spalte D auf das Vorhandensein der Buchstaben N,M und H und nicht die gesamte Zeile.
Daher erfolgt dann auch nur eine Ausgabe, obwohl in anderen Zellen auch noch Überschreitungen vorhanden sind. In der ersten Zeile gibt es ja zum Beispiel ein M in Spalte H. Also sollte auch die erste Zeile mit allen Buchstaben gefunden werden.
Ich kenne mich leider mit VBA nicht aus, so dass ich es selber nicht anpassen kann.

Aber trotzdem vielen Dank
Moin,

mach dir nichts draus, die Codevorschläge von Niko wirken meist wie von ChatGPT kopiert.

Viele Grüße
derHöpp
Hallo Stephan,

Vielen Dank für die Anwort.
Auch der VBA Code passt leider nicht ganz auf meine Tabelle, weil er von einer Regelmäßigkeit der Buchstaben ausgeht.
Nicht in jeder zweiten Spalte steht ein Buchstabe. In meiner Originaltabelle habe ich das leider falsch dargestellt.
Hallo,

vielleicht passt diese VBA-Lösung zu deiner Frage. Der VBA-Code setzt nicht mehr voraus, dass in jeder zweiten Spalte ein Buchstabe ("H", "C", ...) steht. Er sucht in jeder Zeile einfach bis zu der Spalte, die in der Konstanten 'END_SPALTE_MESSWERTE' angegeben ist - hier z.B. die Spalte 26 (Spalte Z).

Eine Excel-Datei mit der Lösung habe ich beigefügt.

Gruß, Hermann

[attachment=47725]

Code:
Sub Auswertung()
    Const TABELLENNAME_MESSWERTE = "Messwerte"
    Const TABELLENNAME_AUSGABE = "Auswertung"
    Const ANFANGS_ZEILE_MESSWERTE = 4
    Const ANFANGS_SPALTE_MESSWERTE = 1
    Const END_SPALTE_MESSWERTE = 26   'bis zu dieser Spalte wird nach 'H', 'M' und 'N' gesucht - auch wenn Lücken dazwischen sind
    Const ANFANGS_ZEILE_AUSGABE = 12
    Const ANFANGS_SPALTE_AUSGABE = 1
   
    Dim wsMesswerte As Worksheet
    Dim wsAusgabe As Worksheet
    Dim rowMess As Long
    Dim colMess As Long
    Dim rowAus As Long
    Dim colAus As Long
   
    Set wsMesswerte = Worksheets(TABELLENNAME_MESSWERTE)
    Set wsAusgabe = Worksheets(TABELLENNAME_AUSGABE)
   
    rowMess = ANFANGS_ZEILE_MESSWERTE
    rowAus = ANFANGS_ZEILE_AUSGABE
    While wsMesswerte.Cells(rowMess, ANFANGS_SPALTE_MESSWERTE) <> ""
        colMess = ANFANGS_SPALTE_MESSWERTE
        colAus = ANFANGS_SPALTE_AUSGABE
        wsAusgabe.Cells(rowAus, colAus) = wsMesswerte.Cells(rowMess, colMess)
        colMess = colMess + 1
        colAus = colAus + 1
        wsAusgabe.Cells(rowAus, colAus) = wsMesswerte.Cells(rowMess, colMess)
        colMess = colMess + 1
        colAus = colAus + 1
        While colMess <= END_SPALTE_MESSWERTE
            While IsError(Application.Match(wsMesswerte.Cells(rowMess, colMess), Array("H", "M", "N"), 0)) And colMess <= END_SPALTE_MESSWERTE
                colMess = colMess + 1
            Wend
            If colMess <= END_SPALTE_MESSWERTE Then
                wsAusgabe.Cells(rowAus, colAus) = wsMesswerte.Cells(rowMess, colMess - 1)
                colAus = colAus + 1
                wsAusgabe.Cells(rowAus, colAus) = wsMesswerte.Cells(rowMess, colMess)
                colAus = colAus + 1
                colMess = colMess + 1
            End If
        Wend
        rowMess = rowMess + 1
        rowAus = rowAus + 1
    Wend
End Sub
Torsten,
dann nimmst du in der For - Schleife das Step 2 weg, dann funktioniert es auch.
Gruß Stephan
Hallo hbaum, Hallo Stephan,

Nach ein bißchen einlesen,probieren und umbauen habe ich jetzt das, was ich mir vorgestellt habe.
Ich habe einige Stunden damit verbracht, das Problem mit einer oder mehreren Formeln und Hilfstabellen hinzubekommen, bin aber leider gescheitert.
Dieser Weg ist viel schöner und schneller und hat mich inspiriert, mich jetzt doch endlich mal mit der VBA-Programmierung zu beschäftigen.

Vielen Dank an Euch !! Das spart mit jetzt jeden Tag einiges an Zeit.