Thema Datum  Von Nutzer Rating
Antwort
02.06.2014 17:25:42 Stefanie
NotSolved
02.06.2014 20:12:58 Hmm
NotSolved
Rot Nachtrag
02.06.2014 21:33:06 Hmm
NotSolved
03.06.2014 00:58:07 Gast7531
NotSolved
03.06.2014 04:38:14 Gast38090
NotSolved

Ansicht des Beitrags:
Von:
Hmm
Datum:
02.06.2014 21:33:06
Views:
804
Rating: Antwort:
  Ja
Thema:
Nachtrag

Hmm...............................

beim Testen mit "echten" Zinsen fallen mir Rundungsdifferenzen bei der Anwendung der Excel-Funktion GEOMITTEL auf,

hier noch eine Alternative

Option Explicit

Sub BetterGeomittel()
'---------------------------------------------------------------------------------------
' Project   : VBAProject
' Module    : Modul
' Procedure : Sub
' Author    : Hmm
' Date      : 02.06.2014
' Time      : 20:57
' Purpose   : VBA-Forum
'---------------------------------------------------------------------------------------
'
Const m_ModName As String = "Modul1"
Const m_PrcName As String = "BetterGeomittel"
'
'
Const sErsteZelle As String = "A2"              'Zelle mit "erstem" Zins
Const lBereich As Long = 12                      'jeweils zusammengefasst
Const lRechts As Long = 2                       'Ergbnis um lRechts versetzt
'
Dim rngZinsen As Range                          'Spaltenbereich Zinsen
Dim lngOffset As Long                           'ditto

  On Error GoTo Geomittel_Error

  lngOffset = lBereich - 1                      'immer dazunehmen
  
  Set rngZinsen = Range(Range(sErsteZelle), _
      Range(sErsteZelle).Offset(lngOffset))     '1. Block Größe lBereich
  
  Do
  
    'Abbruch
    If WorksheetFunction.CountBlank(rngZinsen) > 0 Then Exit Do
    
    'Aktion
    rngZinsen.Cells(lBereich).Offset(0, lRechts).FormulaR1C1 = fncAccuracy(rngZinsen, 1)
    
    'erhöhen
    Set rngZinsen = rngZinsen.Offset(lBereich)
    
  Loop

  On Error GoTo 0
'
'---------------------------------------------------------------------------------------
Geomittel_Error:
'
Select Case Err.Number
  Case Is = 0: 'errorless
  ' Case is = #: 'custom
  Case Else: 'display
    Select Case Errormessage(Application.VBE.ActiveCodePane.CodeModule & _
      " < Module / Procedure > " & m_ModName & " / " & m_PrcName)
      Case Is = vbAbort:
        Application.SendKeys Keys:="{F8}" & "{F8}", Wait:=False
        Stop: Resume
      Case Is = vbRetry:
        Resume
      Case Is = vbIgnore: 'User canceled
    End Select
  End Select
'
'---------------------------------------------------------------------------------------
'
End Sub
'
Function fncAccuracy(calcR As Range, dFact As Double) As Double
Dim dblProduct As Double
Dim c As Range
  dblProduct = 1

  For Each c In calcR.Cells
    dblProduct = dblProduct * (dFact + c.Value)
  Next c

  fncAccuracy = -dFact + dblProduct ^ (dFact / calcR.Count)

End Function
'
'---------------------------------------------------------------------------------------
Private Function Errormessage(myMacro As String) As Long
' vbAbort: Stop: Resume
' vbRetry: Resume
' vbIgnore: User canceled
Const DebugMode = True 'False 'True = debugging
  Errormessage = MsgBox("Error#" & Err.Number & vbCrLf & Err.Description, _
  IIf(DebugMode, vbAbortRetryIgnore, vbCritical) + vbMsgBoxHelpButton, _
myMacro, Err.HelpFile, Err.HelpContext)
End Function
'
'---------------------------------------------------------------------------------------




 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
02.06.2014 17:25:42 Stefanie
NotSolved
02.06.2014 20:12:58 Hmm
NotSolved
Rot Nachtrag
02.06.2014 21:33:06 Hmm
NotSolved
03.06.2014 00:58:07 Gast7531
NotSolved
03.06.2014 04:38:14 Gast38090
NotSolved