Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Range definieren bestimmte zellen herauslöschen

Range definieren bestimmte zellen herauslöschen
Matthias
Hallo,
ich bewundere dieses Forum und habe hier schon zahlreiche Stunden mit Makros lernen und verstehen verbracht. Mittlerweile kann ich auch schon selbst einigermaßen "programmieren" doch bei diesem Projekt versagen meine Kenntnisse total.
In Spalte A habe ich aus einem Warenwirtschaftssystem (so 5000) Artikel die ich auf Lager habe. Kommen neue Artikel hinzu werden die einfach unten dran gehängt. Also Spalte A hat wächst immer weiter. Meine Artikel Lagern in mehreren Regalen.
So jetzt kommt der Kniff ich muss alle Artikel die ich aus einem Regal entnehme aus der Spalte A löschen können. Erfasst werden alle Artikel mit einem Barcodescanner der alle Codes sammelt und mir dann in Spalte B überträgt. jetzt müsste ich alles was in Spalte B ist aus A löschen lassen. Zusätzlich übergibt mir der Scanner den ersten und den letzten Artikel des Regals (also Artkelnr. 12316546 ist nummer eins und Artikelnr. 654968431 ist das letzte).
Das Makro müsste jetzt ein Spalte A die erste Artikelnr. suchen und die letzte und als "Durchsuchundlösch" Range definieren dann müssten alle Codes aus Spalte B in Spalte A gelöscht werden außer der erste und der letzte...
Ich weiß klingt mega komplex und ich steh auch total am Schlauch...
Wäre toll wenn mir jemand helfen könnte....
DANKE!!!

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Gegenfrage...
07.08.2010 16:34:44
Tino
Hallo,
kannst Du anhand eines Beispiels mal darstellen was nun warum aus Spalte A gelöscht werden soll.
Verstanden habe ich diesen aufbau.
 AB
1Artikel Nr.von Scanner
21111111141111111
32111111151111111
43111111161111111
54111111171111111
65111111181111111
76111111191111111
871111111101111111
981111111 
1091111111 
11101111111 
12111111111 
13121111111 

Nun soll alles was zwischen 41111111 und 101111111 steht (gelb markiert) gelöscht werden,
also im Beispiel die rot markierten Zellen?
Gruß Tino
Anzeige
AW: Gegenfrage...
07.08.2010 17:13:22
Matthias
Hallo Tino,
erstmal danke!
Ja genauso soll es funktionieren...
AW: Gegenfrage...
07.08.2010 17:32:39
Tino
Hallo,
demnach müsste dies funkionieren.
Sub loesche_zwischen_Erster_Letzter()
Dim varErste, varLetzte
Dim rngErste As Range, rngLetzte As Range
Dim oWS As Worksheet

'Tabelle anpassen 
Set oWS = Sheets("Tabelle1")

With oWS
    'erste Zelle mit Nummer 
    Set rngErste = .Range("B2")
    'letzte Zelle mit Nummer 
    Set rngLetzte = .Cells(.Rows.Count, 2).End(xlUp)


    With Application
        'Suche Zeile mit erster 
        varErste = .Match(rngErste.Value, oWS.Columns(1), 0)
        'Suche Zeile mit letzter 
        varLetzte = .Match(rngLetzte.Value, oWS.Columns(1), 0)
    End With
    'Zeilen gefunden? 
    If IsNumeric(varErste) And IsNumeric(varLetzte) Then
        'Daten zwischen erster und letzter 
        If varLetzte - varErste > 1 Then
            'Zellen löschen 
            .Range(.Cells(varErste + 1, 1), .Cells(varLetzte - 1, 1)).Delete Shift:=xlUp
        Else
            'keine Daten dazwischen 
            MsgBox "keine Zellen zwischen erster und letzter Nr.", vbExclamation
        End If
    Else
        'Nummer nicht gefunden 
        MsgBox "Erste und/oder letzte Nr. nicht gefunden!", vbExclamation
    End If
End With

End Sub
Gruß Tino
Anzeige
AW: Gegenfrage...
07.08.2010 17:39:33
fcs
Hallo Mathias,
sollte mit folgender Prozedur funktionieren
Gruß
Franz
Sub LoeschenBestandentnahme()
Dim Code1, Code2, Zeile1 As Long, Zeile2 As Long, Zeile As Long
Dim rngLoeschen As Range, rng1 As Range, rng2 As Range, Zelle As Range
Dim bolGeloescht As Boolean
Zeile1 = 1 'Zeile mit 1. Code in Spalte B
Code1 = Cells(Zeile1, 2).Value '1. nicht zu löschender Code in Spalte B
Zeile2 = Cells(Rows.Count, 2).End(xlUp).Row 'Spalte B, letzte Zeile
Code2 = Cells(Zeile2, 2).Value '2. nicht zu löschender Code in Spalte B
'Werte in Spalte A suchen
Set rng1 = Columns(1).Find(what:=Code1, LookIn:=xlValues, lookat:=xlWhole)
Set rng2 = Columns(1).Find(what:=Code2, LookIn:=xlValues, lookat:=xlWhole)
If rng1 Is Nothing Or rng2 Is Nothing Then
MsgBox "Code 1 """ & Code1 & """ oder Code 2  """ & Code2 & """ in Spalte A nicht gefunden!" _
Else
Set rngLoeschen = Range(rng1, rng2)
Application.ScreenUpdating = False
For Zeile = Zeile1 + 1 To Zeile2 - 1
Set Zelle = rngLoeschen.Find(what:=Cells(Zeile, 2).Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Zelle Is Nothing Then
If MsgBox("Code """ & Cells(Zeile, 2).Value & """ in Spalte A nicht gefunden!", _
vbRetryCancel) = vbCancel Then GoTo weiter:
Else
Zelle.ClearContents
bolGeloescht = True
End If
Next
weiter:
'leere Zellen löschen
If bolGeloescht = True Then
Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) _
.Cells.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp
End If
Application.ScreenUpdating = True
End If
End Sub

Anzeige
AW: Gegenfrage...
07.08.2010 17:54:14
Matthias
Boa TAUSENDDANK an euch beide!!!
Kann ich der Prozedur noch folgendes sagen:
Lösche alles was vor und nach Beginn der Range liegt?
AW: Gegenfrage...
07.08.2010 19:07:54
Tino
Hallo,
keine Ahnung welche Version Du meinst, hier für meine zum testen.
Sub loesche_zwischen_Erster_Letzter()
Dim varErste, varLetzte
Dim rngErste As Range, rngLetzte As Range
Dim oWS As Worksheet

'Tabelle anpassen 
Set oWS = Sheets("Tabelle1")

With oWS
    'erste Zelle mit Nummer 
    Set rngErste = .Range("B2")
    'letzte Zelle mit Nummer 
    Set rngLetzte = .Cells(.Rows.Count, 2).End(xlUp)


    With Application
        'Suche Zeile mit erster 
        varErste = .Match(rngErste.Value, oWS.Columns(1), 0)
        'Suche Zeile mit letzter 
        varLetzte = .Match(rngLetzte.Value, oWS.Columns(1), 0)
    End With
    
    'Zeilen gefunden? 
    If IsNumeric(varErste) And IsNumeric(varLetzte) Then
        
        'Daten zwischen erster und letzter 
        If varLetzte - varErste > 1 Then
            'Zellen löschen 
            .Range(.Cells(varErste + 1, 1), .Cells(varLetzte - 1, 1)).Delete Shift:=xlUp
        Else
            'keine Daten dazwischen 
            MsgBox "keine Zellen zwischen erster und letzter Nr.", vbExclamation
        End If
    Else
        'Nummer nicht gefunden 
        MsgBox "Erste und/oder letzte Nr. nicht gefunden!", vbExclamation
    End If
    
    'erste gefunden? 
    If IsNumeric(varErste) Then
        'Daten vor erster? 
        If varErste > 2 Then
            .Range(.Cells(2, 1), .Cells(varErste - 1, 1)).Delete Shift:=xlUp
        Else
            MsgBox "Keine Zelle vor erster Nr.", vbExclamation
        End If
    Else
        MsgBox "Erste Nr. nicht gefunden!", vbExclamation
    End If
    
    'letzte gefunden 
    If IsNumeric(varLetzte) Then
        'Suche Zeile mit letzter 
        varLetzte = Application.Match(rngLetzte.Value, oWS.Columns(1), 0)
        'Daten nach letzter? 
        If varLetzte < .Rows.Count Then
            .Range(.Cells(varLetzte + 1, 1), .Cells(.Rows.Count, 1)).Delete Shift:=xlUp
        Else
            MsgBox "Keine Zelle nach letzter Nr.", vbExclamation
        End If
    Else
        MsgBox "Letzte Nr. nicht gefunden!", vbExclamation
    End If

End With

End Sub
Gruß Tino
Anzeige
AW: Gegenfrage...
07.08.2010 19:19:38
Matthias
Danke, aber das funzt irgendwie nicht...
besser wäre..
07.08.2010 19:23:06
robert
Hi,
wenn du genau sagst, was nicht funzt...
..denn irgendwie ? wie sollen die antworter darauf reagieren ?
gruß
robert
AW: besser wäre..
07.08.2010 19:24:14
Matthias
sorry! du hast recht.
das Makro löscht Spalte A ganz und lässt Spalte B stehen...
AW: noch besser wäre..
07.08.2010 19:33:18
robert
Hi,
eine Beispieldatei, wo du genau erklärst, was du willst.
denn bei Tino und Franz bist du in besten händen, wenn du
klar und deutlich formulierst-versuch es mal ;-)
gruß
robert
AW: noch besser wäre..
07.08.2010 19:41:24
Matthias
Ok =) Danke!
https://www.herber.de/bbs/user/70965.xls
Im Beispiel müssten eigentlich die Zahlen 2 und 4 übrig bleiben.
Aber erst kommt ein Fehler und löscht er andere Zahlen.
Anzeige
hier ist meine Testmappe
07.08.2010 19:52:01
Tino
Hallo,
Deine Daten haben keine Überschrift, ich dachte die Daten sind wie zuvor schon mal beschrieben.
hier ist meine Testmappe
https://www.herber.de/bbs/user/70966.xls
Gruß Tino
auch in Spalte B löschen...
07.08.2010 20:08:03
Tino
Hallo,
wenn Du in Spalte B auch die Daten dazwischen löschen möchtest,
schreibe diese Code- Zeilen nach dem letzten End If bzw. vor der letzten End With.
    If rngLetzte.Row - rngErste.Row > 1 Then
.Range(.Cells(rngErste.Row + 1, 2), .Cells(rngLetzte.Row - 1, 2)).Delete Shift:=xlUp
End If
Gruß Tino
Anzeige
AW: auch in Spalte B löschen...
07.08.2010 20:34:47
Matthias
Hi Tino,
du gibst echt Mühe mit mir, vielen Dank!
https://www.herber.de/bbs/user/70968.xls
Hier noch mal die Testdatei.
In Spalte A steht
1
2
3
4
5
6
7
8
9
10
Und in B:
2
3
4
5
6
9
2 + 9 definieren die Range also müssen 1 und 10 raus, liegt ausserhalb.
dann müssen noch raus 3+4+5+6
müssten schließlich 2 7 8 9 übrig bleiben.
aber beim makro bleiben nur die zwei und die neun über...
ok. versuch zwei.
07.08.2010 21:16:46
Tino
Hallo,
so müsste es gehen, ist etwas aufwendiger.
https://www.herber.de/bbs/user/70969.xls
Gruß Tino
Anzeige
Sehr gute Arbeit - DANKE
08.08.2010 15:33:11
Matthias
Hi Tino,
super!!! Es funktioniert!!! Jetzt muss ich den Code verstehen lernen, damit ich die nächsten Anpassungen selber austüfftel...
Vielen vielen Dank!
AW: Sehr gute Arbeit - DANKE
09.08.2010 09:17:12
Matthias
Hallo Tino,
kannst du mir noch einen gefallen tun?
Mein WWS bringt mir in anderen Spalten Anzahl und Anschaffungsdatum, kannst du das Makro so einstellen dass in Spalte A nur die Zelle gelöscht wird, dass ich quasi weiße flecken in Spalte A habe, den Rest vom Makro bekomme ich selber hin...
DANKE!
AW: meinst Du so?
09.08.2010 17:22:29
Matthias
JA :D Optimal! DANKE!!!

330 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige