AW: Alles OK, aber 1 Zeile weiter unten anzeigen !
06.10.2022 19:26:47
Yal
Hallo Z'samma,
der Code ist ok, aber nicht optimal: Man benutzt die Funktion Find, wenn man eine bestimmte Wert sucht. "LookIn:=xlValues" bedeutet nicht, dass nach Zahlen gesucht wird, sondern nach alles was keine Formel ist. Siehe die Such-Funktion per Hand, "Suchen in": Formeln, Werte, Kommentare.
Wenn man etwas an einer bestimmte Position sucht, wird es mit
lngZ = Cells(Rows.Count, 97).End(xlUp).Row
schneller.
Daher handelt sich bei
Sheets("Auswertung").Range("cs" & LZ_1)
Sheets("Auswertung").Range("cs" & lngZ)
genau dieselbe Zelle und dementsprechend denselben Wert.
Warum Verwendest Du
einmal Columns(97) ohne Qualifier
einmal Sheets("Auswertung").Range(..) mit Arbeitsblatt-Verweis und
einmal Thisworkbook.Sheets("Auswertung").Cells (..) volle Pulle: Arbeitsmappe und Blatt
Konsequenter ganz oben
With ThisWorkbook.Worksheets("Auswertung")
dazwischen .Range(..), .Columns(..), oder .Cells(..)
und dann
End With
Man kann übrigens die Spaltenbuchstaben in Cells verwenden, also "CS" anstatt 97.
Alles zusammen würde so aussehen:
Sub anteil_MW()
With ThisWorkbook.Worksheets("Auswertung")
.Cells(Rows.Count, "CS").End(xlUp) = .Cells(Rows.Count, "CS").End(xlUp).Value / Application.Average(.Range("CS5:CS500"))
End With
End Sub
Scheinbar konsequenter, aber um Range(CS5:CS500) nicht in der Luft hängen zu lassen, muss man unschön tricksen (Worksheet ist immer der Parent eines Ranges):
Sub anteil_MW()
With ThisWorkbook.Worksheets("Auswertung").Cells(Rows.Count, "CS").End(xlUp)
.Value = .Value / Application.Average(.Parent.Range("CS5:CS500"))
End With
End Sub
VG
Yal