2017-09-13 1 views
2

Dies ist mein erster Beitrag hier. Ich versuchte nach einer Antwort zu suchen, konnte aber keine finden.VBA ersetzen Bereich innerhalb Funktion Formel mit seinen berechneten Werten

Mein Problem ist es, Bereich in einer Formel zu seinen spezifischen Werten zu ersetzen. Zur Veranschaulichung der Ausgabe betrachtet eine Zelle:

= MITTELWERT (A1: A10)

Ich mag diese Zelle die durchschnittlichen Argumente für die Berechnung zeigen:

= MITTELWERT ({1; 2; 3; 4; 5; 6; 7; 8; 9; 10})

Dies ist parallel zum Drücken von F9, während der Bereich A1: A10 hervorgehoben ist. Ich habe versucht, etwas aus zu bauen, was ich im Netz finden konnte, aber konnte es nicht machen die Arbeit:

Sub ChangeFormulas() 
Const CONST_FUNCTION As String = "AVERAGE" 
Dim cell As Range 
Dim tmp As String 
Dim res As Variant 

For Each cell In Selection 

    With cell 

    If InStr(.Formula, CONST_FUNCTION) > 0 Then 

     tmp = Mid(.Formula, 10, InStr(.Formula, ")") - (InStr(.Formula, CONST_FUNCTION) + 8)) 

     cell.Formula = Replace(cell.Formula, tmp, Application.Evaluate(tmp)) 
    End If 
    End With 
Next cell 
End Sub 

Dank für Ihre Hilfe danken.

+2

Es stellt sich die Frage nach dem „Warum zurückkehren ? ". Sobald Sie dies tun, werden die Formeln statisch sein und immer den gleichen Wert haben. Der ganze Sinn von Formeln besteht darin, dynamische Neuberechnungen zuzulassen. Willst du auch nur den Wert der Auswertung? Also wäre zum Beispiel '= AVERAGE (" ")' etwas wie '12.345', wobei ersteres die Formel ist und letzteres der Wert des Durchschnitts ist? Wenn ja, überschreiben Sie einfach den Zellenwert. –

+0

Wenn Sie dies verfolgen möchten, müssen Sie ',' anstelle von ';' als Listentrennzeichen verwenden oder zu .FormulaLocal wechseln. – Jeeped

Antwort

1

Cant denken, warum in Übereinstimmung mit @Brandon Barney, aber hier ist, was Sie brauchen

"=AVERAGE({" & join(application.transpose(range("i1:i4").Value),";") & "})"

, die wie so

=AVERAGE({1;5;5;10})

+0

Siehe meinen Kommentar zum OP. – Jeeped

+0

Danke Nathan. Das war was ich gesucht habe. Der Grund dafür ist für die Darstellung Aspekte (um die Anzahl Argumente der Berechnung in einer Registerdatei zu sehen) BTW @Jeeped - Was ist der Grund für die Verwendung von ',' anstelle von ';'? –