fbpx

Odzyskiwanie różnych formuł po nadpisaniu ich wartością

27.03.2018 | ECP3, Makra VBA

Czyli trudna rzecz rozwiązana prostą metodą

Niedawno opisywałam już podobny przypadek, natomiast dotyczył on trochę łatwiejszej sytuacji. Chodziło bowiem o to, żeby dać użytkownikowi możliwość wpisania do jednej komórki wartości z palca, lub skorzystania z wpisanej tam formuły. Taki switch: chcę wartość, to ją wpiszę, a jak ją skasuję, to na jej miejscu pojawi się formuła. Cudo!

Wtedy jednak opisywałam sytuację, gdy w komórce ma się pojawić tylko jedna, określona formuła. Teraz natomiast chodzi o to, żeby mogły się tam pojawiać różne formuły, w zależności od komórki, którą będę edytowała. Brzmi strasznie, ale jest bardzo proste. Wymaga tylko kolumny pomocniczej i leciutkiej edycji kodu VBA, który napisałam dla poprzedniej sytuacji.

Formatkę i całą magię pokazuje ten rysunek:

Formatka

Formatka

Let’s go!

W rozwiązaniu, które wymyśliłam idę na łatwiznę (jak zwykle ;)). Pomyślałam sobie, że stworzę w arkuszu kolumnę (szara kolumna I), w której będą napisane formuły, które chcę odzyskać, gdy user skasuje wartość w komórce (z kolumny Jednostkowa cena netto). Tę kolumnę roboczą (I) ukryję i jedyne co makro będzie robiło innego niż poprzednio, to podbierało wartość z odpowiedniej komórki tej ukrytej kolumny. Nawet nie trudzę się, żeby wpisywało identyczną formułę. Dla użytkownika i tak to nie ma znaczenia – on chce widzieć określoną wartość :). O rety, ale sprytne 🙂

Całą modyfikacja w kodzie sprowadza się do tej jednej linijki:

Target.FormulaR1C1 = "=RC[4]"

Czyli cały kod, dla przypomnienia, wygląda tak:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Zakres As Range
 
 On Error GoTo Obsluga
 
 Set Zakres = Me.Range("Ceny")
 
 If Not Intersect(Zakres, Target) Is Nothing And Target.Value = "" Then
 Target.FormulaR1C1 = "=RC[4]"
 End If
Obsluga:
 Set Zakres = Nothing
 
End Sub

I wszystko. Moim zdaniem efekt jest super, przy minimalnym nakładzie pracy. Czyli to, o co zazwyczaj chodzi 😉

Tutaj znajdziesz plik z rozwiązaniem do pobrania (oczywiście zawiera makra!):

A tutaj wersję wideo:

 

 

Jeżeli chcesz lepiej poznać makra i VBA zapisz się na listę zainteresowanych kursem Excel w codziennej pracy cz. 3! Podczas oczekiwania na kurs będę Ci wysyłała informacje, ciekawostki i excelowe triki. Bezpłatnie! 

Pomogłam Ci? Postaw mi wirtualną kawę! →

Przeczytaj podobne wpisy

Kategorie

4 komentarze

  1. Bardzo fajny i prosty sposób. Działa zarówno na wierszach jak i na kolumnach. W jaki sposob należałoby zmienić treść VBA, żeby nadpisywanie działało w arkuszu w kilku różnych wierszach lub kilku różnych kolumnach (niestety tego nie potrafiłem wykonać)?

    Reply
    • Cieszę się, że Ci się podoba – proste rozwiązania są najlepsze :).
      Odnośnie modyfikacji na różne kolumny – tutaj trzeba już pisać warunki, np. Select Case albo If-y. Czyli jeżeli Target.Column = A then… itd.

      Reply
  2. Bardzo fajne rozwiązanie niestety mam jeden problem. Formuły wracają tylko po kasowaniu komórki backspace a nie delete. Czy można to jakość naprawić/zmienić?

    Reply
    • Hej, na YT rozmawialiśmy 🙂

      Reply

Submit a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *