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 - zmiana zakresu danych w tabeli przestawnej

lili02103 22 Sty 2017 21:43 1269 11
  • #1 22 Sty 2017 21:43
    lili02103
    Poziom 4  

    Witam,

    W pracy wyciągam raport w Excelu zawierający 35 kolumn (A-AI) i zmienną liczbę wierszy. Stworzyłam plik w Excelu do analizy tych danych, tak więc jedna zakładka zawiera wklejone dane a kilka innych tabele i wykresy przestawne zrobione na ich podstawie. Ponieważ nie wszystkie kolumny z raportu są mi potrzebne, stworzyłam makro które:
    -usuwa duplikaty
    - usuwa niepotrzebne kolumny
    - aktualizuje wszystkie tabele przestawne

    Na koniec uzyskuje tabelę zawierającą 17 kolumn (od A do Q), będących podstawą dla tabel przestawnych. I tu mam problem.
    Jak tworzę tabelę przestawną, to mam zakres danych: 'Dane do analizy'!$A$1:$Q$229.
    Niestety po wrzuceniu nowych danych do zakładki i uruchomieniu makra, zmienia mi się zakres na 'Dane do analizy'!$A$1:$G$697.
    Dlaczego zakres danych tabeli się zmienia (pomija kolumny H-Q)?
    Makro wygląda następująco:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0 11
  • #2 23 Sty 2017 06:45
    JRV
    Specjalista - VBA, Excel

    Lepiej zrobić oddzielny arkusz dla danych tabeli przestawnej i ponownie skopiuj dane, które chcesz zamiast usuwania kolumn, które tabeli przestawnej pamięta się już w pamięci podręcznej

    0
  • #3 28 Sty 2017 19:49
    lili02103
    Poziom 4  

    Bardzo dziękuję. Tak zrobiłam i działa. Mam jeszcze jedno pytanie. Chciałabym za pomoca makra posortować dane, ale niestety pojawia mi się błąd. Mam tabelkę zawsze tak samo zbudowaną, natomiast akrusz, w której ona się znajduje ma różne nazwy. Próbowałam usunąć Worksheets("reporting 27.01"), zmieniałam ActiveWorkbook.Worksheets("reporting 27.01") na ThisWorkbook nic nie dała. Jak naprawić makro, tak żeby sorotowało dane w akruszu, w którym zostało włączone, nawet jeśli będą się zmieniać nazwy (reporting 27.01, reporting 28.01)?


    ActiveWorkbook.Worksheets("reporting 27.01").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("reporting 27.01").Sort.SortFields.Add Key:=Range( _
    "C2:C469"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
    With ActiveWorkbook.Worksheets("reporting 27.01").Sort
    .SetRange Range("A1:AI469")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply

    0
  • Pomocny post
    #4 28 Sty 2017 20:08
    JRV
    Specjalista - VBA, Excel

    zamiast ActiveWorkbook.Worksheets("reporting 27.01")
    naprosto ActiveSheet

    p.s. ThisWorkbook to caly skoroszyt, w którym makro

    0
  • #5 06 Lut 2017 20:30
    lili02103
    Poziom 4  

    Super, dziękuję. To jeszcze jedno pytanie. Chciałabym usunąć wszystkie spacje z kolumny AE. Ale mam błąd w poleceniu cell = Trim(cell) Jak to poprawić?

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #6 06 Lut 2017 20:41
    JRV
    Specjalista - VBA, Excel

    cell.text=trim(cell.text)

    0
  • #7 06 Lut 2017 21:02
    clubs
    Poziom 30  

    Lub

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    0
  • #8 07 Lut 2017 12:21
    lili02103
    Poziom 4  

    @JRV
    Mam błąd dotyczący linii cell.Text = Trim(cell.Text)
    Run time error „1004” Unable to set the text property of range class

    @clubs
    Mam błąd dotyczący linii .Value = Application.Trim(.Value)
    Run timer error “13” Type mismatch

    0
  • #9 07 Lut 2017 12:43
    JRV
    Specjalista - VBA, Excel

    zmien
    For Each cell In Columns("AE")
    na
    For Each cell In Columns("AE").cells

    0
  • Pomocny post
    #10 07 Lut 2017 13:56
    clubs
    Poziom 30  

    Lub

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    0
  • #11 07 Lut 2017 18:06
    lili02103
    Poziom 4  

    clubs napisał:
    Lub

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Dziękuje Wam obu, ale działa tylko powyższe makro.

    0
  • #12 08 Lut 2017 12:34
    clubs
    Poziom 30  

    Witam

    To też zadziała ale w tej postaci

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Nie wiem tylko dlaczego odwołujesz się do całej kolumny AE gdzie przy excelu 2010 jest 1048576 wierszy i makro musi "przemielić" cały zakres lepiej ustawić konkretny zakres lub użyty zakres wtedy makro będzie działało dużo szybciej

    0