Makro Inhalt Suche

Hallo ans Forum!

Um Versuchsdaten auszuwerten brauche ich ein Makro, das mir die Tabelle „beschneidet“ und nur die benötigten Spalten darstellt.

Die Tabelle ich groß und der relevante Bereich befindet sich mittig. So muss ich die ersten paar Zeilen ( 80 bis 100 sind es etwa, der Bereich „schwimmt“ ) löschen oder ausblenden. Die darauf folgenden paar Tausend Werte brauche ich, die darunter nicht mehr ( hide-n, löschen, egal )

Die so dargestellte gekürze Tabelle enthält drei für mich relevante Spalten mit jeweils schwimmenden „Adressen“ ( Beispiel: K65 oder L68 ) jedoch konstander Länge ( es geht immer gleich „tief“ runter unter der Überschrift in der Spalte. Die Überschriften sind immer gleich - gesuchte Daten )

Ich hoffe ich konnet das Problem verständlich beschreiben und danke euch im Voraus für eure Mühe / Wissen / Willen zu helfen =)

Jo.

Hallo fotomustang,

zunächst das ausblenden der bereiches schwimmt:

sub ausblenden()
Range(„schwimmt“).entirerow.hidden = true
end sub

den rest würde ich dann manuell löschen.

um Spalten auszublenden verwendest du

sub spalte_ausblenden()
Range(„A1“).EntireColumn.Hidden = True 'blendet A aus

end sub

den letzten absatz habe ich jedoch nicht ganz verstanden. Ich hoffe ich konnte dir erst mal helfen.

(VBA editor öffnen mit [ALT] + [F11] --> Makro reinbasteln )

LG olli

Hallo,
also zunächst: eine klare Problembeschreibung ist das nicht (von der Grammatik ganz zu schweigen - das ärgert mich immer wieder, man will Hilfe und nimmt sich nicht die Zeit, sich korrekt auszudrücken)

  • Löschen/Ausblenden von Zeilen/Spalten geht in Excel via Menüleiste, wozu einen Makro?
  • Was sind schwimmende Zeilen- variabler Bereich?
  • Werden Daten mehrfach angeliefert und sollen beschnitten werden?
  • welche VBA-Kenntnisse liegen vor?
    Ein einfacher Lösungsansatz: mache einen Makromitschnitt (Extras->Makros->Mitschnitt) und benutze den als Vorlage. Je nach vorliegenden Kriterien kann man den gewünschten Bereich im Makro ermitteln und isolieren.
    Viel Erfolg
    Rainer

hallo Olli

manuell kann ich das immer wieder machen =)

Ich möchte die Auswertung automatisieren, sodass das Makro mir die geforderten Spalten sucht und den Rest ausblendet. Weil aber die Spalten mit relevanten Daten immer an verschiedenen Stellen sind ( und auch noch „mittig“ in der tabelle liegt! ), muss ich sie mit einem Makro suchen lassen.

Gibt es einen Weg, die Spalte A nach einem Inhalt durchsuchen zu lassen, und die Zeilen DARÜBER zu löschen?

das würde ich wie folgt lösen:

Sub spalten_ausblenden()
Dim iEnd As Integer 'ist die Zeile
Dim i As Integer 'Laufvariable
Dim a As Integer
a = 1 'Spalte A
iEnd = 1

Do Until Cells(iEnd, a).Value = „test“
iEnd = iEnd + 1
Loop

For i = 1 To iEnd - 1
Cells(i, 1).EntireRow.Hidden = True
Next i

End Sub

Ok, ich versuche es struktirierter zu beschreiben.

Es liegt eine große Tabelle mit versuchsdaten vor: 12000 Zeilen lang und breit bis zur Spalte „EK“.

In der „Mitte“ der Tabelle [Zeile XXX und drunter, die Zeile XXX ist der „schwimmende Bereich“, es kann je nach Prüfstand und Versuchszyklus auch mal 106, 112, 189 oder andere Werte annehmen]

Der relevante Bereich erstreckt sich also im Zeilenbereich von XXX (variabel!) bis [XXX+10000]. In diesem Bereich sind Hunderete von Spalten mit Messdaten. Drei dieser Spalten sind für die konkrete Auswertung interessant. Die Übersriften dieser Spalten sind bekannt: Ü1, Ü2, Ü3.

SO sieht die Tabelle aus:

ZEILE nicht relevant
ZEILE nicht relevant

ZEILE nicht relevant
ZEILE nicht relevant
ZEILE nicht relevant
ZEILE nicht relevant

ZEILE nicht relevant

ZEILE relevant
Daten _ _ _ Ü1 _ _ Ü2 _ _ Ü3_ _ _ _
Daten _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Daten _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Daten _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Daten _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Daten _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

ZEILE nicht relevant
ZEILE nicht relevant

und SO möchte ich die Tabelle sehen:

ZEILE relevant
Daten Ü1 Ü2 Ü3
Daten _ _ _ _:
Daten _ _ _ _:
Daten _ _ _ _:
Daten _ _ _ _:
Daten _ _ _ _:
Daten _ _ _ _:
Daten _ _ _ _:

Durch Aufzeichnen kann ich das Problem nicht lösen, da die Zeile und Spalte sich immer unterscheidet („schwimmt“).

Darum frage ich euch nach einer Möglichkeit mit einem Marko die Tabelle zu durchsuchen und nicht relevante Stalpen und / oder Zeilen auszublenden.

Ich hoffe so ist’s verständlicher!

Jo

also zunächst: eine klare Problembeschreibung ist das nicht
(von der Grammatik ganz zu schweigen - das ärgert mich immer
wieder, man will Hilfe und nimmt sich nicht die Zeit, sich
korrekt auszudrücken)

  • Löschen/Ausblenden von Zeilen/Spalten geht in Excel via
    Menüleiste, wozu einen Makro?
  • Was sind schwimmende Zeilen- variabler Bereich?
  • Werden Daten mehrfach angeliefert und sollen beschnitten
    werden?
  • welche VBA-Kenntnisse liegen vor?
    Ein einfacher Lösungsansatz: mache einen Makromitschnitt
    (Extras->Makros->Mitschnitt) und benutze den als Vorlage. Je
    nach vorliegenden Kriterien kann man den gewünschten Bereich
    im Makro ermitteln und isolieren.
    Viel Erfolg
    Rainer

und noch etwas: ich habe nich in VBA programmiert. Im Rahmen des Studiums habe ich in C programmiert.

sieht super aus! =) Ich versuche mich mal im Anpassen! :smile: Danke!!!

hallo fotomustang,
kann Ihnen leider in dieser Sache nicht weiterhelfen, sorry
Gruß
DidiM

Hallo,

ist es nicht das einfachste den entsprechenden Bereich zu markieren, kopieren und in ein neues sheet einzufügen?

Gruß

Recht hast du! :smile: Diese Auswertung wird immer häufiger gemacht. So macht es in meinen Augen Sinn die Prozedur zu automatisieren. Manuelles Raussuchen von Daten aus einer Tabelle von mehreren Tausend Zeilen ist sehr aufwändig :-/

Okay, danke,
jetzt ist es etwas klarer. Programmierkenntnisse sind vorhanden, VBA (Visual Basic for Applications) ist einfach. Grundsätzlich:

  • eine Excel-Tabelle ist programmiertechnisch eine Matrix, man kann auf jede Zelle lesend und schreibend zugreifen, z.B. Cells(„C5“) oder Cells(row, col), hier Cells(5, 3) - also umgekehrte Reihenfolge. row und col können direkte Zahlen oder entsprechende Variablen sein, z.B.
    Dim row as long ’ mehr als 32.767 möglich
    Dim col as integer ’ langt, da VbNullstring
    if Cells(1, col) = „Suchbegriff Anfang“ then
    col_start = col
    end if
    if Cells(1, col) = „Suchbegriff Ende“ then
    col_end = col
    exit do ’ Bereich gefunden, weitersuchen sinnlos
    end if
    col = col + 1 ’ wichtig!!!
    Loop
    Analog die Zeilen durchsuchen, dann liegt der Bereich fest. Ein Makromitschnitt zeigt wie Zeilen/Spalten ausgeblendet werden, in diesen Makro kann man den o.a. Code einbauen. Der Makromitschnitt verwendet die Notation z.B. Columns(„C:smiley:“), das ist durch Range(Rows(3), Rows(4)) zu ersetzen (analog für die Spalten Range(Cols(.), Cols(.)), statt 3 und 4 natürlich die oben ermittelten Variablen.
    Ende der Vorlesung, sonst wird es zu viel. Einfach mal (nach Sicherung der Tabelle!) ausprobieren, die Makromitschnitte und die Hilfe liefern immer gute Beispiele).
    Und noch ein Hinweis: VBA konvertiert die Schlüsselwörter, z.B. if -> If etc.
    Viel Erfolg
    Rainer

Musste gerade schnell weg.

Dein Makro funktioniert einwandfrei! Danke!!! Ich versuche jetzt dazu eine Umschaltfläche zu bauen ( Ein / Ausblenden auf Knopfdruck )

Wie kann ich nun den eingeblendeten Bereich nach einem bekannten Inhalt durchsuchen? Ich nehme an, dieses Makro wird geringfügig geändert werden müßen. UND es sind genau drei relevante Begriffe vorhanden, sprich es werden drei Spalten benötigt ( drei Überschriften ), der Rest kann ausgeblendet oder gelöscht werden.

Sub spalten_ausblenden()Dim i As Integer
For i = 1 To 400 'Die nummer der letzten Spalte, die durchsucht werden und aus/eingeblendet werden soll    Select Case Cells(1, i).Value        Case „Erster Begriff“            Cells(1, i).EntireColumn.Hidden = False        Case „Zweiter Begriff“            Cells(1, i).EntireColumn.Hidden = False        Case „Dritter Begriff“            Cells(1, i).EntireColumn.Hidden = False        Case Else            Cells(1, i).EntireColumn.Hidden = True    End SelectNext i
End Sub

Sub spalten_ausblenden()Dim i As Integer
For i = 1 To 400
'Die nummer der letzten Spalte, die durchsucht werden
'und aus/eingeblendet werden soll

Select Case Cells(1, i).ValueCase "Erster Begriff"Cells(1, i).EntireColumn.Hidden = FalseCase "Zweiter Begriff"Cells(1, i).EntireColumn.Hidden = FalseCase "Dritter Begriff"Cells(1, i).EntireColumn.Hidden = Falsecase ElseCells(1, i).EntireColumn.Hidden = Trueend SelectNext i
End Sub

–> Diese blöde formation hier ^^

Sub spalten_ausblenden()Dim i As Integer
For i = 1 To 400 'Die nummer der letzten Spalte, die durchsucht werden und aus/eingeblendet werden soll    Select Case Cells(1, i).Value
        Case „Erster Begriff“
            Cells(1, i).EntireColumn.Hidden = False
        Case „Zweiter Begriff“
            Cells(1, i).EntireColumn.Hidden = False
        Case „Dritter Begriff“
            Cells(1, i).EntireColumn.Hidden = False
        Case Else
            Cells(1, i).EntireColumn.Hidden = True
    End Select
Next i
End Sub

danke Rainer!

Leider hat meine Datei auch leere Zeilen. Kann ich statt VbNullstring eine bestimmte Zelle angeben? Zum Beispiel A12600.

und ich würde versuchen die durchlaufenen Zeilen auszubenden: habe ich in deinem Zitat ergänzt und mit einem Pfeil gekennzeichnet.

Die Zeilen, die einen höheren Wert haben als col_end, würde ich bis 12600 hochzählen lassen und nacheinander ausblenden. Meinst ud das funktioniert?

dim col as integer
dim col_start as integer
dim col_end as integer
col=1
Do While Cells(1, col) VbNullstring
if Cells(1, col) = „Suchbegriff Anfang“ then
col_start = col

-> Else: Cells(1, col).EntireRow.Hidden = True

end if
if Cells(1, col) = „Suchbegriff Ende“ then
col_end = col
exit do ’ Bereich gefunden, weitersuchen sinnlos
end if
col = col + 1 ’ wichtig!!!
Loop
Analog die Zeilen durchsuchen, dann liegt der Bereich fest.
Ein Makromitschnitt zeigt wie Zeilen/Spalten ausgeblendet
werden, in diesen Makro kann man den o.a. Code einbauen. Der
Makromitschnitt verwendet die Notation z.B. Columns(„C:smiley:“),
das ist durch Range(Rows(3), Rows(4)) zu ersetzen (analog für
die Spalten Range(Cols(.), Cols(.)), statt 3 und 4 natürlich
die oben ermittelten Variablen.
Ende der Vorlesung, sonst wird es zu viel. Einfach mal (nach
Sicherung der Tabelle!) ausprobieren, die Makromitschnitte und
die Hilfe liefern immer gute Beispiele).
Und noch ein Hinweis: VBA konvertiert die Schlüsselwörter,
z.B. if -> If etc.
Viel Erfolg
Rainer

Leider kann ich dir bei diesen Problem nicht weiterhelfen.

MFG

Sorry, nochmal das Thema Sorgfalt: was hast Du wo ergänzt? Ich kann nichts sehen?!
Prinzipell funktioniert alles, Du kannst bis zur maximalen Spalte/Zeile suchen, das ist nur eine Frage der Laufzeit, spielt aber keine Rolle, wenn das Ende-Suchkriterium existiert und zum Ende der Suchschleife führt (Exit Do).
Ausblenden kann man natürlich jede einzelne Zeile/Spalte, diesmal wirklich Frage der Laufzeit, warum nicht gleich den ganzen Bereich?
Und noch ein Tipp: wenn Du Zeilen/Spalten löschen willst, bitte immer am unteren/rechten Ende, weil das Löschen ab Anfang natürlich den ermittelten Bereich verschiebt!
So, nun sollte es aber langen (ich gebe nur Hilfen, mache aber keine Codierungen!), einfach mal probieren, das geht laut Sprichwort immer noch über studieren.
Viel Erfolg
Rainer

Olli!
folgendes Habe ich bisher im Makro:

Sub meinMakro()
Dim iEnd As Integer 'i st die Zeile
Dim i As Integer ’ Laufvariable
Dim a As Integer
a = 1 'Spalte A
iEnd = 1 ’ Relevanter Bereich in Sheet beginnt -> Zeilennummer

Do Until Cells(iEnd, a).Value = „Suchwort“
iEnd = iEnd + 1
Loop

iEnd2 = iEnd ’ Relevanter bereicht in Sheet endet -> Zeilennummer

Do Until Cells(iEnd2, a).Value = " //MEIN_PROBLEM//"
iEnd2 = iEnd2 + 1
Loop

For i = 1 To iEnd - 1
Cells(i, 1).EntireRow.Hidden = True
Next i

’ spalten_ausblenden()

For i = 2 To 150
Select Case Cells(iEnd, i).Value
Case „RRR“
Cells(iEnd, i).EntireColumn.Hidden = False
Case „ZZZ“
Cells(iEnd, i).EntireColumn.Hidden = False
Case „YYY“
Cells(iEnd, i).EntireColumn.Hidden = False
Case „XXX“
Cells(iEnd, i).EntireColumn.Hidden = False
’ False zum nicht ausblenden
Case Else
Cells(iEnd, i).EntireColumn.Hidden = True
’ True zum ausblenden
End Select
Next i

End Sub

Was es macht weist du besser als ich :smile: Es schneidet eben unwichtiges für meine Auswertung ab.

Nun habe ich das Problen, dass ich an einer Stelle eine Leerstelle abfragen/suchen möchte, die aber sehr wohl im Test beschrieben wurde. Mit folgendem Makro kann ich immer nur die Zeile finden, die anscheinend nicht im Test beschrieben wurde: auch nicht mit dem Befehl „gehe eine Zeile runter“.

Weisst du darüber etwas? Welchen String müßte ich da suchen?

Du bist mir heute eine richtig gute Hilfe gewesen =) Danke! echt Klasse!