Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1044to1048
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
Inhaltsverzeichnis

Datensätze suchen und löschen / Kopieren

Datensätze suchen und löschen / Kopieren
31.01.2009 10:51:00
Holger
Hi,
ich möchte gerne folgendes per Makro erledigen:
Ich habe eine Exceltabelle "IMPORT", in der gibt es ziemlich viele Datensätze (geht von A bis M und runter ab Zeile10 bis je nachdem bis 500 oder 1000)
In der Tabelle gibt es Datensätze, die würde ich gerne automatisch (oder besser gesagt mit Button) löschen, wenn folgende Bedingungen erfüllt sind:
- wenn Spalte C ist " " UND Spalte K ist "0"
ODER
- wenn Eintrag in Spalte A mit "VERRECHNUNG" beginnt (der String kann auch mal länger sein)
Die Datensätze sollen richtig gelöscht werden ( nicht nur Inhalt rauslöschen)
Ist es dann möglich , die gelöschten Datensätze zu erfassen, Neues Tabellenblatt einzufügen und dort diese zuvor gelöschten DS reinzuschreiben.
(oder vielleicht zuerst reinschreiben und dann löschen) weiss nicht wie man da vorgeht.
Hilfe wäre nett, Danke
Gruss
Holger

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datensätze suchen und löschen / Kopieren
31.01.2009 12:00:00
Tino
Hallo,
teste mal diesen Code.
Tabellennamen im Code musst Du anpassen.
Es wird die letzte Spalte für Formeln verwendet, diese wird am Ende wieder gelöscht.
Die gelöschten Zeilen, werden in einem neuen Tabellenblatt abgelegt bevor diese gelöscht werden.
Sub Makro1()
Dim Bereich As Range
Dim NeuesBlatt As Worksheet
With Application
 .ScreenUpdating = False
 .EnableEvents = False
    
    With Sheets("Tabelle1") 'Tabellennamen anpassen 
     
      Set Bereich = .Range("A10", .Cells(.UsedRange.Cells(.UsedRange.Cells.Count).Row, 1))

      If Intersect(Bereich, Rows("1:9")) Is Nothing Then
         
         Set Bereich = Bereich.Offset(0, Columns.Count - 1)
         Bereich.FormulaR1C1 = _
         "=IF(OR(AND(RC3="" "",RC11=0),IF(ISERROR(FIND(""VERRECHNUNG"",RC1)),1,0)=0),0,"""")"
         
         If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
            'kopiere den Bereich nach Tabelle2 
            Set NeuesBlatt = Worksheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            .Activate
            Bereich.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Copy NeuesBlatt.Range("A1")
            'Lösche die Zeilen 
            Bereich.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
         End If
            'Lösche die Formelspalte am ende der Tabelle 
         .Columns(.Columns.Count).Delete
      
      End If
    
    End With
 
 .ScreenUpdating = True
 .EnableEvents = True
End With
End Sub


Gruß Tino

Anzeige
Hallo Tino, danke...
31.01.2009 13:24:00
Holger
aber noch zwie Fragen:
Ist es richtig dass DS mit "verrrechnung" nur gelöscht werden wenn diese gross (VERRECHNUNG) geschrieben sind ? (sollte egal sein ob gross o. klein )
es werden keine DS gelöscht, wenn C leer ist und in K eine NULL steht.
Geht es bei Dir
Gruss
Holger
AW: Hallo Tino, danke...
31.01.2009 14:01:00
Tino
Hallo,
Du hattest ja dies alles so angegeben.
'hier hast Du ein Leerzeichen angegeben
- wenn Spalte C ist " " UND Spalte K ist "0"
hier hast Du VERRECHNUNG angegeben nichts von groß oder klein
- wenn Eintrag in Spalte A mit "VERRECHNUNG" beginnt (der String kann auch mal länger sein)
Hier die geänderte Version:
Sub Makro1()
Dim Bereich As Range
Dim NeuesBlatt As Worksheet
With Application
 .ScreenUpdating = False
 .EnableEvents = False
    
    With Sheets("Tabelle1") 'Tabellennamen anpassen 
     
      Set Bereich = .Range("A10", .Cells(.UsedRange.Cells(.UsedRange.Cells.Count).Row, 1))

      If Intersect(Bereich, Rows("1:9")) Is Nothing Then
         
         Set Bereich = Bereich.Offset(0, Columns.Count - 1)
         Bereich.FormulaR1C1 = _
         "=IF(OR(AND(RC3="""",RC11=0),IF(ISERROR(FIND(""VERRECHNUNG"",UPPER(RC1))),1,0)=0),0,"""")"
         
         If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
            'kopiere den Bereich nach Tabelle2 
            Set NeuesBlatt = Worksheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            .Activate
            Bereich.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Copy NeuesBlatt.Range("A1")
            'Lösche die Zeilen 
            Bereich.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
         End If
            'Lösche die Formelspalte am ende der Tabelle 
         .Columns(.Columns.Count).Delete
      
      End If
    
    End With
 
 .ScreenUpdating = True
 .EnableEvents = True
End With
End Sub


Gruß Tino

Anzeige
AW: Hallo Tino, danke...
31.01.2009 15:07:23
Holger
Hi Tino,
Sorry hatte mich falsch Ausgedrückt. jetzt klappts. Noch eine kleine BItte:
in der Zeile wo das Kriterium gesucht wird:
"=IF(OR(AND(RC3="""",RC11=0),IF(ISERROR(FIND(""VERRECHNUNG"",UPPER(RC1))),1,0)=0),0,"""")"
habe ich versucht, das ODER raus zu machen.
Wollte mal testen wie es fuktioniert, wenn ich nur nach "Verrechnung" suche,
oder
nur nach (RC3="""",RC11=0)
bekomme die Zeile aber nicht auseinandergefieselt.
Gruss
Holger
AW: Hallo Tino, danke...
31.01.2009 15:27:21
Tino
Hallo,
ich komme damit auch nicht zurecht.
Ich mache es einfach so.
Ich schreibe mir eine Formel in eine Zelle,
beachte dabei die richtige Referenzierung und Zeichne mir diese mit dem Rekorder auf,
ich brauche mir dann keine Gedanken über irgendwelche Zeichen zu machen.
Grundlage dieser ist diese Formel.

=WENN(ODER(UND($C1="";$K1=0);WENN(ISTFEHLER(FINDEN("VERRECHNUNG";GROSS($A1)));1;0)=0);0;"")


Gruß Tino

Anzeige

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige