385 Aufrufe
Gefragt in Tabellenkalkulation von fedjo Experte (2.2k Punkte)
Hallo,
bräuchte mal Hilfe bei einem Makro.

Ist in der Spalte B ab Zeile 2 ein Wert enthalten,
dann soll die Zeile darüber gelöscht werden.

Gruß
fedjo

12 Antworten

0 Punkte
Beantwortet von
Hallo Fedjo,

davon ausgehend, dass du mit Wert eine Zahl meinst und in B1 keine solche steht, probiers mal mit:

Columns("B:B").SpecialCells(xlCellTypeConstants, 1).Offset(-1, 0).EntireRow.Delete

Gruß Mr. K.
0 Punkte
Beantwortet von
Noch ein paar Anmerkungen dazu:

sollte der Laufzeitfehler 1004 "Keine Zellen gefunden" kommen, dann...

- ...sind keine Werte enthalten. Schreibe eine Zeile darüber noch die Zeile: On Error Resume next
- ...sind die Werte nicht manuell eingetragen sondern durch Formeln berechnet. Ersetze xlCellTypeConstants durch xlCellTypeFormulas
- ...sind die Werte keine Zahlen sondern z.B. Text. Ersetze die Zahl hinter xlCellTypeConstants durch 2 oder 3.

Gruß Mr. K.
0 Punkte
Beantwortet von
Sicher hast du bereits meine Tipps aus Antwort 2 beachtet. Wenn du nun immer noch Probleme hast kann das höchstens noch daran liegen, dass du in B1 eine Spaltenüberschrift hast. Probiers mal mit der leicht abgewandelten Form.

[code]Sub ZeilenLoeschen()

Range("B2:B" & UsedRange.Row + UsedRange.Rows.Count) _
.SpecialCells(xlCellTypeConstants, 3).Offset(-1, 0).EntireRow.Delete

End Sub[/code]

Gruß Mr. K.
0 Punkte
Beantwortet von
Upps, das Hallo vergessen. War keine Absicht. Also Hallo nochmal ;-)
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Mr. K.,
mit der Änderung funktioniert das Makro super.
DANE

Ich hätte aber noch eine Frage:

Wie kann ich  immer einen bestimmten Wert in Spalte A
finden, und bis zum letzten Wert der Spalte A - Spalte D
kopieren und in F1 einfügen.

Der kopierte Bereich soll gelöscht werden.

Spalte      A      Salte B           C      D               F1
[b]013.01.01    [/b]09900098    5    9
013.01.01    09900099    4    4
013.01.02           
013.01.02    09900099    5    5

Gruß
fedjo
0 Punkte
Beantwortet von
Tachchen nochmal,

ja das ist schon auch möglich. Das solltest du aber erst nach dem Löschen der Zeilen ausführen, sonst löschst du versehentlich Zeilen in   Spalte F mit. Kann es evtl. sein, dass der Wert 09900098 5 9 nicht in die Datenreihe passt? Du hast direkt darunter nochmal Werte in B:D stehen die zu dem gleichen Wert in Spalte A gehören.

Versuch mal den folgenden Code:
[code]Sub ZeilenLoeschen()

Dim r As Range

Range("B2:B" & UsedRange.Row + UsedRange.Rows.Count) _
.SpecialCells(xlCellTypeConstants, 3).Offset(-1, 0).EntireRow.Delete

Neusuche:
Do
w = InputBox("Geben Sie einen Wert im Format 000.00.00 ein", "Wert eingeben", w)
If Val(w) > 0 Then w = Format(w, "000"".""00"".""00")
If w = "" Then Exit Sub
Loop Until Len(w) = 9

Set c = Columns("A:A").Find(w)
If Not c Is Nothing Then Set r = Range(c, Cells(Rows.Count, 1).End(xlUp).Offset(0, 3))
If Not r Is Nothing Then
  r.Copy
  Range("F1").PasteSpecial xlPasteAll
  r.ClearContents
Else
  MsgBox "Der Wert " & w & " wurde nicht gefunden"
  GoTo Neusuche
End If

End Sub[/code]Gruß Mr. K.
0 Punkte
Beantwortet von
Ich vergaß noch zu erwähnen, dass du den Wert auch als Zahl eingeben kannst. Z.b. [b]130101[/b]
0 Punkte
Beantwortet von
Ganz so optimal ist das leider immer noch nicht. Wenn du das Makro versehentlich erneut ausführst, löschst du zu viele Daten. Das kannst du aber verhindern, indem du den Teil vor Neusuche durch folgenden Code ersetzt.

[code]Dim Executed As Boolean
Sub ZeilenLoeschen()

Dim r As Range

If Not Executed Then
  Range("B2:B" & UsedRange.Row + UsedRange.Rows.Count) _
  .SpecialCells(xlCellTypeConstants, 3).Offset(-1, 0).EntireRow.Delete
  Executed = True
End If[/code]Mr. K.
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Mr. K.,
hab das Makro ein wenig geändert funktioniert so gut.
Sheets("Bestand").Range("F2:I3000").ClearContents
Dim r As Range
w = " 013.01.01"
If Val(w) > 0 Then w = Format(w, "000"".""00"".""00")
If w = "" Then Exit Sub
Set c = Columns("A:A").Find(w)
If Not c Is Nothing Then Set r = Range(c, Cells(Rows.Count, 1).End(xlUp).Offset(0, 3))
If Not r Is Nothing Then
  r.Copy
  Range("F2").PasteSpecial xlPasteAll
  r.ClearContents
End If
 Sheets("Bestand").Range("A1").Select
DANE

Jetzt fehlt mir noch der Druckbereich von
A1:bis zum letzten Eintrag in F bis I

Gruß
fedjo
0 Punkte
Beantwortet von
Hi,

Kann es grad nicht testen aber sollte theoretisch mit

ActiveSheet.PageSetup.PrintArea = "$A$1:$I$" & r.Rows.Count

am Ende des Makros zu machen sein.
...