3.3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

ich habe mehrere Tabellenblätter und möchte mit einem Makro die Werte in Zellen löschen die bestimmte Bedingungen erfüllem.

Also, im Blatt "Übersicht" soll der Wert in Zeile B11 bis BG11gelöscht werden, aber nur wenn in der Spalte CP 5 bis CP24 ein "X" steht. Es kann aberr auch sein das das erste "X" in Zelle CP 15 steht.

Die Zelle CP5 soll die Bedingung für Zelle B11 und Zelle CP6 für Zelle E11 usw.

In Zeile 11 sind immer 3 Zellen verbunden.

Folgenen Ansatz für das Makro habe ich mir mal gebastelt aber es tut es nicht.


Sheets("Übersicht").Select
Range("b11:bg11").Select
Range("cp5").Activate
ActiveWindow.LargeScroll Down:=-3
ActiveWindow.ScrollRow = 5
z = 1
With ThisWorkbook.Worksheets("gleise")
Do Until .Cells(z, "cp") = vbNullString
If .Cells(z, "cp") = "X" Then
.Cells(z, "b11") = vbNullString
.Cells(z, "e11") = vbNullString
.Cells(z, "h11") = vbNullString
.Cells(z, "k11") = vbNullString
.Cells(z, "n11") = vbNullString

End If

Loop
End With

kann mir jemand helfen??
Ich hoffe meine Erläuterung ist ausreichend.

Gruss Thino

3 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Thino,

dein Makro ist nur bruchstückhaft, was mir aber auffällt:

Do Until .Cells(z, "cp") = vbNullString
If .Cells(z, "cp") = "X" Then


Ich nehme mal an, dass cp eine Variable ist, und die dürfte dann nicht in Anführungszeichen stehen:
Do Until .Cells(z, cp) = vbNullString
If .Cells(z, cp) = "X" Then


Du schreibst:
im Blatt "Übersicht" soll der Wert in Zeile B11 bis BG11gelöscht


Im Makro wird dieses Blatt zwar selektiert, aber der vbNullString wird in das Arbeitsblatt "gleise" geschrieben:
With ThisWorkbook.Worksheets("gleise")


Außerdem ist die cells-Anweisung in deiner Do-Schleife falsch:
entweder schreibst du
.Cells(11, 2) = vbNullString 'B11

oder
.Range("B11") = vbNullString


Den Inhalt einer Zelle kannst du auch mit Clear bzw. ClearContents löschen:
Cells(11, 2).ClearContents
Range("B11").ClearContents


Die Zelle CP5 soll die Bedingung für Zelle B11 und Zelle CP6 für Zelle E11 usw.

In deiner Schleife werden aber die Zellen B11, E11 usw. gelöscht, wenn die Bedingung Cells(z, cp) = "X" erfüllt ist.

Um den Inhalt der Zelle B11 zu löschen, wenn in CP5 ein X steht, würde ich folgenden Code benutzen:

If Worksheets("Übersicht").Cells(5, 94) = "X" Then Worksheets("Übersicht").Cells(11, 2).ClearContents


Falls ich dich richtig verstehe, probiere mal das folgende Makro aus:

Sub loeschen()

Dim zeile, z As Long

For zeile = 5 To 24

If Worksheets("Übersicht").Cells(zeile, 94) = "X" Then Worksheets("Übersicht").Cells(11, 2 + 3 * z).ClearContents
z = z + 1

Next zeile

End Sub


Probiere es aber erst einmal in einer Testabelle.

Gruß

M.O.
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

nur als Hinweis: Cells kann man auch verwenden, indem man als Spaltenangabe den Spaltenbuchstaben verwendet - also macht .Cells(z, "cp") durchaus Sinn, wobei somit cp keine Variable sondern eben der Spaltenbuchstabe für Spalte CP (Spaltennummer 94) ist.

Bis später,
Karin
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

@Beverly,

das habe ich bisher nicht gewußt, wieder etwas gelernt. Danke :-).

Gruß

M.O.
...