logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Edycja formuły w komórce za pomocą VBA: Zmiana warunku z B1>10 na C1>10

Artur1992pl 27 Kwi 2023 22:54 915 13
REKLAMA
  • #1 20558320
    Artur1992pl
    Poziom 9  
    Posty: 32
    Cześć,

    Czy przy pomocy VBA, mogę edytować formułę z komórki? Np. w komórce A1 mam formułę =Jeżeli(B1>10,1,0)
    I chcę edytować na =Jeżeli(C1>10,1,0)

    Chodzi mi o samą możliwość. Bo formułę w komórce mam bardziej rozbudowaną. Jeżeli się da to w jaki sposób się za to zabrać.
  • REKLAMA
  • Pomocny post
    #2 20558396
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Formuła w komórce jest określona przez jej właściwość .Formula. Ta właściwość jest tekstem formuły w języku angielskim.
    Można ten tekst edytować jak każdy tekst, a potem przypisać ponownie do właściwości .Formula.
    Prościej jednak od razu przypisać docelową treść formuły do właściwości .Formula.
    Można to też nagrać jako makro.
    Makro używa "lustrzanej" właściwości .FormulaR1C1.
    Można wykorzystać dowolną z nich.
  • #3 20558509
    Artur1992pl
    Poziom 9  
    Posty: 32
    Mam 200 plików w których muszę pozmieniać formuły.
    Jeden przypadek to zmiana lub na oraz, tutaj będzie chyba łatwo.
    Drugi przypadek to zmiana komórki, a dokładnie przesunięcie jej o dwie w prawo, tutaj nie mam jeszcze pomysłu jak to zrobić ale spróbuję dziś coś zrobić.
  • REKLAMA
  • Pomocny post
    #4 20558564
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    Tak jak kolega napisał. Zobacz sobie jak wygląda zapis formuły w .FormulaR1C1 (np. w oknie Immediate napisz:
    ? [B11].FormulaR1C1) i spróbuj to zrozumieć. Łatwo się przerabia jak już poznasz notację.
  • #5 20559373
    Artur1992pl
    Poziom 9  
    Posty: 32
    Ok podpowiedzi pomogły
    Pierwszy problem udało się rozwiązać.

    ZmA= activecell.formula
    ZmB=replace(ZmA, "AND" , " OR" )

    And występuje tylko raz i właśnie to chce zamienić więc nie ma problemu.

    Drugi przypadek jeszcze nie mam pomysłu.

    Mam formułę = Jeżeli ( lub ( A1 = '' , B1=''),...... I chcę przesunąć komórkę A1 o dwie w prawo.
    Pliki czasem mają inne komórki np D1 i E1 . Ale zawsze chce pierwszą komórkę przesunąć o dwie w prawo.

    Jakaś mała podpowiedź?
  • REKLAMA
  • #6 20559549
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Załącz przykładowy plik z tymi formułami.
    I wyrażaj się precyzyjnie, np. co to znaczy:
    Artur1992pl napisał:
    przesunąć komórkę A1 o dwie w prawo
    Chodzi o to, że w formule adres komórki A1 ma się zmienić na C1?
  • #7 20559572
    Artur1992pl
    Poziom 9  
    Posty: 32
    Tak, dokładnie o to chodzi.
  • REKLAMA
  • Pomocny post
    #8 20559597
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    To jeszcze ten załącznik. Chodzi nie tylko o formułę, ale również o to w której komórce ona jest wpisana. Prawdopodobnie należy edytować formułę w wersji FormulaR1C1.
    Jeśli te adresy są zmienne i oprócz nich są w formule inne adresy, to musi być jakiś stały element formuły, na podstawie którego będzie można zidentyfikować ten adres, który ma być zmieniony.
  • #9 20559797
    Artur1992pl
    Poziom 9  
    Posty: 32
    Pliku nie mogę udostępnić, bo to z pracy.
    I tak dużo udało się pomóc, bo już wiem w jaki sposób mogę edytować funkcje przypisane do komórki.

    Jeszcze raz dziękuję
  • #10 20559821
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Jak sobie sam poradzisz, to O.K.
    Nie chodziło o udostępnianie oryginalnego pliku, tylko o przykładowy plik z formułą, którą chcesz poprawić i z identycznym układem danych.
    Wartości danych mogą być dowolne, byle liczby były liczbami, teksty tekstami, a daty datami.
  • #11 20567255
    Artur1992pl
    Poziom 9  
    Posty: 32
    Ze zaznaczonej komórki, pobieram sobie funkcje pod zmienna zma.

    zma = ActiveCell.FormulaR1C1

    Funkcja wygląda tak: 'IF(AND(RC[36]="",RC[37]=""),"",IF(RC[42]="","",IF(RC[42]="NG","Cpk NG",IF(RC[42]="OK","Cpk OK"))))

    w taki sposób przesunięcie komórki o dwa miejsca działa:
    Zmb = Replace(zma, "AND(RC[36]", "AND(RC[36]+2")

    Ale jeżeli nie chce mieć na sztywno makra to niestety nie działa.
    zmb = Replace(zma, "AND(RC[##]", "AND(RC[##]+2")

    Jakaś podpowiedź co robię źle?
    Już próbowałem używać * ? ~ i nic nie pomogło...
  • Pomocny post
    #12 20567362
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Tak jak to zapisałeś
    Cytat:
    Zmb = Replace(zma, "AND(RC[36]", "AND(RC[36]+2")
    to raczej nie będzie działać poprawnie. Gdyby był załącznik, to by było widać.

    Funkcja Replace nie obsługuje znaków zastępczych, więc w taki sposób jak proponujesz tego nie zrobisz.

    Istotne jest czy ta fraza "AND(RC[" występuje zawsze na początku formuły i czy zawsze tam będą 2 cyfry. Jeśli tak, to można obliczyć położenie tego miejsca (nr znaku) i wykonać odpowiednią poprawkę.

    Kod przykładowy z mojego załącznika - oryginalna formuła w B3, poprawiona w B4:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    Sprawdź, czy o to chodziło, bo bez załącznika to tylko domysły.
    Załączniki:
    • FormułaR1C1.xls (33.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #13 20567698
    Artur1992pl
    Poziom 9  
    Posty: 32
    Formuła zawsze będzie miała taką formę więc rozwiązanie się sprawdziło. Bardzo dziękuję.
  • #14 20567700
    Artur1992pl
    Poziom 9  
    Posty: 32
    Zastosowanie zasugerowanego rozwiązania

Podsumowanie tematu

✨ Użytkownik pyta o możliwość edytowania formuły w komórce za pomocą VBA, zmieniając warunek z B1>10 na C1>10. Odpowiedzi wskazują, że można to zrobić, edytując właściwość .Formula lub .FormulaR1C1. Użytkownik planuje zmiany w 200 plikach, w tym przesunięcie komórek o dwa miejsca w prawo. Wskazówki dotyczące użycia funkcji Replace oraz obliczania pozycji znaku w formule okazały się pomocne. Użytkownik z powodzeniem zastosował zaproponowane rozwiązania.
Wygenerowane przez model językowy.
REKLAMA