Załóżmy, że mam ciąg tekstowy podobny "11+5"
lub nawet "=11+5"
przechowywany w komórce. Czy w programie Excel jest funkcja, która pozwoli mi ocenić ten ciąg znaków tak, jakby był formułą?
Byłoby to pomocne w innym projekcie, w którym chciałbym móc pisać formuły „dynamiczne” w programie Excel.
microsoft-excel
worksheet-function
drapkin11
źródło
źródło
Odpowiedzi:
EVALUATE
jest dostępny w VBA we wszystkich aktualnych wersjachMożesz dołączyć go do swojego kodu VBA lub zawinąć w prosty UDF, aby udostępnić go jako funkcję arkusza roboczego
Zasadniczo traktuje wartość przekazanego parametru jako formułę programu Excel, tak jak gdyby była wprowadzona do komórki
"11+5"
i"=11+5"
da ten sam wynikźródło
Jest to półfunkcja - może być używana tylko w Menedżerze nazw.
Oto jak możesz go użyć:
Wskaż komórkę i otwórz Menedżera nazw (z karty FORMUŁY lub klikając CTRL + F3)
Napisz
=evaluate(
i kliknij wybraną komórkę (najlepiej, aby zachować względne odniesienie).)
eva
).Załóżmy teraz, że wybrałeś B1 i sprawiłeś, że wszystkie odnoszą się do A1. W A1 możesz wstawić „ 1 + 1 ”, a w B1 piszesz
=eva
- po wciśnięciu ENTER wartość B1 wyniesie2
. Ponieważ odwołanie w Name Manager było względne, możesz użyć,=eva
aby uzyskać ocenę dowolnej komórki, która pozostała komórka, z której chcesz. (np. w B2,=eva
zwróci wynik komórki A2)źródło
=auswerten(...)
Istnieje ważne zastrzeżenie ze świetną odpowiedzią @karel i @Laurentiu Mirica: funkcja oceny nie zostanie ponownie obliczona, chyba że komórka, której dotyczy odwołanie, ulegnie zmianie. Na przykład komórka C1 zawiera tekst,
"A1+B1"
a D1 zawiera funkcję=eval
. Jeśli wartości w A1 lub B1 ulegną zmianie, komórka D1 nie zostanie ponownie obliczona .Można to poprawić, wprowadzając funkcję lotną do łańcucha lub komórki ewaluacyjnej. Wymusi to ponowne obliczenie za każdym razem, gdy arkusz zostanie ponownie obliczony. Na przykład komórkę C1 można zastąpić
=if(today(),"A1+B1",)
. Lub D1 można zastąpić=if(today(),eval,)
. Każda funkcja lotna powinna działać.Trzecim i być może najprostszym rozwiązaniem jest zmiana półfunkcji w menedżerze nazw na
=if(today(),evaluate(c1),)
źródło
jeśli użyjesz tego w komórce (obok konkatenatu), może to być bardzo przydatne.
Na przykład ta formuła wyświetli wartość komórki B5 w innym arkuszu (którego nazwa jest przechowywana w komórce A2 w tym arkuszu):
Aby INDIRECT działał, zewnętrzny arkusz roboczy musi być otwarty.
źródło