Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1072to1076
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

kleiner VBA Code Teil 2

kleiner VBA Code Teil 2
06.05.2009 10:50:32
Drusilla
An dieser Stelle nochmals danke fürs Korrekturlesen. Leider hab ich noch einen Fehler meines zusammengebastelten Codes entdeckt: Der Mittelwert wird gebildet, bevor die Nullen gelöscht werden. Das ist zwar Absicht, damit diese Zeile nicht gelöscht wird, aber der Mittelwert stimmt dann für die neuen Zahlen (ohne Null) eben nicht.
Könnte man den Mittelwert nach dem Nuller-Löschen einfach nochmals berechnen und drüber schreiben? Oder vor dem Löschen einfach irgendeine Zahl in die letzte Zeile schreiben, dann Nullen löschen und dann Mittelwert berechnen und die Zahl von vorhin überschreiben?
Hier nochmals der Code:

Option Explicit
Sub Output_Standard()
Dim Ws        As Worksheet
Dim lngzeile  As Long
Dim strDatNam As String
Application.ScreenUpdating = False
With ActiveWorkbook
'Sicherheitsabfrage:
If MsgBox("Soll die Datei " & .Name & " bearbeitet werden?", vbYesNo) = vbNo Then
GoTo Ende
End If
For Each Ws In .Worksheets
With Ws
If .Name  "Titelblatt" Then     'Titelblatt übergehen
'Fixierung aufheben:
.Activate
ActiveWindow.FreezePanes = False
'Spalten einblenden
.Range(.Cells(1, 1), .Cells(1, Columns.Count)).EntireColumn.Hidden = False
'Zeilen einblenden:
.Range(.Cells(1, 1), .Cells(Rows.Count, 1)).EntireRow.Hidden = False
'Mittelwert ausgeben:
lngzeile = .Cells(.Rows.Count, 10).End(xlUp).Row
.Cells(lngzeile + 2, "J").Value = _
Application.WorksheetFunction.Average(.Range(.Cells(4, 10), .Cells( _
lngzeile, 10)))
'Zeilen löschen wenn in Spalte J (Kosten) der Zellwert = 0 ist (löscht auch _
Leerzeilen)
For lngzeile = .Cells(.Rows.Count, "J").End(xlUp).Row To 4 Step -1
If .Cells(lngzeile, 10).Value = 0 Then
.Rows(lngzeile).Delete
End If
Next
End If
End With
Next  'nächstes Tabellenblatt
'Speichern
ActiveWorkbook.SaveAs Filename:="24h.xls"
Set Ws = Nothing
End With
Ende:
Application.ScreenUpdating = True
Set Ws = Nothing
End Sub


Vielen Dank!!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: kleiner VBA Code Teil 2
06.05.2009 12:36:12
Chris
Servus,
dann lölsch doch zuerst und bilde dann den Mittelwert:
Option Explicit

Sub Output_Standard()
Dim Ws        As Worksheet
Dim lngzeile  As Long
Dim strDatNam As String
Application.ScreenUpdating = False
With ActiveWorkbook
'Sicherheitsabfrage:
If MsgBox("Soll die Datei " & .Name & " bearbeitet werden?", vbYesNo) = vbNo Then
GoTo Ende
End If
For Each Ws In .Worksheets
With Ws
If .Name  "Titelblatt" Then     'Titelblatt übergehen
'Fixierung aufheben:
.Activate
ActiveWindow.FreezePanes = False
'Spalten einblenden
.Range(.Cells(1, 1), .Cells(1, Columns.Count)).EntireColumn.Hidden = False
'Zeilen einblenden:
.Range(.Cells(1, 1), .Cells(Rows.Count, 1)).EntireRow.Hidden = False
'Zeilen löschen wenn in Spalte J (Kosten) der Zellwert = 0 ist (löscht auch Leerzeilen) _
lngzeile = .Cells(.Rows.Count, 10).End(xlUp).Row
For lngzeile = .Cells(.Rows.Count, "J").End(xlUp).Row To 4 Step -1
If .Cells(lngzeile, 10).Value = 0 Then
.Rows(lngzeile).Delete
End If
Next
'Mittelwert ausgeben:
lngzeile = .Cells(.Rows.Count, 10).End(xlUp).Row
.Cells(lngzeile + 2, "J").Value = _
Application.WorksheetFunction.Average(.Range(.Cells(4, 10), .Cells( _
lngzeile, 10)))
End If
End With
Next  'nächstes Tabellenblatt
'Speichern
ActiveWorkbook.SaveAs Filename:="24h.xls"
Set Ws = Nothing
End With
Ende:
Application.ScreenUpdating = True
Set Ws = Nothing
End Sub


Gruß
Chris

Anzeige
AW: kleiner VBA Code Teil 2
06.05.2009 13:16:54
Drusilla
Nee, hab doch bereits geschrieben, dass das nicht geht, weil sonst die Zeile (weiter hinten stehen eben Werte, die ich brauche!) auch gelöscht wird. Könntest du also bitte noch etwas einfügen, so dass einfach eine Zahl in die letzte Zeile eingegeben wird, dann gelöscht, dann die Zahl durch den Mittelwert ersetzt wird? Oder halt einfach zweimal Mittelwert berechnen? Wie sag ich dann aber, dass das Makro mir den zweiten Mittelwert nicht einfach unter den vorherigen Mittelwert schreibt, sondern darüber?
AW: kleiner VBA Code Teil 2
06.05.2009 14:03:29
Chris
Servus,
so:
lngzeile = .Cells(.Rows.Count, 10).End(xlUp).Row
.Cells(lngzeile, "J").Value = _
Application.WorksheetFunction.Average(.Range(.Cells(4, 10), .Cells( _
lngzeile -2, 10)))
Ich gehe jetz davon aus, dass der zu summierende Bereich 2 Zeilen über der letzten Zeile liegt, weil du ja zuvor In .Cells(lngzeile + 2, "J") geschrieben hast und die letzte Zeile somit um 2 verschoben wurde.
das würde dann nach der Löschanweisung kommen.
Allerdings verstehe ich nicht wie du die Werte behalten willst, die nach Spalte J kommen, wenn du Zeilen trotzdem löschst, wenn 0 oder kein Wert drin steht, aber ich muss ja nicht alles verstehen.
Gruß
Chris
Anzeige
AW: kleiner VBA Code Teil 2
06.05.2009 15:29:30
Drusilla
Ok, alles klar, danke dir! :-)

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige