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.

makro - excel - specyficzne łączenie wierszy

Cholasek 20 Lut 2013 22:02 3153 9
  • #1 20 Lut 2013 22:02
    Cholasek
    Poziom 6  

    Witam. Chciałbym sobie znacznie przyspieszyć pracę w biurze, ale niestety jestem strasznie kiepski w VBA.
    Potrzebuję makro które to miałoby w arkuszu "Produkcja" łączyć "te same wiersze". Jeśli w danych dwóch wierszach odpowiednio w kolumnach od 'A' do 'H' oraz 'K' są te same wartości to ma ono połączyć wartości w kolumnie 'I' oraz 'J'. Ale ma łączyć je w specyficzny sposób.
    W kolumnie "I" są odnośniki do komórek z innych arkuszy. Te odnośniki trzeba scalić. np. Mamy 4 wiersze do połączenia. W tych wierszach w kolumnach "I" i "J" następujące wartości:

    kolejno w komórce "I":

    ='ASALI 1 FOTEL'!J7
    ='ASALI -2 SOFA'!J7
    ='ASALI 2- SOFA'!J7
    ='ASALI -1,5F'!J15

    kolejno w komórce "J":

    ASALI 1
    ASALI -2
    ASALI 2-
    ASALI -1,5F


    po scaleniu ma powstać z 4 wierszy 1 o wartościach:

    w kolumnie "I"

    ='ASALI 1 FOTEL'!J7+'ASALI -2 SOFA'!J7+'ASALI 2- SOFA'!J7+'ASALI -1,5F'!J15

    w kolumnie "J"

    ASALI 1 | ASALI -2 | ASALI 2- | ASALI -1,5F

    Oczywiście kolumny od "A" do "H" oraz "K" mają posiadać poprzednie wartości.

    Fajnie by było gdyby wiersze które chcemy, by makro porównało i ewentualnie połączyło, można by było wybrać(zaznaczyć), ponieważ za każdym razem ilość wierszy jest inna.

    Załączam przykładowy plik. (W arkuszu "Produkcja" zaznaczyłem na żółto przykładowe wiersze do scalenia)

    0 9
  • #2 23 Lut 2013 19:24
    Cholasek
    Poziom 6  

    Widzę, że zadałem dość skomplikowane pytanie. :/

    Wie może ktoś, jak zrobić chociaż ten krok ze zmianą zawartości komórki "I"? W sensie zaznaczam sobie te komórki, a makro kopiuje mi do pierwszej zaznaczonej komórki, zawartość pozostałych (zaznaczonych), wstawiając pomiędzy "+".

    Nigdzie nie mogę znaleźć jak to zrobić. :(

    0
  • Pomocny post
    #3 23 Lut 2013 22:30
    adamas_nt
    Moderator Programowanie

    Pytanie zrozumiałe. To zwykła suma liczb, więc w czym problem? Osobiście nie bawiłbym się w składanie formuły. Wystarczy zostawić jeden wiersz, pozostałe usunąć i wpisać sumę...

    Jeśli jednak składniki ulegają zmianie. Zamiast "+" użyj ActiveCell.Formula = "=SUM(arg1,arg2,...)" Gdzie prawa strona równania jest typu string, więc łatwo poskładać.

    0
  • Pomocny post
    #4 23 Lut 2013 22:48
    marcinj12
    Poziom 40  

    Piszesz, że ma scalać wiersze, jeżeli wartości w kolumnach A:H oraz K są takie same, a w przykładzie: w 6 wierszu wartość w kolumnie A jest inna, a w 3 wierszu: w kolumnie G - mimo to zaznaczyłeś je na żółto.
    To jak to w końcu jest??

    Czy scalanie dotyczy tylko jednej tabeli, czy wszystkich?
    Czy one mają stałą długość, czy się zmieniają?
    Czy wiersze zawsze są posortowane tak, że zawsze scalasz sąsiadujące wiersza?
    Czy po scaleniu chcesz usunąć pozostałe wiersze w arkuszu PRODUKCJA, czy wyniki tego scalania umieścić w innym arkuszu?

    0
  • Pomocny post
    #5 23 Lut 2013 22:56
    adamas_nt
    Moderator Programowanie

    marcinj12 napisał:
    jest inna, a w 3 wierszu: w kolumnie G - mimo to zaznaczyłeś je na żółto
    O! No właśnie :) To samo w wierszach 9:12, etc...

    0
  • #6 24 Lut 2013 17:19
    Cholasek
    Poziom 6  

    Przepraszam, przez roztargnienie trochę namieszałem.
    Wartości muszą być takie same w kolumnach od "B" do "F" oraz "H" oraz "K". W kolumnie "A" jest liczba porządkowa (czyli nieważna w tym przypadku), a w kolumnie "G" - liczba sztuk na komplet, co w liście produkcyjnej jest również mało znaczące.

    marcinj12 napisał:
    Czy scalanie dotyczy tylko jednej tabeli, czy wszystkich?

    Przez "scalenie" miałem na myśli połączenie formuł w przypadku kolumny "I" oraz wartości w przypadku kolumny "J" wg w/w wzoru (pomyliłem pojęcia).

    "Scalanie" dotyczy tylko tabel w arkuszu "Produkcja". W tym przypadku są to dwie tabele nazwane "Programy" oraz "Paski". Często pojawiają się też identyczne tabele "Siedziska" oraz "Kasetony". Znajdują się one (tak jak w tym przypadku) jedna pod drugą.

    marcinj12 napisał:
    Czy one mają stałą długość, czy się zmieniają?


    Tabele zmieniają swoją długość, zależności od tego ile jest modułów (pozostałych arkuszy z których najpierw kopiuję pozycje) oraz ile pozycji jest w danym module.

    marcinj12 napisał:
    Czy wiersze zawsze są posortowane tak, że zawsze scalasz sąsiadujące wiersza?


    Tu sprawa wygląda tak:
    - kopiuję wszystkie pozycje z każdego modulu (z pozostałych arkuszy)
    - w kolumnie "I" nadaję odnośnik do każdej pozycji (do miejsca z którego go skopiowałem)
    -następnie sortuję wszystkie pozycje:
    --"Program" od A do Z
    --"Pianka" od A do Z
    --"GR" od największej do najmniejszej
    --"Długość" od największej do najmniejszej
    --"Szerokość" od największej do najmniejszej
    -tym sposobem oddzielilem paski od programów, następnie wycinam paski i wklejam je do tabeli "paski", a potem sortuję "programy" jeszcze raz:
    --"Pianka" od A do Z
    --"Program" od A do Z
    --"GR" od największej do najmniejszej
    --"Długość" od największej do najmniejszej
    --"Szerokość" od największej do najmniejszej
    -w tym momencie mam sytuację taką jak w pliku który załączyłem
    -następnie łączyłem takie same pozycje, tj. kopiowalem formuły/wartości w kolumnach "I" oraz "J" w/w wzoru do pierwszego wiersza, a następnie usuwałem pozostałe wiersze (co zajmuje zazwyczaj nawet 3 dni)

    marcinj12 napisał:
    Czy po scaleniu chcesz usunąć pozostałe wiersze w arkuszu PRODUKCJA, czy wyniki tego scalania umieścić w innym arkuszu?


    Tak, pozostałe wiersze chcę usunąć. Wynik "scalenia" pozostaje w tym arkuszu.

    adamas_nt napisał:
    Jeśli jednak składniki ulegają zmianie. Zamiast "+" użyj ActiveCell.Formula = "=SUM(arg1,arg2,...)" Gdzie prawa strona równania jest typu string, więc łatwo poskładać.


    Wartości ulegają zmianie. Odnośniki prowadzą do pozostałych arkuszy, których są poszczególne moduły (jeden arkusz to jeden moduł). W każdym module w komórce "J1" wpisuję ilość zamówionych kpl, a na podstawie tego w kolumnie "J" zmienia się ilość poszczególnych pozycji, które to są przesyłane do arkusza "Produkcja"

    Jeszcze raz przepraszam, że zamieszałem i dziękuję za każdą pomoc.

    0
  • Pomocny post
    #7 24 Lut 2013 20:18
    marcinj12
    Poziom 40  

    Cholasek napisał:
    Wartości muszą być takie same w kolumnach od "B" do "F" oraz "H" oraz "K".
    Ponownie stawiam to stwierdzenie pod znakiem zapytania...
    Uwagi, jak rozumiem, są opisem pomocniczym, czy np. wiersze 66:68 powinny zostać scalone, skoro są prawie takie same za wyjątkiem opisu w kolumnie H?

    Natomiast "element" masz wpisany np. raz dużymi, raz małymi literami.
    Przykładowo: czy wiersze 27:29 powinny zostać scalone, skoro w kolumnie K nazwa jest raz dużą, raz małą literą??
    Albo, na logikę biorąc, czy BOK PODŁOKIETNIKA to to samo co podłokietnik bok ??

    0
  • #8 24 Lut 2013 21:28
    Cholasek
    Poziom 6  

    marcinj12 napisał:

    Cholasek napisał:
    Wartości muszą być takie same w kolumnach od "B" do "F" oraz "H" oraz "K".
    Ponownie stawiam to stwierdzenie pod znakiem zapytania...
    Uwagi, jak rozumiem, są opisem pomocniczym, czy np. wiersze 66:68 powinny zostać scalone, skoro są prawie takie same za wyjątkiem opisu w kolumnie H?


    Niestety kolumna H jest ważna.
    Teoretycznie są to te same elementy, ale niektóre są dodatkowo fazowane, docinane, zaoblane lub też osoba wycinająca na maszynie CNC musi wiedzieć ile ma wyciąć elementów Lewy, a ile Prawy.
    Tak naprawdę, w przypadku gdy element jest Lewy lub Prawy łącze te pozycję, ale od razu tworzę w kolumnie "H" funkcję zliczającą ile ma być Lewych, a ile Prawych. Niestety w tej kolumnie bywa zbyt dużo rodzajów różnych opisów by zawierać je w makrze.

    marcinj12 napisał:
    Natomiast "element" masz wpisany np. raz dużymi, raz małymi literami.
    Przykładowo: czy wiersze 27:29 powinny zostać scalone, skoro w kolumnie K nazwa jest raz dużą, raz małą literą??


    Duże i małe litery nie mają żadnego znaczenia.
    Błąd ten powstał na skutek wpisywania do dokumentacji różnych modułów, w różnym czasie. Niestety dokumentację zawsze robi się "na wczoraj" i nie zauważa się czasami takich detali.

    marcinj12 napisał:
    Albo, na logikę biorąc, czy BOK PODŁOKIETNIKA to to samo co podłokietnik bok ??


    Masz rację, na logikę biorąc BOK PODŁOKIETNIKA to to samo co podłokietnik bok, ale jak widać niekoniecznie. Dokumentację dostaję od klienta, na jej podstawie tworzę swoją (często nie widząc mebla). Jeśli dla klienta to nie jest to samo, to niestety ja też to tak muszę traktować.

    Zazwyczaj takie same pozycje, są tym samym elementem (tzn. wartość w kolumnie "H" jest taka sama) jeśli jest inna, zazwyczaj znaczy to, że gdzieś jest błąd.
    Jeśli po sprawdzeniu dokumentacji okazuje się, że błędu nie ma, wpisuję zawartość w tej komórce w taki sam sposób jak w komórce "J" (np. siedzisko | siedzisko boczne | siedzisko środkowe).

    0
  • Pomocny post
    #9 24 Lut 2013 22:05
    marcinj12
    Poziom 40  

    "Zapomniałeś"dodać, że w kolumnie B też się mogą zdarzyć "wypadki", że ten sam tekst będzie pisany raz dużą, raz małą literą...
    Niemniej tak na szybko udało mi się takie coś naskrobać, jak w załączniku. Sprawdź sobie czy działa...
    PS. Gdybyś kiedyś szukał kogoś do stworzenia za rozsądne pieniądze porządnie takiego arkusza planistycznego - polecam swoje usługi ;) Myślę że sporo rzeczy można tam jeszcze poprawić / zautomatyzować...

    1
  • #10 24 Lut 2013 22:44
    Cholasek
    Poziom 6  

    Sprawdziłem tak na szybko - wydaje mi się, że wszystko działa.

    Dzięki wielkie! Naprawdę mi pomogłeś i przyspieszyłeś znacznie moją pracę :D

    Na pewno będę o Tobie pamiętał.

    0