Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schleife

Schleife
20.07.2007 17:25:00
Michael
Hallo
Benötige Hilfe bei einer Schleife. Die Schleife soll Spalte A und B nach einen Text durchsuchen und die Zeile markieren.
Diese soll beendet werden, wenn eine leere Zelle hier b7 gefunden wird.
Mit selection.find, wie unten angegeben, habe ich schon eine Makroaufneahme hinbekommen, mehr jedoch nicht.
Vielen Dank
Selection.Find(what:="test", After:=ActiveCell, LookIn:=xlFormulas, _
lookat:=xlPart, searchorder:=xlByRows, searchDirection:=xlNext).Activate
Dieses ist umständlich und kompliziert!
A B
1 test Test
2 dsdsf Test sadf
3 asdfasd fsadf
4 sdf test
5 saf df
6 asdf test sadf
7 ENDE der Schleife

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

Betreff
Datum
Anwender
Anzeige
AW: Schleife
20.07.2007 18:34:00
firmus
ungefähr so sollte es klappen:
Sub test() anzzeilen = ActiveSheet.UsedRange.Rows.Count '# Zeilen anzspalten = ActiveSheet.UsedRange.Columns.Count '# Spalten gelb = 6 rot = 3 For z = 1 To anzzeilen If Len(Cells(z, 1).Value) > 0 Then If Cells(z, 1).Value = 5 Then Cells(z, 1).Interior.ColorIndex = rot If Cells(z, 1).Value = "x" Then Cells(z, 1).Interior.ColorIndex = gelb If Cells(z, 1).Value = "z" Then Cells(z, 3).Value = "erkannt" End If Next End Sub


Gruss,
Firmus

AW: Schleife
20.07.2007 20:38:00
Michael
Vielen Dank! Die Schleife klappt, keine Frage. Jodoch die Suche mag er nicht.

Sub test()
anzzeilen = ActiveSheet.UsedRange.Rows.Count    '# Zeilen
' hab ich das richtig verstanden, hier werden die Zeilen bestimmt
anzspalten = ActiveSheet.UsedRange.Columns.Count '# Spalten
gelb = 6
rot = 3
For z = 1 To anzzeilen ' Durchläuft 5 mal beim 6 ist Ende
If Len(Cells(z, 1).Value) > 0 Then
If Cells(z, 1).Value = 5 Then Cells(z, 1).Interior.ColorIndex = rot 'verändert die Farbe  _
nicht
If Cells(z, 1).Value = "x" Then Cells(z, 1).Interior.ColorIndex = gelb 'verändert die  _
Farbe nicht
If Cells(z, 1).Value = "z" Then Cells(z, 3).Value = "erkannt" ' schreibt er ok
End If
Next
End Sub


'Den Text z.B. mein x findet er leider nicht, das ist jedoch sehr wichtig! Wenn ich nach x suche!
'Hatte mir gedacht, dass diese Select Anweisung mit xlFormulas evtl. wichtig ist?
'Selection.Find(what:="test", After:=ActiveCell, LookIn:=xlFormulas, _
'lookat:=xlPart, searchorder:=xlByRows, searchDirection:=xlNext).Activate
Ergebnis der Schleife
' A B C
'1 z lök erkannt
'2 mein x lök

Anzeige
AW: Schleife
20.07.2007 18:40:00
Chaos
Servus,

Sub suche()
Dim r As Integer, z As Integer, sp As Integer
r = Range("A65536").End(xlUp).Offset(0, 0).Row
For z = 1 To r Step 1
For sp = 1 To 2 Step 1
If Cells(z, sp).Value = "test" Then
Range(Cells(z, 1), Cells(z, 2)).Interior.ColorIndex = 3
End If
If Cells(z, 1).Value = "" Then
Exit Sub
End If
Next sp
Next z
End Sub


Die betroffenen Zellen (spalte A und B) werden rot markiert
Gruß
Chaos

AW: Schleife
20.07.2007 18:44:00
Chaos
Servus,
kleine Modifizierung:

Sub suche()
Dim r As Integer, z As Integer, sp As Integer
r = Range("A65536").End(xlUp).Offset(0, 0).Row
For z = 1 To r Step 1
For sp = 1 To 2 Step 1
If Cells(z, sp).Value = "test" Then
Range(Cells(z, 1), Cells(z, 2)).Interior.ColorIndex = 3
End If
If Cells(z, sp).Value = "" Then ' Hier hat er nur in Spalte A geschaut, jetzt in  _
beiden
Exit Sub
End If
Next sp
Next z
End Sub


Gruß
Chaos

Anzeige
AW: Schleife
20.07.2007 20:57:00
Michael
Vielen Dank!
Wichtig ist jedoch dabei, wenn z.B. in A2 "ein text" steht, soll er auch nach der Suche "text" ; "ein text" mit rot makieren. Ist das machbar?

AW: Schleife
20.07.2007 21:08:03
Chaos
Servus Michael,
auf diese Art und Weise nicht, außer das Suchwort ist immer text und ein text, dann könnte man folgendes machen:

Sub suche()
Dim r As Integer, z As Integer, sp As Integer
r = Range("A65536").End(xlUp).Offset(0, 0).Row
For z = 1 To r Step 1
For sp = 1 To 2 Step 1
If Cells(z, sp).Value = "text" Or Cells(z, sp).Value = " ein text"  Then
Range(Cells(z, 1), Cells(z, 2)).Interior.ColorIndex = 3
End If
If Cells(z, sp).Value = "" Then ' Hier hat er nur in Spalte A geschaut, jetzt in  _
beiden
Exit Sub
End If
Next sp
Next z
End Sub


Jetzt markiert er sowohl text, als auch ein text.
Wenn du nur die entsprechenden zellen rot haben willst, nimm diesen Code


Sub suche()
Dim r As Integer, z As Integer, sp As Integer
r = Range("A65536").End(xlUp).Offset(0, 0).Row
For z = 1 To r Step 1
For sp = 1 To 2 Step 1
If Cells(z, sp).Value = "text" Or Cells(z, sp).Value = " ein text"  Then
Cells(z, sp).Interior.ColorIndex = 3
End If
If Cells(z, sp).Value = "" Then ' Hier hat er nur in Spalte A geschaut, jetzt in  _
beiden
Exit Sub
End If
Next sp
Next z
End Sub


Gruß
Chaos

Anzeige
AW: Schleife
20.07.2007 22:16:21
Michael
Danke!
Es scheint etwas schwieriger zu sein als ich mir anfangs vorgestelle! Vielleicht fange ich noch einmal von vorne an. Ist vielleicht verständlicher! I' hope!!!
Ich erhalte Daten die in Spalte A mit Texten gefüllt sind. Die Texte sind kurz und knapp, aber irgendwo im Text erscheint dann, Aufgabenstellung und eine Ziffer. Dahinter verbergen sich dann die dazugehörigen Rechenoperationen die ich durchfürhen muss. bzw. beinhalten dann irgendwo in A30 A35 die dazugehörige Internetseite wo ich die Daten zur Berechnung erhalte. Es gibt nichts unangenehmeres, wenn eine Aufgabe, die gefordert wird, übersieht.
Viele grüße

Anzeige
AW: Schleife
20.07.2007 21:41:00
Ramses
Hallo
probier mal das aus
Option Explicit

Sub Suchbegriff_markieren()
    'by Ramses
    'Sucht in einem bestimmten Bereich nach einem Begriff
    'und schreibt einen bestimmten Wert in eine definierte Offset Spalte
    'Allgemeine Variablen
    Dim tarWks As Worksheet
    Dim rng As Range, sAddress As String
    'Suchbegriff
    Dim sFind As Variant
    'Suchspalten
    Dim col1 As Integer, col2 As Integer
    'Startzeile
    Dim startR As Integer
    'Sonstige Variablen für den Code
    Dim lastRow As Long, tmpCounter As Integer
    '-------------
    Set tarWks = ActiveSheet
    startR = 1 'Beginne mit der Suche in Zeile 1
    col1 = 2 'Spalte B
    col2 = 2 'Spalte B oder bei 3 eben Spalte C
    'Dann kann der Bereich erweitert werden
    '-------------
    'Ab hier nichts mehr ändern
    'Suchbegriff definieren
    sFind = InputBox("Bitte Suchbegriff eingeben:")
    If sFind = "" Then Exit Sub
    'Suchbegriff auf Zelle definieren
    'sFind = Worksheets("Tabelle1").Range("A1")
    tmpCounter = 0
    With tarWks
        lastRow = .Cells(Rows.Count, col1).End(xlUp).Row
        'Teilbegriff suchen
        Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFind, _
        lookat:=xlPart, LookIn:=xlValues)
        'Genaue Übereinstimmung suchen
        'Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFind, _
        LookAt:=xlWhole, LookIn:=xlValues)

        'Wert in Formeln suchen
        'Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFind, _
        LookAt:=xlPart, LookIn:=xlFormulas)

        If Not rng Is Nothing Then
            sAddress = rng.Address
            Do
                'zelle wird rot markiert
                rng.Interior.ColorIndex = 3
                'Vorkommen zählen
                tmpCounter = tmpCounter + 1
                'Nächsten Eintrag suchen
                Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).FindNext(after:=rng)
                If rng.Address = sAddress Then Exit Do
            Loop
        End If
        NextStart:
    End With
    MsgBox prompt:="Keine neue Fundstelle!" & vbCrLf & "Gefunden: " & tmpCounter
End Sub

Schneller geht es nicht.
Gruss Rainer

Anzeige
AW: Schleife
21.07.2007 11:03:29
Michael
Super! Das hat wunderbar geklappt. Habe mir natürlich gedacht, Versuchs mal ein wenig selbst. Ging in die Hose. In der inputBox kann ich nur ein Wort eingeben? Oder? Wenn ich zwei Wörter zum suchen brauche z.B. Arbeitsaufgabe NR662, dann ist mit sFind Anweisung sFind = InputBox("Bitte Suchbegriff eingeben:")
If sFind = "" Then Exit Sub
nichts mehr zu reißen? Muss dann eine If or Schleife eingebaut werden?
Wie kann ich nach rot sortieren? Gibt es eine Möglichkeit einen anderen Ton anstimmen zu lassen, wenn etwas gefunden wurde, außer peeb. Das wäre Klasse.
Thanks

Anzeige
AW: Schleife
21.07.2007 15:02:00
Ramses
Hallo
Lösche alle bisherigen Code und kopiere diese in ein Modul
Option Explicit

'Initialisieren zum Spielen von Sounds
Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _
    (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long


'Globale Variablen für den Suchbereich
'damit die Farben bei Bedarf wieder zurückgesetzt werden können
'Beginne mit der Suche in Zeile 1
Const startR As Long = 1
'Ende des Suchbereiches wird dynamisch bestimmt
Public lastRow As Long
'Haben beide Variablen den gleichen Wert
'ist die Suche auf diese eine Spalte begrenzt
''..oder bei 3 wird der Suchbegriff auf Spalte C erweitert
'Die zweite Zahl muss auf jeden Fall höher sein
Const col1 As Integer = 2 'Spalte B
Const col2 As Integer = 2 'Spalte B
'Die WAV-Datei die dann abgespielt werden soll
Const mySoundFile As String = "c:\windows\media\tada.wav"

Sub Suchbegriff_markieren()
    'by Ramses
    'Sucht in einem bestimmten Bereich nach einem Begriff
    'und schreibt einen bestimmten Wert in eine definierte Offset Spalte
    'Allgemeine Variablen
    Dim tarWks As Worksheet, i As Integer, FarbMarker As Integer
    Dim chkFarbe As Variant, Qe As Integer
    Dim rng As Range, sAddress As String, strDelim As String
    'Suchbegriff
    Dim sFind As String, sFindArr As Variant 'Wird bei Bedarf auch als Array verwendet
    'Sonstige Variablen für den Code
    Dim tmpCounter As Integer
    '*******************************************
    'Hier die Anpassungen für die individuellen
    'Einstellungen vornehmen
    'Trennzeichen anhand dessen mehrere Suchbegriffe
    'bei der Eingabe definiert werdn können
    strDelim = " " 'EIN Leerzeichen !!!
    'Mit welcher Farbe sollen die Zellen markiert werden
    'Farbe: 1 = schwarz, 2 = weiss, 3 = rot,
    '4 = hellgrün, 5 = blau, 6 = gelb
    '7 = Pink, 8 = hellbau, 9 = Schwarz
    FarbMarker = 3
    '*********************************************
    'Ab hier nichts mehr ändern
    'Suchbegriff definieren
    If col2 < col1 Then
        MsgBox "Der Suchbereich ist negativ definiert", vbCritical + vbOKOnly, "Fehler"
        Exit Sub
    End If
    Set tarWks = ActiveSheet
    sFind = InputBox("Bitte Suchbegriff eingeben:")
    If sFind = "" Then Exit Sub
    sFindArr = Split(sFind, strDelim)
    'On Error Resume Next
    chkFarbe = InputBox("In welcher Farbe sollen der/die Suchbegriff(e):" & vbCrLf & vbCrLf & """" & sFind & """" & vbCrLf & vbCrLf & "markiert werden ?" & vbCrLf & _
    "1 = schwarz, 2 = weiss, 3 = rot" & vbCrLf & "4 = hellgrün, 5 = blau, 6 = gelb" & vbCrLf & "7 = Pink, 8 = hellbau, 9 = Schwarz", _
    "Farbe für Markierung bestimmen", "3")
    If IsNumeric(chkFarbe) Then
        If Int(chkFarbe) > 0 And Int(chkFarbe) < 10 Then
            If InStr(1, chkFarbe, ".") > 0 Then
                MsgBox "Ihre Eingabe: """ & chkFarbe & """ wird auf den Wert: """ & Int(chkFarbe) & """ gerundet.", vbInformation + vbOKOnly, "Info"
            End If
            FarbMarker = Int(chkFarbe)
        End If
    Else
        MsgBox "Die Farbe: " & chkFarbe & " kann nicht bestimmt werden oder ausserhalb des Bereiches", vbCritical + vbOKOnly, "Fehler"
        Exit Sub
    End If
    On Error GoTo 0
    tmpCounter = 0
    With tarWks
        lastRow = .Cells(Rows.Count, col1).End(xlUp).Row
        'Eventuell vorhandes SuchArray abfragen
        If UBound(sFindArr) = 0 Then
            'Teilbegriff suchen
            Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFind, _
            LookAt:=xlPart, LookIn:=xlValues)
            'Genaue Übereinstimmung suchen
            'Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFind, _
            LookAt:=xlWhole, LookIn:=xlValues)

            'Wert in Formeln suchen
            'Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFind, _
            LookAt:=xlPart, LookIn:=xlFormulas)

            If Not rng Is Nothing Then
                sAddress = rng.Address
                Do
                    'zelle wird rot markiert
                    rng.Interior.ColorIndex = FarbMarker
                    'Vorkommen zählen
                    tmpCounter = tmpCounter + 1
                    'Nächsten Eintrag suchen
                    Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).FindNext(after:=rng)
                    If rng.Address = sAddress Then Exit Do
                Loop
            End If
            ElseIf UBound(sFindArr) > 0 Then
            For i = 0 To UBound(sFindArr)
                'Alle Begriffe als Teilbegriffe suchen
                Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFindArr(i), _
                LookAt:=xlPart, LookIn:=xlValues)
                'Genaue Übereinstimmung suchen
                'Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFindarr(i), _
                LookAt:=xlWhole, LookIn:=xlValues)

                'Wert in Formeln suchen
                'Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).Find(What:=sFindarr(i), _
                LookAt:=xlPart, LookIn:=xlFormulas)

                If Not rng Is Nothing Then
                    sAddress = rng.Address
                    Do
                        'zelle wird rot markiert
                        rng.Interior.ColorIndex = FarbMarker
                        'Vorkommen zählen
                        tmpCounter = tmpCounter + 1
                        'Nächsten Eintrag suchen
                        Set rng = .Range(.Cells(startR, col1), .Cells(lastRow, col2)).FindNext(after:=rng)
                        If rng.Address = sAddress Then Exit Do
                    Loop
                End If
            Next i
        End If
        NextStart:
    End With
    PlayMySound
    'Das Windows-Systemereignis für eine Messagebox lässt sich
    'damit aber nicht abschalten/abfangen sondern nur überspielen
    'Wenn du das haben möchtest, musst du statt der MsgBox eine
    'eigene Userform mit der entsprechenden Information
    'zur Anzeige bringen
    MsgBox prompt:="Keine neue Fundstelle!" & vbCrLf & "Gefunden: " & tmpCounter
    Qe = MsgBox("Sollen die Farben wieder zurückgesetzt werden ?", vbQuestion + vbOKCancel + vbDefaultButton2, "Farbenzustand")
    If Qe = 1 Then Reset_Colour_Cells
    'Falls die Funktion "Get_Colour" verwendet wird
    'muss das Sheet neu berechnet werden
    'weil eine Farbänderung kein Berechnungsereignis auslöst
    ActiveSheet.Calculate
End Sub

Sub PlayMySound()
    Dim intCounter As Integer
    Application.EnableCancelKey = xlErrorHandler
    Call sndPlaySound32(mySoundFile, 1)
End Sub

Sub Reset_Colour_Cells()
    If lastRow = 0 Then
        'Sollte das erste Finden Makro noch nicht gestartet
        'worden sein
        lastRow = ActiveSheet.Cells(Rows.Count, col1).End(xlUp).Row
        Range(Cells(startR, col1), Cells(lastRow, col2)).Interior.ColorIndex = xlNone
    Else
        Range(Cells(startR, col1), Cells(lastRow, col2)).Interior.ColorIndex = xlNone
    End If
    ActiveSheet.Calculate
End Sub

Function Get_Colour(myRng As Range) As Integer
    Get_Colour = myRng.Interior.ColorIndex
End Function

In der Tabelle kannst du nun so sortieren.
Das geht aber nur mit einer Hilfsspalte
Sheet1

 BC
1Das ist3
2ist3
3Das ist3
4Das-4142

Formeln der Tabelle
ZelleFormel
C1=get_colour(B1)
C2=get_colour(B2)
C3=get_colour(B3)
C4=get_colour(B4)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruss Rainer

Anzeige
Nachtrag
21.07.2007 15:09:00
Ramses
Hallo
du kannst in er Inputbox nun einen oder mehrere Suchbegriffe eingeben die durch ein LEERZEICHEN getrennt sind.
Es werden dann alle einzelnen Wörter gesucht.
Gruss Rainer

AW: Nachtrag
21.07.2007 15:52:00
Michael
Geil! Schön, gut, SUPER kann ich dazu nicht mehr sagen. Jetzt Versuch ich erst einmal mein Glück! Schönes Wochenende! Vielen Dank

zu wegen erledigt! oT
21.07.2007 19:57:00
.
zu

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige