Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel VBA -odczytanie komórki, zamiana i zapis

AJOT74 30 Gru 2010 16:17 7134 5
  • #1 30 Gru 2010 16:17
    AJOT74
    Poziom 10  

    Mam funkcję "worksheet_change" i zmieniam wartość w Arkuszu 1 w dowolnym polu. Następuje wywołanie funkcji "worksheet_change" i rusza makro.
    Niestety rusza makro które wykonuje operację dla ponad 1000 komórek.
    Mam pytanie, czy da się odczytać w VBA w jakiej komórce została zmieniona wartość (czyli położenie komórki w arkuszu, następnie wartość wpisaną do tej komórki). Chodzi mi dokładnie o coś takiego:

    W Arkuszu1 zmieniono jakąć komórkę.
    Makro odczytuje położenie komórki, oblicza nowe położenie.
    Makro odczytuje zapis z komórki i oblicza inną wartość.
    Makro zapisuje nową wartość w innym położeniu w Arkuszu2.

    0 5
  • #2 30 Gru 2010 18:22
    adamas_nt
    Moderator Programowanie

    Może offsetem go. Np

    Code:
    Sheets("Arkusz2").Range(Target.Address).Offset(1, 1) = Target +1
    Wpisuje wartość aktywnej komórki powiększoną o 1 do "Arkusz2" w komórkę o jeden wiersz w dół i jedną kolumnę w lewo...

    0
  • #3 30 Gru 2010 18:46
    AJOT74
    Poziom 10  

    adamas_nt napisał:
    Może offsetem go. Np
    Code:
    Sheets("Arkusz2").Range(Target.Address).Offset(1, 1) = Target +1
    Wpisuje wartość aktywnej komórki powiększoną o 1 do "Arkusz2" w komórkę o jeden wiersz w dół i jedną kolumnę w lewo...


    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Sheets("Arkusz2").Range(Target.Address).Offset(1, 1) = Target + 1
    End Sub

    Działa pięknie, ale trzeba by to rozwinąć gdyż w Akuszu1 np. wpisuję literę "A" -odpowiedź na Arkuszu2 powinna być "8" np. wpisuję "B" a odpowiedź powinna być "U". Patrząc na tą funkcję niewiem gdzie użyć jakiejś funkcji If_Else czy Case.

    0
  • #4 30 Gru 2010 19:26
    adamas_nt
    Moderator Programowanie

    Eee tam, wiesz, tylko pewnie myślisz już o Sylwestrze :)

    Code:
    Select Case Target
    
      Case "A": Sheets("Arkusz5").Range(Target.Address).Offset(1, 1) = "8"
      Case "B": Sheets("Arkusz5").Range(Target.Address).Offset(1, 1) = "U"
    End Select

    0
  • #5 30 Gru 2010 20:16
    AJOT74
    Poziom 10  

    HA HA HA...
    Tydzień dopero w VBA a nie sylwester...

    Jeszcze może mi podpowiesz bo przesunięcie o 1 umiem zmienić na 2 czy 3 i inaczej, ale chodzi mi o to, że część arkuszu będzie czytana i zapisywana:

    Arkusz1 A1 > Arkusz2 C3
    Arkusz1 A2 > Arkusz2 C4
    Arkusz1 A3 > Arkusz2 C5
    Arkusz1 A4 > Arkusz2 C6

    a dalsza część"

    Arkusz1 A5 > Arkusz2 D7
    Arkusz1 A6 > Arkusz2 D8
    Arkusz1 A7 > Arkusz2 D9
    Arkusz1 A8 > Arkusz2 D10

    Jak to opisać aby ominąć pętle?

    0
  • #6 30 Gru 2010 21:15
    adamas_nt
    Moderator Programowanie

    Może jeszcze jeden Select. Np

    Code:
    Select Case Target.Row
    
      Case 1 To 4: k = 2
      Case 5 To 8: k = 3
    End Select
    Select Case Target
      Case "A": Sheets("Arkusz2").Range(Target.Address).Offset(2, k) = "8"
      Case "B": Sheets("Arkusz2").Range(Target.Address).Offset(2, k) = "U"
    End Select

    0