Das ist der Code, woran ich gebastelt habe und woran es noch hackt;:
Set SpalteR = .range(.Cells(Zeile + 1, SpalteL + 1), .Cells(Zeile + 5, SpalteL + 1))
With SpalteR
While Bereich <> "Sauber"
For Each Cell In SpalteR
'MsgBox (Cell.Value)
Set Found = .Find(what:=Cell.Value, LookIn:=xlValues, Lookat:=xlWhole)
If Not Found Is Nothing Then
Cell.Clear
Else
i = i + 1
End If
Next
If i = 5 Then
Bereich = "Sauber"
Else
Set SpalteR = SpalteR.Offset(0, 1)
End If
Wend
End With
hierran meckert der Compiler noch: Set SpalteR = SpalteR.Offset(0, 1)
Set SpalteR = .range(.Cells(Zeile + 1, SpalteL + 1), .Cells(Zeile + 5, SpalteL + 1))
With SpalteR
While Bereich <> "Sauber"
For Each Cell In SpalteR
'MsgBox (Cell.Value)
Set Found = .Find(what:=Cell.Value, LookIn:=xlValues, Lookat:=xlWhole)
If Not Found Is Nothing Then
Cell.Clear
Else
i = i + 1
End If
Next
If i = 5 Then
Bereich = "Sauber"
Else
Set SpalteR = SpalteR.Offset(0, 1)
End If
Wend
End With
adrian schrieb am 28.11.2008 11:41:14:
Hi Holger,
damit suche ich nur die letzte Spalte in der ein Wert (Name) steht.
Dann lass ich ich in jede Spalte unterhalb der SuchZeile von Spalte1 bis SpalteL fünf Werte aus anderen Sheets eintragen. Das sind Zahlenwerte. In der 4. Zeile unterhalb wird nichts eingetragen.
Wenn ich in den Sheets "Namen" lösche ändert sich der Bereich in der SuchZeile. Die Werte unterhalb einer Spalte ohne "Name" in Suchzeile werden mit diesem Code nicht berücksichtigt und somit auch nicht gelöscht.
folgender Code:
Dim Datenblatt As Worksheet, Spalte As Long
Dim Zeile As Long, SpalteL As Long, SpalteR As range, Found As range, varSupplier, Bereich As String
Set Found = Nothing
Zeile = 70 'Zeile mit den Suppliernamen im Hauptdatenblatt
Const Spalte1 As Long = 18 'Spalte,die die erste Spalte in Zeile 70 mit Suppliername ist!
Set Datenblatt = Worksheets("Overview")
With Datenblatt
'Letzte Spalte mit Supplier in Zeile 70 ermitteln
SpalteL = .Cells(Zeile, .Columns.count).End(xlToLeft).Column
'Spalten mit Suppliernamen abarbeiten
For Spalte = Spalte1 To SpalteL
'3. Zellen unterhalb Suppliername: Inhalte löschen
.range(.Cells(Zeile + 1, Spalte), .Cells(Zeile + 5, Spalte)).ClearContents
'Suppliername für Suche merken
varSupplier = .Cells(Zeile, Spalte).Value
'Supplier in den 3 Blättern im benamten bereich suchen
'Wert aus Spalte links von gefundener Zelle in Zeile 71 eintragen
Call SubSuchen(rngBereich:=Worksheets("Philips (A)").range("SupplierAs"), _
varSuchen:=varSupplier, wks:=Datenblatt, ZielZeile:=Zeile + 1, ZielSpalte:=Spalte)
'Wert aus Spalte links von gefundener Zelle in Zeile 72 eintragen
Call SubSuchen(rngBereich:=Worksheets("Philips (EU)").range("SupplierEU"), _
varSuchen:=varSupplier, wks:=Datenblatt, ZielZeile:=Zeile + 2, ZielSpalte:=Spalte)
'Wert aus Spalte links von gefundener Zelle in Zeile 73 eintragen
Call SubSuchen(rngBereich:=Worksheets("Philips (US)").range("SupplierUS"), _
varSuchen:=varSupplier, wks:=Datenblatt, ZielZeile:=Zeile + 3, ZielSpalte:=Spalte)
.Cells(Zeile + 5, Spalte).Value = .Cells(Zeile + 1, Spalte).Value + _
.Cells(Zeile + 2, Spalte).Value + .Cells(Zeile + 3, Spalte).Value
Next
Hab ein bisschen hierran gebastelt, aber funzt immer noch nicht ganz =(
wo er meckert, untermal ich mal "fett"
lg
adrian
Holger schrieb am 28.11.2008 08:48:01:
Hallo Adrian,
wenn ich dich recht verstanden habe, ermittelt du mit
"SpalteL = .Cells(Zeile, .Columns.count).End(xlToLeft).Column"
die letzte Spalte, in der in den relevanten 5 Zeilen etwas steht. Machst du das für alle 5 Zeilen und ermittelst das Maximum oder sind immer alle 5 Zeilen gefüllt, so dass das Maximum bereits nach einer Bestimmung feststeht?
Wenn du aber das Maximum bestimmt hast, können in den rechts von der letzten Spalte stehenden Spalten keine Werte mehr stehen. Wozu also der Aufwand?
Gruß
Holger
adrian schrieb am 27.11.2008 12:08:25:
Hallo,
ich bin noch Anfänger in VBA und würde mich freuen wenn mir hierbei jemand helfen kann!
Es werden jeweils 5 Werte in einer Spalte unterhalb einer bestimmten Zeile eingetragen.
Das gilt für:
For Spalte = Spalte1 To SpalteL
Die Anzahl der Spalten kann variieren und die letzte wird mittels "SpalteL = .Cells(Zeile, .Columns.count).End(xlToLeft).Column" ermittelt.
folgendes möchte ich nun machen, aber es funktioniert leider nicht:
Falls in den 5 Zeilen der SpalteL+1 Werte sind, alle 5 löschen und schauen ob in den Zeilen der SpalteL+2 ebenfalls werte stehen, ggf. löschen, usw.!
hier mein Code, aber er funktioniert leider nicht, weil ich nicht weiß, wie ich diese 5Zeilen in der SpalteR (=SpalteL+zähler) als Bereich/Range Speichern soll...oder ob es so überhaupt möglich ist.
With Datenblatt
Set SpalteR = .range(.Cells(Zeile + 1, SpalteL + 1), .Cells(Zeile + 1, SpalteL + 1))
Set Found = SpalteR.Find(what:=Cells.Value, LookIn:=xlValues, Lookat:=xlWhole)
While Not Found Is Nothing
SpalteR.ClearContents
Set SpalteR = SpalteR.Offset(0, 1)
Set Found = SpalteR.Find(what:=Cells.Value, LookIn:=xlValues, Lookat:=xlWhole)
Wend
End With
lg
adrian |