1.4k Aufrufe
Gefragt in WindowsXP von
Hallo,

bei folgendem Problem benötige ich eure Hilfe.
Ich weiß, dass es kein unüberwindbares Problem darstellen wird.
Das Makro welches Ihr im nächsten Absatz findet hat die Aufgabe aus einer Liste bestimmte Inhalte auszulesen und mir diese in einer anderen Zelle der gleichen Liste anzugeben.
Dieses Makro lasse ich bei jedem Start der Liste neu durchlaufen.

Sub CMS_VP_ermitteln()
Dim Zeile As Long, Spalte As Integer
For Zeile = 4 To 1000
For Spalte = 29 To 184
If Cells(Zeile, Spalte) = "COP" Then Cells(Zeile, 13) = Cells(2, Spalte)
If Cells(Zeile, Spalte) = "Ka" Then Cells(Zeile, 15) = Cells(2, Spalte)
If Cells(Zeile, Spalte) = "LL" Then Cells(Zeile, 17) = Cells(2, Spalte)
If Cells(Zeile, Spalte) = "Anl" Then Cells(Zeile, 19) = Cells(2, Spalte)
If Cells(Zeile, Spalte) = "VP" Then Cells(Zeile, 24) = Cells(2, Spalte)
If Cells(Zeile, Spalte) = "VB" Then Cells(Zeile, 26) = Cells(2, Spalte)
Next
Next
End Sub

Verändere ich nun die auszulesenden Zellen und lasse das Makro neu durchlaufen überschreibt es mir zwar die Werte aber es löscht nicht die Werte welche nach der Änderung nicht mehr existieren.

Was fehlt mir in meinem Makro um Werte welche nicht mehr in der Tabelle vorhanden sind so auszulesen, dass die Zelle leer ist?

Vielen Dank und Grüße.

2 Antworten

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

ich hoffe ich habe dich richtig verstanden.

Schreibe statt

If Cells(Zeile, Spalte) = "COP" Then Cells(Zeile, 13) = Cells(2, Spalte
)

folgenden Code:

If Cells(Zeile, Spalte) = "COP" Then
Cells(Zeile, 13) = Cells(2, Spalte)
Else
Cells(Zeile, 13).Clear
End if


Damit wird der Inhalt der Zelle gelöscht, falls keine Daten kopiert werden.

Gruß

M.O.
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
Hmmm…
Wäre nicht .ClearContents besser als .Clear?

Verändere ich nun die auszulesenden Zellen

Was meinst du damit? Gibst du du im Bereich 4|29 bis 1000|184 neu Werte aus der Sammlung die du prüfst an?
und lasse das Makro neu durchlaufen überschreibt es mir zwar die Werte aber es löscht nicht die Werte welche nach der Änderung nicht mehr existieren.

Woher soll das Makro wissen was nicht mehr existiert?

Ich lese deinen Code so, dass du in immerhin 166 Zellen je Zeile nach 6 möglichen Einträgen suchst, aber nicht nach einem 7., ›leer‹. Leider kennt niemand hier eine Systematik oder Regel nach der diese 166 Möglichkeiten organisiert sind.

Wenn du also den oben genannten Bereich 4|29 bis 1000|184 immer durch Einkleben neu befüllst und im Spaltenbereich 13 bis 26 (dessen weitere Zusammensetzung wiederum niemand hier kennt) immer neu aufsammeln willst was da in den eingekommenen Daten steckt schlüge ich diesen Weg vor:

Sub CMS_VP_ermitteln()
Dim Zeile As Integer
Dim Spalte As Byte
Dim QuellSpalte As Byte
'Byte so lange wir bei altem XL sind dasnicht mehrals 256 Spalten kann :-)
'Bereinigen der Ziel-Zellen.
'Ich setze voraus, dass in z.B. Spalte 18 was steht was erhalten werden muss.
For Spalte = 13 To 19 Step 2
Range(Cells(4, Spalte), Cells(1000, Spalte)).ClearContents
Next
For Spalte = 24 To 26 Step 2
Range(Cells(4, Spalte), Cells(1000, Spalte)).ClearContents
Next
For Zeile = 4 To 1000
For Spalte = 29 To 184
'Eine andere Methode des Aussiebens
Select Case Cells(Zeile, Spalte)
Case "COP": QuellSpalte = 13
Case "Ka": QuellSpalte = 15
Case "LL": QuellSpalte = 17
Case "Anl": QuellSpalte = 19
Case "VP": QuellSpalte = 24
Case "VB": QuellSpalte = 26
Case Else: QuellSpalte = 0
End Select
'Wenn ein Treffer dann eintragen, sonst übergehen - aber nicht löschen!
If QuellSpalte > 0 Then _
Cells(Zeile, QuellSpalte) = Cells(2, Spalte)
Next
Next
End Sub


Eric March
...