Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Schleife durch Markierte Zellen

Schleife durch Markierte Zellen
28.04.2015 11:55:40
Robin
Hallo ihr Lieben,
ich verzweifle gerade an folgender Problemstellung:
Ausgelöst durch einen CommandButton sollen in Spalte D eines Excelblattes innerhalb einer Markierung 6-stellige Auftragsnummern, durch einen Unterstrich getrennt um eine 3-stellige Probennummer ergänzt werden.
-Die Auftragsnummer soll aus der ersten Zeile der Markierung (jeweils nur bis zum Unterstrich übernommen werden, und durch die oben genannten Probennummern (getrennt durch "_") ergänzt werden.
z.B. "123456_015" übernommen wird "123456" addiert wird "_" & "Probennummer" zu "123456_Probennummer"
-Die (ganzzahligen) Probennummern werden per Hand eingetragen, sollen aber um voranstehende Nullen ergänzt werden, damit diese immer 3-stellig sind.
z.B. "2" soll zu "002" werden, "15" soll zu "015" werden.
Beispiel für die Markierten Zellen:
123456_008
6
7
8
17
18
23
29
109
Soll werden:
123456_008
123456_006
123456_007
123456_008
123456_017
123456_018
123456_023
123456_029
123456_109
-Ich möchte das ganze nur in einer Markierung ablaufen lassen, die Schleife läuft bei mir aber nicht fehlerfrei und ich weiß nicht, ob man dafür wirklich eine Schleife benötigt, oder ob es auch mit "For each" geht.
Hier mein bisheriger Code:
Sub AddNumberInSelection()
Dim strErsteZelle As String
Dim strLetzteZelle As String
Dim strAuftrag As String
Dim strProbe As String
Dim i As Integer
strErsteZelle = Selection.Row
strLetzteZelle = Selection.Rows.Count + Selection.Row - 1
strAuftrag = Selection.Cells(1, 1)
i = strErsteZelle + 1
Do Until i = strLetzteZelle + 1
strProbe = Selection.Cells(i, 1).Value
Sheets(1).Cells(i, 4).Value = strAuftrag & strProbe
i = i + 1
Loop
End Sub

komischerweise funktioniert mein Code nur für die ersten beiden Zeilen der Markierung, danach bleibt die Variable strProbe leer ("").
Liebe Grüße,
Robin

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife durch Markierte Zellen
28.04.2015 12:25:26
Hajo_Zi
Hallo Robin,
Option Explicit
Sub Auffuellen()
Dim RaZelle As Range
Dim StWert As String
For Each RaZelle In Selection
If RaZelle.Address = Selection.Cells(1).Address Then
StWert = Left(RaZelle, InStr(RaZelle, "_"))
Else
RaZelle = StWert & Format(RaZelle, "000")
End If
Next RaZelle
End Sub

Anzeige
AW: Schleife durch Markierte Zellen
28.04.2015 12:46:05
Robin
Hallo Hajo,
ich bin begeistert, wie du das in so einem kurzen Makro nachvollziehbar gelöst hast.
Liebe Grüße und Vielen Dank,
Robin
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Schleife durch markierte Zellen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere das gewünschte Arbeitsblatt.

  2. Markiere die Zellen, die die 6-stelligen Auftragsnummern und die Probennummern enthalten.

  3. Öffne den VBA-Editor (drücke ALT + F11).

  4. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.

  5. Kopiere und füge den folgenden Code in das Modul ein:

    Sub AddNumberInSelection()
       Dim strErsteZelle As String
       Dim strLetzteZelle As String
       Dim strAuftrag As String
       Dim strProbe As String
       Dim i As Integer
       strErsteZelle = Selection.Row
       strLetzteZelle = Selection.Rows.Count + Selection.Row - 1
       strAuftrag = Left(Selection.Cells(1, 1), InStr(Selection.Cells(1, 1), "_") - 1)
       i = strErsteZelle + 1
       Do Until i = strLetzteZelle + 1
           strProbe = Format(Selection.Cells(i, 1).Value, "000")
           Sheets(1).Cells(i, 4).Value = strAuftrag & "_" & strProbe
           i = i + 1
       Loop
    End Sub
  6. Schließe den VBA-Editor und kehre zu Excel zurück.

  7. Füge einen CommandButton hinzu: Entwicklertools > Einfügen > CommandButton.

  8. Weise das Makro zu: Rechtsklick auf den CommandButton > Makro zuweisen > wähle AddNumberInSelection.

  9. Klicke auf den CommandButton, um die Zellen zu verarbeiten.


Häufige Fehler und Lösungen

  • Fehler: "Variable strProbe bleibt leer"

    • Lösung: Achte darauf, dass die Probennummern korrekt eingegeben sind und keine leeren Zellen in der Auswahl sind. Wenn du mit For Each arbeitest, stelle sicher, dass du die Variable korrekt initialisierst.
  • Fehler: Ungültige Formatierung

    • Lösung: Überprüfe die Formatierung der Zellen und stelle sicher, dass die Auftragsnummer mit einem Unterstrich endet.

Alternative Methoden

Eine alternative Methode, um durch markierte Zellen zu iterieren, ist die Verwendung von For Each. Hier ein Beispiel:

Sub Auffuellen()
    Dim RaZelle As Range
    Dim StWert As String
    For Each RaZelle In Selection
        If RaZelle.Address = Selection.Cells(1).Address Then
            StWert = Left(RaZelle, InStr(RaZelle, "_") - 1)
        Else
            RaZelle.Value = StWert & "_" & Format(RaZelle.Value, "000")
        End If
    Next RaZelle
End Sub

Diese Methode eignet sich besonders gut, wenn du das Makro auf markierte Zellen anwenden möchtest.


Praktische Beispiele

  • Beispiel 1: Angenommen, du hast die folgenden Daten in den markierten Zellen:

    123456_008
    6
    7
    8

    Nach der Ausführung des Makros wird die Spalte D wie folgt aussehen:

    123456_008
    123456_006
    123456_007
    123456_008
  • Beispiel 2: Für die Eingabe von 15 wird die Ausgabe zu 123456_015.


Tipps für Profis

  • Verwende die Option Explicit-Anweisung, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Tippfehler zu vermeiden.
  • Nutze Fehlerbehandlung mit On Error Resume Next, um das Makro robuster zu gestalten.
  • Experimentiere mit Schleifen und Bedingungen, um komplexere Aufgaben zu automatisieren.

FAQ: Häufige Fragen

1. Wie kann ich die markierten Zellen ermitteln?
Du kannst die markierten Zellen mit Selection im VBA-Code ansprechen.

2. Funktioniert das auch in Excel 365?
Ja, der Code funktioniert in Excel 365 und allen Versionen, die VBA unterstützen. Stelle sicher, dass Makros aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige