Clever-Excel-Forum

Normale Version: In Spalte nach Wort suchen VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo!

Ich weiß nicht warum, aber ich bekomme es einfach nicht mehr hin!
Ich möchte gerne in der Spalte K im Tabellenblatt Januar Das Wort Nein Suchen!
Das ganze soll über eine Schleife laufen, bis zur letzten beschriebenen Zeile in der Spalte.
Wenn das Wort Nein gefunden wurde soll eine MSG Box  mit der Adresse, Spalte und Zeile erscheinen und der anzahle der gefunden Adressen.
Ich bekomme dies einfach nicht mehr hin.
Beim öffenen der Datei erscheint eine Userform, dort ist der CommandButton7 damit soll die suche gstartet werden
Ich hoffe auf eure Hilfe
Hi

In der Excelhilfe findest du zu Range.Find schon das Grundgerüst für deine Anfrage.  
Habe es etwas an deine Beschreibung angepasst, weis jetzt aber nicht ob die MsgBox bei jedem Fund erscheinen sollte oder nur am Schluss als Zusammenfassung.

Code:
Dim rngZ As Range
Dim StrAd As String
Dim n As Long

With Worksheets("Januar").Columns("k")
    Set rngZ = .Find("Nein", LookIn:=xlValues)
    If Not rngZ Is Nothing Then
        Do
          StrAd = StrAd & rngZ.Address & " / "
          n = n + 1
          Set rngZ = .FindNext(rngZ)
        Loop While Not rngZ Is Nothing And rngZ.Address <> Split(StrAd)(0)
    End If
End With
MsgBox StrAd & " Anzahl " & n
End Sub

Gruß Elex
Ich frage mich, was du mit der Msgbox bezweckst. Die hat doch keinen Mehrwert. Und schon gar nicht, wenn jedes gefundene Nein eine Msgbox auslösen soll (was zumindest deiner Beschreibung entspricht).

Die Anzahl lässt sich ganz simpel mittels Zählenwenn feststellen. Wofür du die Adressen der Zellen brauchst, weiß ich nicht.
Code:
Sub Test()
Dim adr As Range
Dim Anz As Integer
Set adr = Worksheets("Januar").Range("K2:K100")
Anz = Application.WorksheetFunction.CountIf(adr, "Nein")
MsgBox "Es wurden " & Anz & " Adressen gefunden"
End Sub
Hallöchen,

ich denke, wenn die Anzahl ausgegeben werden soll, dass die Msgbox dann eher an's Ende gehört.
Unter drei Voraussetzungen geht das auch ohne Schleife.
1. Es stört Dich nicht, wenn statt Zeile und Spalte die Adresse ausgegeben wird
2. Es stört Dich nicht, wenn bei aufeinanderfolgenden Nein eine Bereichsangabe erfolgt statt die Zellen einzeln aufzulisten
3. Deine Liste filterst Du vorher nach Nein (oder das Makro wird erweitert und übernimmt's für Dich)

Hinweise:
1. Im Makro hab ich den Bereich A2:A6 genommen. Den müsstest Du entsprechend Deiner Liste anpassen. Ansonsten hast Du in der Bereichsangabe noch die leeren Zellen unter Deiner Liste. Wenn die letzte Zeile variabel sein kann, könnte eine Makroerweiterung auch die Zeilennummer feststellen.
2. Beim Zählen kann man auch, wie schon geschrieben, WorkSheetFunction.CountIf verwenden.

PHP-Code:
Sub NoGo()
MsgBox Range("A2:A6").SpecialCells(xlCellTypeVisible).Address vbLf "Anzahl: " Range("A2:A6").SpecialCells(xlCellTypeVisible).Cells.Count
End Sub 
Hi,

und das Ganze ohne VBA nur mit Formeln:


Code:
=Aggregat(15;6;zeile(K:K)/(K:K="Nein");Zeile(a1))
=Zählenwenn(K:K;"Nein")
Hallo!
Vielen Dank an alle, für die Hilfe!
Ich habe den Code von Elex erstmal genommen.
Beantworte erstmal alle Fragen:
@ all die MsgBox dient nur zum kontrollieren, wo der Code was gefunden hat.
Ich hoffe damit ist die Frage zur MsgBox beantwortet, sie wird im weiteren Code nicht mehr benötigt.
 @ Opa Edgar es sollte eine VBA Lösung sein, danke für deine Antwort zum Thema
@Andre:


Zitat:ich denke, wenn die Anzahl ausgegeben werden soll, dass die Msgbox dann eher an's Ende gehört.
Unter drei Voraussetzungen geht das auch ohne Schleife.
1. Es stört Dich nicht, wenn statt Zeile und Spalte die Adresse ausgegeben wird
2. Es stört Dich nicht, wenn bei aufeinanderfolgenden Nein eine Bereichsangabe erfolgt statt die Zellen einzeln aufzulisten
3. Deine Liste filterst Du vorher nach Nein (oder das Makro wird erweitert und übernimmt's für Dich)

Zu Punkt 3
Ich filtere die Liste nicht vorher, das Makro soll in der Spalte nach Nein suchen, egal was in der nächsten Zeile steht.
Zu Punk 1+2
Doch es stört mich das die Adresse ausgegeben wird!
Ich möchte lieber eine Ausgabe der Spalte und Zeile!
Habe es wieder mal sehr schlecht beschrieben. Sorry!

Versuche mal dass zu beschreiben wofür es gebraucht wird:

Wir bekommen Täglich Störmeldungen per Mail zugesendet, diese werden auch ausgedruckt und in einer Excel Tabelle hinterlegt. Die Tabelle ist fortlaufend.
Der als erstes da ist, legt die ausgedruckten Meldungen auf eine Tisch. Die Mitarbeiter kommen nach für nach und nehmen sich eine Meldung und gehen zur Störungsbeseitigung. Es kommt dann vor das keiner weiß wo ein Mitarbeiter ist oder ob die Störung schon bearbeitet wird. Dies soll durch eine Ansicht über Excel verbessert werden. Mein Gedanke dann, Warum nicht eine UF wo alle was eintragen können. Ich möchte das visuell  machen.
Der Mitarbeiter geht her und wählt seinen Namen in der UF aus und  trägt die Anfangszeit ein. Name ausgewählt wird das Frame farbig und man weiß dort wird schon dran gearbeitet.
Alle Meldungen die in der Excel Tabelle unter „Abgeschlossen“ mit „Nein“ stehen sollen in der UF sichtbar sein.

Dafür ist es auch hilfreich wenn ich weiß wo das Nein gefunden wurde, Zeile, Spalte und Anzahl.

Die Anzahl damit ich weiß, wie viele Frames eingeblendet werden sollen.
Noch eine Anmerkung, die Meldungen werden in der UF als Frames dargestellt, in dem Frame sind Textboxen,Comboboxen, optionssbutton und
CheckBoxen entahlten. Die geben dem User dann alle Info's,  wie in der Beispiel Datei zu sehen ist.

Ich hoffe ich habe euch nicht allzu sehr verwirrt.

Aber nochmal Danke für die Hilfe
Hallo Michael,
Das hat schon gepasst. Ich wollte nur aufzeigen dass es unter bestimmten Bedingungen einfacher gehen könnte.