Jak przekształcić formułę ciągową w" rzeczywistą " formułę

Mam 0,4*A1 w komórce (jako ciąg znaków). Jak przekształcić tę "formułę ciągową" w rzeczywistą formułę i obliczyć jej wartość w innej komórce?

Author: slartidan, 2010-12-17

7 answers

Evaluate "might suit": {]}

Http://www.mrexcel.com/forum/showthread.php?t=62067

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function
 42
Author: Fionnuala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-19 07:47:13

Połączyłem formułę jako normalną, ale na początku miałem '= zamiast =.

Następnie kopiuję i wklejam jako tekst tam, gdzie go potrzebuję. Następnie zaznaczam sekcję zapisaną jako tekst i naciskam ctrl + H aby znaleźć i wymienić.
Zamieniam '= na = i wszystkie moje funkcje są aktywne.

To kilka etapów, ale unika VBA.

Mam nadzieję, że to pomoże,

Rob

 26
Author: Robbie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 09:44:57

Dla Zabawy znalazłem ciekawy artykuł , aby użyć jakoś ukrytej funkcji oceny, która istnieje w Excelu. Sztuczka polega na przypisaniu go do nazwy i użyciu nazwy w komórkach, ponieważ funkcja EVALUATE() spowoduje błąd msg, jeśli zostanie użyta bezpośrednio w komórce. Próbowałem i działa! Można go używać z nazwą względną, jeśli chcesz skopiować wiersze, jeśli arkusz.

 11
Author: Patrick Honorez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-17 16:16:31

UPDATE to kiedyś działało (w 2007 roku, jak sądzę), ale nie w Excelu 2013.

EXCEL 2013:

To nie to samo, ale jeśli można umieścić 0.4 w jednej komórce (powiedzmy B1), a wartość tekstową A1 w innej komórce (powiedzmy C1), w komórce D1, można użyć = B1 * pośredniego (C1), co skutkuje obliczeniem wartości 0.4 * A1.

Więc, jeśli A1 = 10, dostaniesz 0.4*10 = 4 w komórce D1. Zaktualizuję ponownie, jeśli znajdę lepsze rozwiązanie 2013 i przepraszam, że Microsoft zniszczył oryginalna funkcjonalność INDIRECT!

EXCEL 2007 wersja:

Dla rozwiązania innego niż VBA, użyj wzoru INDIRECT. Pobiera łańcuch znaków jako argument i konwertuje go na odniesienie do komórki.

Na przykład, =0.4*INDIRECT("A1") zwróci wartość 0.4 * wartość, która znajduje się w komórce A1 tego arkusza.

Jeśli komórka A1 będzie, powiedzmy, 10, to =0.4*INDIRECT("A1") zwróci 4.

 9
Author: wardw123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-19 07:52:19

Wolę VBA-rozwiązanie dla profesjonalnych rozwiązań.

Z częścią replace-procedure w pytaniu Wyszukaj i zamień tylko całe słowa , używam następującej procedury VBA:

''
' Evaluate Formula-Text in Excel
'
Function wm_Eval(myFormula As String, ParamArray variablesAndValues() As Variant) As Variant
    Dim i As Long

    '
    ' replace strings by values
    '
    For i = LBound(variablesAndValues) To UBound(variablesAndValues) Step 2
        myFormula = RegExpReplaceWord(myFormula, variablesAndValues(i), variablesAndValues(i + 1))
    Next

    '
    ' internationalisation
    '
    myFormula = Replace(myFormula, Application.ThousandsSeparator, "")
    myFormula = Replace(myFormula, Application.DecimalSeparator, ".")
    myFormula = Replace(myFormula, Application.International(xlListSeparator), ",")

    '
    ' return value
    '
    wm_Eval = Application.Evaluate(myFormula)
End Function


''
' Replace Whole Word
'
' Purpose   : replace [strFind] with [strReplace] in [strSource]
' Comment   : [strFind] can be plain text or a regexp pattern;
'             all occurences of [strFind] are replaced
Public Function RegExpReplaceWord(ByVal strSource As String, _
ByVal strFind As String, _
ByVal strReplace As String) As String

    ' early binding requires reference to Microsoft VBScript
    ' Regular Expressions:
    ' with late binding, no reference needed:
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")

    re.Global = True
    're.IgnoreCase = True ' <-- case insensitve
    re.Pattern = "\b" & strFind & "\b"
    RegExpReplaceWord = re.Replace(strSource, strReplace)
    Set re = Nothing
End Function

Użycie procedury w arkuszu excel wygląda następująco:

zastosowanie w Excelu-arkusz

 3
Author: DrMarbuse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-19 10:44:51

Moim zdaniem najlepsze rozwiązania są pod tym linkiem: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function

Oto podsumowanie: 1) w komórce A1 wpisz 1, 2) w komórce A2 wpisz 2, 3) w komórce A3 wpisz +, 4) Utwórz nazwany zakres, z "= Evaluate (A1 & A3 & A2) " w polu odnosi się podczas tworzenia nazwanego zakresu. Nazwijmy ten nazwany zakres " testEval", 5) w komórce A4 enter =testEval,

Komórka A4 powinna mieć w sobie wartość 3.

Uwagi: a) Nie wymaga programowania / vba. b) zrobiłem to w Excelu 2013 i działa.

 1
Author: mountainclimber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-19 17:32:26

Najlepszym, Nie-VBA, sposobem na to jest użycie formuły tekstowej. Przyjmuje łańcuch znaków jako argument i konwertuje go na wartość.

Na przykład = TEXT ("0.4*A1",'##') zwróci wartość 0.4 * wartość, która znajduje się w komórce A1 tego arkusza.

 -2
Author: JakobW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 02:40:22