igel.daniel
Goto Top

Excel: wenn Zelle in Tabellenblatt 1 leer, dann gleiche Zelle in Tabellenblatt 2 löschen

Hallo alle miteinander,

Dank meines Chefs ich "darf" mich an Excel versuchen. Trotz nicht vorhandener VBA - Kenntnisse klappt das teilweise auch ganz gut - google sei Dank. Zu meinem aktuellen Problem kann ich aber nix finden. Daher meine Frage:

Ich habe in einer Hilfstabelle alle unsere Produkte eingetragen in folgender Art eingetragen - siehe Bild

b6239b850695738223349419c7e0b193

Ich muss es so machen, da ich in vielen weiteren Spalten entsprechende Länderpreise habe. Zudem greifen viele Datenblätter auf die Informationen aus dieser Tabelle zu und zeigen sie formatiert an.

wie Ihr hoffentlich seht, gibt es einige Produkte ohne Description1 oder 2. Ich möchte jetzt folgendes überprüfen lassen:

Wenn in der Hilfstabelle sowohl das Feld Description 1 als auch 2 leer ist, dann soll bitte in einem anderen Tabellenblatt (die Zeilen sind 1:1 zugeordnet) die Zeile mit Description 2 gelöscht werden.

Sollte das so nicht möglich sein, dann nur überprüfen, ob Description 2 leer ist und diese Zeile in einem anderen Tabellenblatt löschen

Vielen Dank im Voraus.

Content-Key: 277366

Url: https://administrator.de/contentid/277366

Printed on: May 8, 2024 at 20:05 o'clock

Mitglied: 122990
122990 Jul 15, 2015 at 08:55:26 (UTC)
Goto Top
Member: IGEL.Daniel
IGEL.Daniel Jul 15, 2015 at 09:04:49 (UTC)
Goto Top
Hallo grexit,

vielen Dank für den Link. Aber wenn ich den Code bzw. die Erklärungen dazu richtig interpretiere, schaut das Script nur, ob eine Zelle leer ist. Ich brauche aber noch den Verweis auf eine andere Zelle - also in der Art:

Wenn in Tabellenblat 1 in Spalte A Description2 steht und in der Spalte B in gleicher Zeile nichts steht, dann schmeiss die Zeile in Tabellenblatt 2 raus.

Gruß, Daniel
Mitglied: 122990
Solution 122990 Jul 15, 2015 updated at 09:52:58 (UTC)
Goto Top
Naja, ein bißchen Hirnschmalz kann man eigentlich erwarten, vor allem wenn man sich noch nicht mal hinsetzt und zumindest erst mal selber probiert anzupassen. Aber in diesem Forum muss man ja anscheinend jedem alles vorbeten.
Mit ein paar minimalen Änderungen ist das schnell erledigt ...
Sub delEmptyRows()
    Dim rngCells As Range, cell As Range, rngCombined As Range, sheet as Worksheet, sheet2 as Worksheet
    ' Hier das gewünschte Tabellenblatt angeben  
    set sheet = Worksheets(1)
    set sheet2 = Worksheets(2)
    Set rngCells = sheet.Range("A1", sheet.Range("A65535").End(xlUp))  
    For Each cell In rngCells
        If cell.Value = "Description2" and cell.Offset(0,1).Value = "" Then  
            If rngCombined Is Nothing Then
                Set rngCombined = sheet2.Cells(cell.Row,1).EntireRow
            End If
            Set rngCombined = Union(rngCombined, sheet2.Cells(cell.Row,1).EntireRow)
        End If
    Next
    If Not rngCombined Is Nothing Then
        rngCombined.Delete
    End If
End Sub
Member: IGEL.Daniel
IGEL.Daniel Jul 15, 2015 at 09:52:41 (UTC)
Goto Top
Lieber grexit,

herzlichen Dank für das Skript als auch für den durchaus berechtigten Einwand hinsichtlich des Hirnschmalzes. Ich möchte aber noch einmal auf meine bereits oben erwähnten nicht vorhandene VBA-Kenntnisse verweisen - nicht als Entschuldigung sondern vieleicht Rechtfertigung.

Beste Grüße,
Daniel
Member: IGEL.Daniel
IGEL.Daniel Jul 15, 2015 updated at 12:25:49 (UTC)
Goto Top
Hallo grxit, Hallo Community,

ich habe jetzt versucht, mein Gehirnschmalz zu benutzen - ich will Dein Script über mehrere (nicht alle) Tabellenblätter laufen lassen. Dazu habe ich mir ein Stück Code organisiert und eingefügt. Das Ergebnis sieht wie folgt aus:

Sub delEmptyRows()
    Dim rngCells As Range, cell As Range, rngCombined As Range, sheet As Worksheet, sheet2 As Worksheet
    Dim lng As Integer

    For lng = 2 To 3 Step 1
        Set sheet = Worksheets("Hilfstabelle")  
        Set sheet2 = Worksheets(lng)
        Set rngCells = sheet.Range("A1", sheet.Range("A65535").End(xlUp))  
        For Each cell In rngCells
            If cell.Value = "Description1" And cell.Offset(0, 1).Value = "" Then  
                If rngCombined Is Nothing Then
                    Set rngCombined = sheet2.Cells(cell.Row, 1).EntireRow
                End If
                Set rngCombined = Union(rngCombined, sheet2.Cells(cell.Row, 1).EntireRow)
            End If
        Next
        If Not rngCombined Is Nothing Then
        rngCombined.Delete
        End If
    Next lng
End Sub
Problem: Es wird nur Worksheets(2) abgearbeitet, danach wirft die Zeile

Set rngCombined = Union(rngCombined, sheet2.Cells(cell.Row, 1).EntireRow)

den Fehler

die methode union für das objekt _global ist fehlgeschlagen

Mittels einer MsgBox habe ich aber rausgefunden, dass er noch bis drei zählt - es gibt also noch Worksheets(3)

Beste Grüße,
Daniel

---
^[Edit Biber] Codeformatierung. Auch wenn es grexit nicht braucht, [/Edit]
Mitglied: 122990
Solution 122990 Jul 15, 2015 updated at 12:51:34 (UTC)
Goto Top
Hallo Daniel,
dein Problem ist das du den kombinierten Bereich der gelöscht werden soll nicht nach jedem Durchlauf zurücksetzt (auf Nothing setzen), denn ein Bereich kann sich nicht über mehrere Arbeitsbätter erstrecken, deswegen der Fehler.
Sub delEmptyRows()
    Dim rngCells As Range, cell As Range, rngCombined As Range, sheet as Worksheet, sheet2 as Worksheet, i As Integer 
    set sheet = Worksheets(1)
    For i = 2 To 3
    	    set rngCombined = Nothing
	    set sheet2 = Worksheets(i)
	    Set rngCells = sheet.Range("A1", sheet.Range("A65535").End(xlUp))  
	    For Each cell In rngCells
	        If cell.Value = "Description2" and cell.Offset(0,1).Value = "" Then  
	            If rngCombined Is Nothing Then
	                Set rngCombined = sheet2.Cells(cell.Row,1).EntireRow
	            End If
	            Set rngCombined = Union(rngCombined, sheet2.Cells(cell.Row,1).EntireRow)
	        End If
	    Next
	    If Not rngCombined Is Nothing Then
	        rngCombined.Delete
	    End If
	Next
End Sub
Member: IGEL.Daniel
IGEL.Daniel Jul 15, 2015 at 12:51:36 (UTC)
Goto Top
Lieber grexit,

vielen vielen Dank für den Code und die Erklärung. Ich versuche gerade, sie zu verstehen. Dabei habe ich - wieder - festgestellt, dass ich habe noch einen sehr weiten Weg vor mir habe, was VBA angeht. Es macht aber tierisch Spaß. Wußte gar nicht, dass man mit Excel nicht nur Diagramme machen kann... face-wink

Beste Grüße,
Daniel