ActiveCell.FormulaR1C1=”=RC[1]+RC[2]”

Witam

Dziś kilka słów o tym jak można poprawić już zarejestrowane formuły w makrach, aby od nowa nie rejestrować całego makra, co jest dość istotne, jeśli makro jest długie.

Formuła dodawania dla pól: B1 i C1 wpisana w Arkuszu np. w komórce A1 wygląda tak: =B1+C1 (oczywiste), ale w kodzie VBa już wygląda to tak: ActiveCell.FormulaR1C1 = “=RC[1]+RC[2]” gdzie “ActiveCell.” oznacza aktualnie zaznaczoną komórkę (w tym wypadku A1), a “FormulaR1C1“, że wpisana zawartość jest formułą matematyczną.

Co oznacza reszta?

Reszta to odwołanie względne do wiersza “R” i kolumny “C”. Może być jeszcze odwołanie  bezwzględne (odwołanie do komórki przez $ postawiony przed literą, cyfrą lub oboma).

kombinacji dla odwołania jest 8:

  1. R[-1]C[-1].
  2. R[-1]C.
  3. R[-1]C[1].
  4. RC[-1]
  5. RC[1]
  6. R[1]C[-1]
  7. R[1]C
  8. R[1]C[1]
  9. RC – jest odwołaniem do pola w którym wpisana jest formuła i Excel taką formułę zgłasza jako odwołanie cykliczne.

Można to też zobrazować poglądowym rysunkiem.

Powyżej zaprezentowany opis dotyczy odwołania względnego tzn. względem pola, w którym jest wpisana formuła. Jeśli formułę przekopiujemy do innego pola, to obliczenia będą dokonywane na podstawie innych pól, ale tak samo ułożonych względem pola, w którym jest wpisana formuła.

A co teraz zrobić aby np. część napisanego równania tak zmodyfikować, żeby pierwsza liczba sumy była zawsze brana z B2? W arkuszu taka modyfikacja jest prosta i polega na zmianie B2 w $B$2. W zarejestrowanym makrze zmiana jest równie “kosmetyczna” i wystarczy odwołać się bezpośrednio do komórki, czyli w tym wypadku zamiast RC[-1] wpisać: R1C2 – co dosłownie oznacza Wiersz pierwszy, kolumna druga. W przykładzie tak został tak zmodyfikowany zapis, aby zawsze się odwoływać do tej komórki, ale można odwoływać się do wybranego wiersza np R10C[2] i zmieniać kolumny, lub do wybranej kolumny R[-2]C5 i zmieniać wiersze.