Thema Datum  Von Nutzer Rating
Antwort
21.11.2016 19:48:07 Ramona____
NotSolved
23.11.2016 19:48:48 Gast12110
NotSolved
23.11.2016 20:07:00 Tom
NotSolved
24.11.2016 15:12:10 Gast77956
NotSolved
Rot Wo ist mein Fehler?
25.11.2016 16:55:20 Gast71960
*****
NotSolved
25.11.2016 18:28:11 Mario
NotSolved
26.11.2016 03:57:27 Gast77956
NotSolved

Ansicht des Beitrags:
Von:
Gast71960
Datum:
25.11.2016 16:55:20
Views:
429
Rating: Antwort:
  Ja
Thema:
Wo ist mein Fehler?

Hallo Ramona, Laura etc. pp,  ;o)

dein Code ist nicht direkt falsch, aber auch nicht 100%ig korrekt. ;)

 

Also dann mal einige Anmerkungen:

--------

Du gehst z.B. in deiner zweiten Schleife (Schleife b) von einer festen Iteration aus, als würdest du die Anzahl der verbleibenden Einträge kennen. Das ist aber oftmals nicht der Fall.

--------

Es gibt unterschiedliche Methoden um das Ende einer Spalte zu ermitteln. Deine funktioniert zwar (auch hier gehst du jedoch von einer maximalen Anzahl aus) ist aber umständlich.

1. Von oben nach unten, bis die erste leere Zelle kommt (entspr. STRG+PfeilNachUnten)

Set cell = Range("B1").End(xlDown)

2. Von unten nach oben, bis die erste nicht-leere Zelle kommt (diese ist oftmals die verwendete, wenn in der Spalte zwischen Daten leere Zellen vorkommen)

Set cell = Cells(Rows.Count,"B").End(xlUp)

--------

Über das unnötige Select will ich mich hier nicht weiter äußern. Dazu gibt es im Internet genug Lesestoff (z.B. hier) warum man das nicht benutzen sollte. ;) Diese existieren nur, und machen Sinn, wenn man dem Benutzer etwas signalisieren will. Für die Verarebeitung im Code, sind sie nicht notwendig.

Und da kommen wir zu ...

Ich will dir mal eine andere Variante davon vorstellen. Eine, die ganz anders aussieht, aber das gleiche tut. (damit will ich Dir nur zeigen, dass es stets mehrere Wege zum Ziel gibt und nicht DIE Lösung)

Anmerkung zum Code: Die Ausgabe erfolgt im Direktfenster. Dieses muss man - das erste mal - selber einblenden, denn es wird nicht standardmäßig angezeigt. Das bewerkstelligt man mittels STRG+G oder über das Menü Ansicht.

Option Explicit 'erzwingt die Deklaration von genutzten Variablen

Sub Test3()
  
  Dim cellStart   As Excel.Range
  Dim cellEnd     As Excel.Range
  Dim cell        As Excel.Range
  
  Set cell = Worksheets("Kollision").Range("B1") 'die erste zu berachtende Zelle referenzieren
  Set cellStart = cell 'diese Zelle ist dann auch logischer Weise auch der Anfang des ersten Bereichs
  
  Debug.Print "# Beginn - Schleife #"
  
  Do Until Trim$(cell.Value) = "" '>solange bis< Zelleninhalt >gleich< leer ist
    
    If Not cellEnd Is Nothing Then
      Set cellStart = cell
      Set cellEnd = Nothing
    End If
    
    'Inhalt der aktuellen Zelle und der Zelle darunter verschieden?
    '  1. Variante unterscheidet zwischen Groß-/Kleinschreibung
    'If cell.Value <> cell.Offset(1).Value Then
    '  2. Variante unterscheidet nicht zwischen Groß-/Kleinschreibung
    If 0 <> StrComp(cell.Value, cell.Offset(1).Value, vbTextCompare) Then
    'ja -> also findet hier ein wechsel statt
      
      Set cellEnd = cell
      
      Debug.Print " + Wechsel zwischen den Zellen: " & cell.Address(0, 0) & " ('" & cell.Value & "')" & _
                                             " und " & cell.Offset(1).Address(0, 0) & " ('" & cell.Offset(1).Value & "')"
      
      Debug.Print " >> Dessen vollständige Bereich lautet: " & cellStart.Address(0, 0) & ":" & cellEnd.Address(0, 0)
      
    End If
    
    'die Zelle unter der aktuell referenzierten Zelle referenzieren
    Set cell = cell.Offset(1)
  Loop
  
  Debug.Print "# Ende - Schleife #"
  
End Sub

 

Gruß


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
21.11.2016 19:48:07 Ramona____
NotSolved
23.11.2016 19:48:48 Gast12110
NotSolved
23.11.2016 20:07:00 Tom
NotSolved
24.11.2016 15:12:10 Gast77956
NotSolved
Rot Wo ist mein Fehler?
25.11.2016 16:55:20 Gast71960
*****
NotSolved
25.11.2016 18:28:11 Mario
NotSolved
26.11.2016 03:57:27 Gast77956
NotSolved