2017-02-10 5 views
-2

Picture of excel sheetSchwieriger Code zu großes Blatt Lager zurück

Dies ist ein Beispiel für eine dünn gehandelte Aktien, die von den Tagen auf einige Bedeutung, keine Geschäfte auftreten und somit der Preis (Rückkehr) die Aktie nicht den Fall ist ändern (auch wenn sich der Bestand im realen Leben verändern könnte). Daher müssen wir den Ertrag zwischen den Tagen in die rot markierten Zellen aufteilen. Beispiel: Siehe Aktie A. Aus der Spanne (B3: B6) ergibt sich eine Aktienrendite von 20%. Wir möchten diese Rendite jedoch gleichmäßig auf vier Tage aufteilen. Siehe Bild oben.

In jeder Spalte möchte ich, dass jede rot markierte Zelle (gleich 0%) mit dem Durchschnitt der nächsten Zahl gefüllt wird, die in der Spalte von Null verschieden ist (der Durchschnitt jedes Tages ohne Handel).

Um es noch komplizierter zu machen, möchte ich den Zellenwert der Zahl ändern, die Sie den Durchschnitt finden, um gleich der durchschnittlichen Zahl auch zu sein.

Das Bild ist nur ein Beispiel - wir haben über 5000 Aktien in unserem anderen Blatt.

Antwort

0

könnten Sie diese

versuchen
Sub main() 
    Dim col As Range, zerosRng As Range, area As Range 

    With Worksheets("Stocks") '<--| change "Stocks" to your actual worksheet name 
     For Each col In Intersect(.UsedRange, .Range("C1", .Cells(1, .Columns.count).End(xlToLeft)).SpecialCells(xlCellTypeConstants, xlTextValues).EntireColumn).Columns 
      With col 
       .AutoFilter field:=1, Criteria1:="0%" 
       If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then 
        Set zerosRng = .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible) 
        .Parent.AutoFilterMode = False 
        For Each area In zerosRng.Areas 
         area.Resize(area.Rows.count + 1).Value = area.Cells(area.Rows.count + 1, 1).Value/(area.Rows.count + 1) 
        Next 
       End If 
      End With 
     Next 
    End With 
End Sub 
+0

Dank! Ich werde es versuchen :) – KH321

+0

Sie sind willkommen. Gib mir Bescheid. – user3598756