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

VBA przenosi wartość z formuły do kolejnej kolumny

Crystian12 11 Paź 2012 15:02 2937 8
REKLAMA
  • #1 11400594
    Crystian12
    Poziom 9  
    Posty: 6
    Witam siedzę już drugi dzień nad tą formuła i dalej nie widzę rozwiązania. Chodzi mi o to żeby przenosiło wynik z formuły do np. sąsiedniej kolumny(zwracało w postaci wartości). Dobrze byłoby gdyby każdy kolejny wynik przeliczenia formuły przenosiło do kolejnej kolumny (n+1). Do tej pory udało mi się ustalić następujący kod:




    Dim tmp

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 4 Then
    Target.Offset(0, 1 + n).Formula = tmp
    n = n + 1
    End If

    End Sub

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    tmp = Target.Value
    End Sub

    Zwraca mi wynik z poprzedniej wartość ale gdy zamiast wartości podstawiam formułę nie ma efektu.
  • REKLAMA
  • #2 11400688
    pitermxa
    Poziom 18  
    Posty: 248
    Pomógł: 25
    Ocena: 15
    np dla kolumny A będzie to tak:
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    Target.Offset(0, 1).Value = Target.Value
    End If
    Application.EnableEvents = True
    End Sub
    
  • REKLAMA
  • #3 11401453
    Crystian12
    Poziom 9  
    Posty: 6
    Bardzo dziękuje za szybką i treściwą odpowiedź. Zauważyłem jednak, że gdy zmieniam dane, z których kolumna A pobiera dane do przeliczenia przy drugim wprowadzeniu danych, w samej kolumnie A otrzymuje prawidłowy wynik, natomiast w kolumnie B cały czas jest wynik z pierwszego przeliczenia.

    Na załączonym arkuszu mam nadzieje, że uda mi się lepiej omówić problem. Zależy mi aby za każdym razem kiedy zmienię dane w kolumnach wsadowych C i D, wartość przeliczenia kolumnę E zwracało np. do kolumny G, a każde kolejne podstawienie danych wsadowych przenosiło wartość z kolumny E do następnej kolumny (G+1,G+2,...,G+n). Dobrze by było gdyby zwracało również datę z przeliczenia. Najlepiej gdyby przeniesienie danych nie odbywało się automatycznie tylko za pomocą skrótu klawiszowego.
    Załączniki:
    • VBA przenoszenie wartości do kolejnej kolumny.xls (32.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • Pomocny post
    #4 11403020
    pitermxa
    Poziom 18  
    Posty: 248
    Pomógł: 25
    Ocena: 15
    Jeżeli dobrze wszystko rozumiem, to wszystko wydaje się być prostsze niż na początku to opisywałeś.
    Otóż w nowym module wklejasz to:
    
    Sub kopiuj()
    ActiveSheet.Range("E:E").Copy
    ActiveSheet.Range("G:G").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    End Sub
    

    Skrót klawiszowy ustawisz sobie w menu "Makra" klikasz na swoje makro i naciskasz w menu "opcje" tam ustawiasz skrót klawiszowy.
    Warto problem opisać od początku do końca tak jak ma być, bo tak to podwójna robota.
  • REKLAMA
  • #5 11403152
    Crystian12
    Poziom 9  
    Posty: 6
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Kod jest jak najbardziej poprawny, tylko identyczne rozwiązanie dostane przy zastosowaniu makra. Mi natomiast najbardziej zależy aby każde kolejne naciśnięcie skrótu klawiszowego crtl+a przenosiło o jedną kolumnę dalej ("G:G"+1,"G:G"+2,..."G:G"+n), czy jest możliwe zastosowanie takiego ciągu??
  • Pomocny post
    #6 11403582
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    Dodaj zmienna globalną i za każdym razem ją powiększaj
    (zwróć uwage gdzie jest deklaracja zmiennej "i" - to ważne)

    Dim i As Integer
    
    Sub kopiowanie()
    i = i + 1
    ActiveSheet.Columns(5).Copy
    ActiveSheet.Columns(6 + i).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    
    End Sub
  • #7 11410223
    Crystian12
    Poziom 9  
    Posty: 6
    Skonstruowałem następujący kod niestety wciąż nie wiem jak rozwiązać problem aby przy naciśnięciu skrótu Ctrl+Shift+A przenosiło wartość tylko o jedną kolumnę, a nie od kolumny 7 do 106.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #8 11413051
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    Ale nic się nie uczysz. :( i nie czytasz ze zrozumieniem.

    Jeszcze raz zaznaczę: musisz ustawić zmienną globalną która będzie pamiętana poza działającą procedurą.
    Zwróć uwagę gdzie jest deklaracja zmiennej "i" w moim kodzie a gdzie w twoim. (gdzie jest deklaracja a gdzie początek procedury)


    Cytat:
    ... aby przy naciśnięciu skrótu Ctrl+Shift+A przenosiło wartość tylko o jedną kolumnę, a nie od kolumny 7 do 106.


    To po co wprowadziłeś do kodu pętlę FOR robiącą 100 obrotów za każdym razem zmieniając wartość zmiennej "i" o jeden?
    Tak jak napisałeś tak się procedura wykonuje.

    Wklej mój kod do modułu i przypisz mu (poprzez menu makr) skrót klawiszowy i sprawdź jak działa.

    Pozostaje jedna kwestia:
    W przypadku mojego kodu numer kolumny jest pamiętany tylko do momentu zamknięcia arkusza excelowskiego.
    Jeżeli go ponownie otworzysz znów zacznie liczyć od 1

    Jeżeli wklejenie do odpowiedniej kolumny miało by być pamiętane po ponownym włączeniu skoroszytu, czyli skopiowałeś już do 50 kolumny zamykasz zeszyt a w następnym dniu otwierasz go ponownie i chcesz kopiować dalej już od 51 kolumny itd., trzeba wartość zmiennej "i" zapisywać do którejś komórki (np w dodatkowym arkuszu "Pomoc"). Czyli trzebaby było zmienić kod makra.
    Wtedy zmienna nie musiałaby być globalna, ale jej wartość musiała by być gdzieś przetrzymywana. Najlepiej tak jak pisałem w dodatkowym arkuszu pomocniczym (lub pomocniczej komórce w aktualnych arkuszach - taka komórka celu).
  • #9 11416449
    Crystian12
    Poziom 9  
    Posty: 6
    Faktycznie stosując zmienna globalną poza procedurą otrzymuje zadowalający mnie efekt.

    Bardzo dziękuje za pomoc.

Podsumowanie tematu

✨ Użytkownik poszukiwał rozwiązania problemu przenoszenia wartości z formuły w Excelu do kolejnej kolumny. Początkowo próbował użyć kodu VBA, który przenosił wartość z kolumny A do B, ale napotkał trudności przy aktualizacji wartości po zmianie danych. W odpowiedzi zaproponowano różne podejścia, w tym użycie makra do kopiowania wartości z kolumny E do G oraz dodanie zmiennej globalnej, aby śledzić, do której kolumny przenoszone są dane. Ostatecznie użytkownik uzyskał zadowalający efekt, implementując zmienną globalną, co pozwoliło na przenoszenie wartości do kolejnych kolumn przy użyciu skrótu klawiszowego.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA