2012-02-03 16 views
17

W jaki sposób jedna komórka uzyskuje formułę innej komórki jako tekst bez użycia VBA? Widzę, że to pytanie było już zadawane wiele razy, a odpowiedzią jest zawsze napisanie niestandardowej funkcji w VBA.Uzyskiwanie formuły innej komórki w komórce docelowej

Jednak znalazłem post made in 2006, który twierdził, że znalazł rozwiązanie inne niż VBA, ale link podany w tym poście jest już uszkodzony.

+1

Jeśli szukasz rozwiązania innego niż VBA, nie jest to tak naprawdę pytanie programistyczne, czyż nie? Powinienem raczej odpowiedzieć na pytanie [superuser] (http://superuser.com). –

+2

Ten brakujący post zdawał się wskazywać na podejście przy użyciu starego XLM 'GET.FORMULA()', ale jeśli byłbyś skłonny posunąć się tak daleko, powinieneś po prostu użyć zwykłej funkcji VBA. –

+0

Nie jestem pewien, co to jest XLM GET.FORMULA(), ale myślę, że będę trzymać się metody VBA. – S200

Odpowiedz

16

Jest to dobry sposób robienia tego bez VBA. Używa makr XL4 (są to makra, ale nie jest to VBA, o które pytano).

W odniesieniu do rysunku 1 komórki A2: A4 zawierają zwykłe formuły.

enter image description here

  1. Going to wzorach -> Zdefiniuj imię, zdefiniowano dwa nazwane zakresy (patrz rys. 2), z informacji przedstawionej w komórkach A6: B8.

    enter image description here

  2. Wpisz w komórce B2 =FormulaAsText. Spowoduje to pobranie formuły w komórce A2 jako tekst.

    Wyjaśnienie: Podany zakres FormulaAsText wykorzystuje =GET.CELL(info_type,reference). W tym przypadku, ìnfo_type = 6 pobiera formuły i reference = OFFSET(INDIRECT("RC",FALSE),0,-1) wykorzystuje komórki z 0 -1 wierszy i kolumn odsunięty od jednego wzoru stosowanego w

  3. kopiowania B2 i B3 wklejenia. B4. To pokaże formuły w formacie A3: A4. Komórka A4 pokazuje, że funkcja arkusza roboczego tylko pobiera wartości, a nie formuły (w przeciwieństwie do GET.CELL).

  4. Ponieważ FormulaAsText otrzymuje wzór z komórki na stałe przesunięcie (0, -1) z prądem, to zdefiniowano inny zakres FormulaAsText2, w którym stosuje się przesunięcie (wiersze cols) odczytane z samego arkusza. Komórki D2: D4 zawierają =FormulaAsText2. Zatem komórka D2 pokazuje zawartość komórki B3 (=OffSET(D2,1,-2)), która jest FormulaAsText. komórki D3: D4 pokazują zawartość samych siebie. To dodaje pewnej elastyczności. YMMV.

PS1: Istota została podjęta z http://www.mrexcel.com/forum/excel-questions/20611-info-only-get-cell-arguments.html

PS2: Tim Williams wspomniano w komentarzu "stary XLM GET.FORMULA()". Ta odpowiedź jest prawdopodobnie powiązana (nie to samo, ponieważ ta używa GET.CELL()).

PS3: Podano prosty roztwór VBA, np.W http://dmcritchie.mvps.org/excel/formula.htm


EDIT: Uzupełniając this nice answer, funkcja arkusza FormulaText jest dostępny for Excel 2013 i później.

-5

Nie możesz. Jest to najprawdopodobniej wybór projektu, aby wyeliminować przeciętnego użytkownika programu Excel z przypadkowego pobrania czegoś, czego nie chciał.

To, co czytasz, jest poprawne - pisanie UDF jest rozwiązaniem, które chcesz.

+0

Dzięki Issun (Okami?), Myślę, że VBA jest drogą do zrobienia. – S200

+1

Nie ma za co (i Okami ma rację!) ^^ – aevanko

+0

Myślę, że ta odpowiedź nie jest poprawna, a ja napisałem alternatywę. –

15

=FormulaText(Reference) rade Documentation

+1

Czy możesz podać link do dokumentacji? –

+0

To jest odpowiedź. Dzięki! – Scott

+1

Nie wiem, kiedy wprowadzono funkcję FormulaText, ale wygląda na to, że działa w Excel2013. Właśnie tego potrzebuję ... dzięki! – veljkoz

0

Jest sposób, aby to zrobić. W moim przykładzie miałem tabelę, która pokazywała datę. Data pochodzi z Sheet! G91. W moim stole miałem także kolumnę, która pokazywała nazwę arkusza. Dodałem dwie kolejne kolumny do mojego stołu. Pierwsza kolumna zawierała kolumnę (arkusz! G91), która zwraca liczbę 7, ponieważ G jest siódmą literą alfabetu. Następnie przekonwertowałem numer na literę (G), używając innej tabeli w moim skoroszycie. W drugiej kolumnie, którą dodałem, stworzyłem wiersz formuły (Arkusz! G91), który zwraca liczbę 91. Uwaga: Wiersz i kolumna mogą wyglądać jak zmienne formuły, które przeliczają się przy każdym obliczeniu skoroszytu.

Chciałem, aby inna kolumna pokazała zawartość formuły w komórce daty wymienionej na początku tego postu. Zawarłem następującą funkcję ciągu (można również użyć CONCATENATE).

"=" & AJ9 & "!" & AM9 & AN9

Pozycje rozdzielone znakami ampersand zostają połączone (tzn. Połączone). AJ9 w moim przykładzie zawiera nazwę arkusza, AM9 zawiera literę kolumny, a AN9 zawiera numer wiersza.

Mam teraz kolumnę, która dynamicznie aktualizuje jej zawartość, odzwierciedlając nazwę arkusza i odnośnik do komórki. Wyniki w mojej komórce skoroszytu to

= Arkusz! G91.

+0

To podejście nie będzie jednak działać dla formuł, ale myślę, że o to pyta. –

0

Ta sugestia może być pomocna dla tych, którzy po pobraniu bloku formuł i przetransportowaniu ich do nowego arkusza kalkulacyjnego chcą je ponownie uruchomić. Funkcja FORMULATEXT doskonale nadaje się do zbierania formuł, ale pozostawia je jako niepotrzebne ciągi tekstowe. Jeśli chcesz odzyskać je jako w pełni funkcjonalne formuły, musisz je edytować osobno, aby usunąć ciąg znaków, ale tutaj jest skrót do większych bloków. Przejdź do miejsca, w którym masz wymagane formuły jako tekst (innymi słowy po użyciu FORMULATEXT - zrobiłeś kopiuj i wkleić (tylko wartość)). Następny krok polega na podświetleniu wszystkich komórek, które chcesz przekonwertować, a następnie przejściu do opcji menu [Tekst-Kolumny] (pasek {Data} w programie Excel 2016). Możesz wybrać "Rozdzielone", ale na następnym ekranie po prostu usuń zaznaczenia, które pojawiają się w twoich formułach. Następnie "Zakończ". Program Excel powinien automatycznie analizować komórki jako zawierające formuły, a teraz powinieneś je ponownie uruchomić.

Powiązane problemy