Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

EXCEL - funkcja lub makro

robert55555 12 Feb 2016 17:24 1635 18
  • #1
    robert55555
    Level 7  
    Do kolegów i koleżanek zwracam z prośbą o pomoc.
    Exel 2010 jaki używam.

    Mam zeszyt o nazwie "Wzor program do składnic". W tym zeszycie są arkusze o następujących nazwach: "Informacja", "DANE", "ZASTĄP", "SCALANIE", "DATY_SKRAJNE", "SPIS".

    W tych arkuszach znajduje się wiele funkcji, które miały mi pomóc w uzyskaniu efektu jaki znajduje się w arkuszu "SPIS".

    Efekt uzyskałem nie do końca zadawalający.
    W arkuszu "SPIS" mam następujące problemy, które raczej nie uzyskam za pomocą funkcji w exelu, lub nie znam takich funkcji.

    Wyjaśnienia problemów:
    W arkuszu "SPIS" w kolumnie C nazwiska i imiona powinny być pogrubione i wyśrodkowane, pozostałe dane jakie wsytępują w zależności od komórki w kolumnie C, mam tu na myśli "Wniosek o przyznanie płatności w ramach systemów wsparcia bezpośredniego" i/lub "Wniosek o przyznanie płatności z tytułu obszarów o nie korzystnych warunkach gospodarowania(ONW)" i /lub "Wniosek dotyczący programu rolnośrodowiskowego" - Powinny zaczynać od brzegu danej komórki.
    W przypadku jak mam taki tekst w jakieś komórce kolumny C " Kontynuacja wniosku PRS rozpoczętego w 2010 roku, który został zarchiwizowany syg.akt: 17/251" powinnien być również pogrubiony.(przykład arkusz"WZOR_SPIS, przykład dla komórek C21:c25)

    Następny problem do arkusza "SPIS". Jak można zrobić by wysokość wiersza dopasowała się do zawartości jaka występuje w danej komórce.

    Następny problem jaki mam dotyczy arkusza o nazwie "DATY_SKRAJNE" w kolumnie G: dla znaku spraw PRŚ (jest to kontunuacja/10/ oznacza kiedy rozpoczeło się zobowiązanie) 0111-69110-0111-00000001/10/13
    nie wiem jaki sposób mogę wyciągnąć 10 i w następnej koumnie J powinno być 2010. Wyjaśnienie jest do komórki G4 i 2010 powinno być w J4.
    Problem z funckja to nie jest ale w tej kolumnie mam np znak sprawy 0111-69110-0111-00000002/13 i jak zastosuje funkcje to mi dane wytnie, których nie potrzebuje.
    Jesli w kolumnie G fragment tekstu znaku sprawy jest /09/ w odpowiedniejkomórce kolumny J wstawia 2009, /11/ wstawia 2011. /12/ wstawia 2013.

    Jak ma to wszystko działać-wyjaśnienia.
    W arkuszu "DANE" w kolumnie A wklejam ok 20000 nazwisk, w kolumnie B wklejam ok 20000 znaków spraw, w klumnie C wklejam około 19000 znaków, w kolumnie D wklejam około 10000.(w tym 3000 jest kontynuacji, reszta rozpoczynaw 2013 roku swoje zobowiązanie.) i momencie wklejenia za pomocą funckji mam uzyskać efekt w arkuszu "SPIS" z tym ze strona do wydruku dostosowuje do ilości danych.

    W arkuszu "DATY_SKRAJNE" dane do kolumn B, D, E, I musze ręcznie wpisać lub wkleic z innego exela jak będe miał komplet danych.

    W arkuszu "SPIS_WZOR" dałem wzor wyjasnienia. Ma pokażać o co mi chodziło.

    Nie wiem czy nie łatwiej napisać makro, które da ten sam efekt z pominięciem funkcji? Tego nie wiem, nie znam się na VBA.

    Przepraszam, za długie tłumaczenie i czasami zawiłe(niezrozumiałe) dla kolegów i koleżanek. Efekt jaki uzyskałem można było uzyskać "angażująć mniej funkcji" sorki za określenie lub też w łatwiejszy sposób.

    Dodano po 16 [minuty]:

    Prosze w arkuszu "DANE" w zmienić imie i nazwisko, zmienić znak sprawy w komórce B3, wpisać znak inny w komórce C3 i dla komórkiD3(np wpisać 0222-69110-0222-00000005/11/13. Zobaczyć jak wszystko się zmienia. Efekt uzyskany w arkuszu "SPIS".
    Ethernet jednoparowy (SPE) - rozwiązania w przemyśle. Szkolenie 29.09.2021r. g. 11.00 Zarejestruj się za darmo
  • #2
    Zbych034
    Level 38  
    Załącz to co masz (część danych możesz zmienić na fikcyjne), inaczej ciężko będzie pomóc.
  • #3
    robert55555
    Level 7  
    Dziekuje za opisanie. Nie jestem wstanie wstawic wszystkich danych. Dane są w pracy. Poza tym nie wymysle tyle fikcyjnych danych. Zarys danych jest jak ma wyglądać, tylko zwiększy się ilość tych danych. Te dane są wymyślone. Ogólny schemat przedstawiłem w zalaczniku podpiętym.
  • #4
    robert55555
    Level 7  
    Wypełniłem Arkusz "dane". tyle ile mniej wiecej powinno być danych. 99% danych takie same, ale tu nie oto mi chodzi. Kolega Zbych034 miał do mnie taka prośbę.
  • #5
    adamas_nt
    Moderator of Programming
    robert55555 wrote:
    Ogólny schemat przedstawiłem w zalaczniku podpiętym
    A gdzie ten załącznik? Plik wersji >2003 załącz spakowany (zip/rar)
  • #6
    Zbych034
    Level 38  
    Też nie widzę załącznika :cry:
  • #7
    robert55555
    Level 7  
    Nawaliłem koledzy i za to przepraszam. Jestem od cięty od koma ma ponad tydzień. Albo wysle spakowany jak kolega adamas_net napisał w terminie późniejszym chyba ze mi wcześniej kompa naprawia. W arkuszu "Daty skrajne" wiem jak wyciagnac /10/ z tego, za pomocą funkcji, czyli ten problem zostal rozwiązany.
    Ogólnie problem z którym nie poradze to makro, do arkusza "SPIS" które dostosowuje wysokosc komorki do zawartości tekstu jaka w niej znajduje. Jak makro powinno dostosować jest w arkuszu "WZOR SPIS". Nazwisko i imie ma byc pogrubiona czcionka i wyśrodkowane, i jak jest tekst "Kontynuacja wniosku PRS rozpoczętego(jest jakiś rok) który zostal zarchiwizowany syg.akt:(tu podana jest jakas sygnatura)" tylko pogrubiony tekst.(o co mi chodzi jest w arkuszu"Wzor_spis", tam żeby pogrubić tekst i wyśrodkować zrobilem w oddzielnych komórkach, inaczej bym tego w exelu nie zrobil).

    I z tym mam problem. Nie wiem czy mozna cos takiego zrobić za pomocą funkcji exela? Czy potrzebne jest makro. Czytalem ze makrem mozna ale żeby komorki nie byly scalone. Dlatego tak wszystkie dane są w jednej komórce i przez to nie mogę pogrubić i wyśrodkować określonego tekstu. Nie wiem czy jasno napisalem.

    Dodano po 6 [minuty]:

    Czy nie będzie latwiej z makrem, które robi to wszystko co ja zrobilem za pomocą funkcji. Dla mnie to moze i lepiej by bylo. Najwazniejszy jest końcowy rezultat. Jak są pytania to odpowiem. Pisze ze smatfona.

    Dodano po 23 [minuty]:

    Nie wiem jak sie to stalo ze wogole nie ma załącznika

    Dodano po 2 [godziny] 19 [minuty]:

    wysyłam załącznik
  • #8
    robert55555
    Level 7  
    Zalacznik w końcu wyslany. Nie ma w nim arkusza "wzor_spis". Myślę ze tyle co napisalem będzie jasne, jak nie to odpowiem na pytania. Sorki za zamieszanie.
  • #9
    robert55555
    Level 7  
    Jakiś pomysl jak mozna rozwiazac mój problem?
  • #10
    marcinj12
    Level 40  
    robert55555 wrote:
    Exel 2010 jaki używam.
    Dlaczego zatem zapisujesz w formacie Open Office: .ods, nie w .xlsx?
    robert55555 wrote:
    W tych arkuszach znajduje się wiele funkcji, które miały mi pomóc w uzyskaniu efektu jaki znajduje się w arkuszu "SPIS".
    W załączniku nie znalazłem ani jednej funkcji, tylko sam tekst. Załącz taki plik, gdzie będą funkcje.
  • #12
    marcinj12
    Level 40  
    robert55555 wrote:
    W arkuszu "SPIS" w kolumnie C nazwiska i imiona powinny być pogrubione i wyśrodkowane
    Tego nie da się osiągnąć w rozsądny (czyt. szybki, prosty) sposób. Można za pomocą VBA uzyskać pogrubienie fragmentu tekstu w komórce, ale wycentrować można całą komórkę, nie jej fragment.
    Można ewentualnie próbować uzyskać pseudo-wyśrodkowanie, dostawiając pewną ilość spacji z przodu, ale to po pierwsze - wymusza ustaloną szerokość kolumny, a po drugie - zależy od rozmiaru i rodziny czcionki. A nawet wtedy będzie to przybliżone wycentrownanie, gdyż każda litera ma inną szerokość.
    Nie możesz po prostu rozbić jednego wpisu na kilka wierszy? Poscalać co potrzeba, a w tym opisie zostawić jedną komórkę na tekst przed nazwiskiem, drugą - wyśrodkowaną i pogrubioną - na nazwisko, a trzecią na tekst po nazwisku?
    robert55555 wrote:
    Jak można zrobić by wysokość wiersza dopasowała się do zawartości jaka występuje w danej komórce.
    Zwykle wystarczy podwójne kliknięcie w miejscu separatora oddzielającym dwa kolejne wiersze - przy lewym marginesie, gdzie znajdują się numery wierszy, np. między 19 a 20. Kursor zmienia wtedy symbol na kreseczkę z dwoma strzałeczkami w gorę i w dół. Można też zaznaczyć kilka wierszy czy nawet wszystkie i wykonać to dla wszystkich zaznaczonych wierszy jednocześnie. W VBA jest do tego funkcja Rows(x).AutoFit.
    Ale żeby to działało, nie możesz mieć scalonych kolumn, tak jak to (zupełnie niepotrzebnie) zrobiłeś z kolumnami C:G. Czemu po prostu nie rozszerzyłeś kolumny C?
    robert55555 wrote:
    nie wiem jaki sposób mogę wyciągnąć 10 i w następnej koumnie J powinno być 2010.
    Za pomocą funkcji: w komórkę H4:
    Code: vbscript
    Log in, to see the code
  • #13
    robert55555
    Level 7  
    Wiem jak wyciagnac/10/ za pomocą funkcji jeżeli. Liczy ilość znaków.(>28znakow ) i wyciągnę. Dlaczego w arkuszu"spis" czytalem ze jak bym poscalal komorki to podobno sie nie da. Myslalem na tym ze kazdy tekst jest w swojej komórce, wtedy będę mógl pogrubić nazwisko i imie i wyśrodkować, pogrubić tekst"kontynuacja..". To by pomoglo. Ale jak będę chcial rozciągnąć cala zawartość w arkuszu"spis" jaka jest w Np pod liczba porządkowa 1 to mi funkcja będzie przeskakiwala o kazda komórkę. Nie wiem czy moja wypowiedź jest dla kolegi jasna.

    Dodano po 10 [minuty]:

    Kolumny C w arkuszu"spis" nie moglem rozszerzyć bo takim mam wzor jaki mnie obowiązuje. Pytałem czy taki wzor jaki zrobilem moze zostać, przełożeni odpowiedzieli ze nie. Nazwisko ma byc pogrubione i wyśrodkowane.
  • #14
    marcinj12
    Level 40  
    robert55555 wrote:
    Najwazniejszy jest końcowy rezultat.
    vs
    robert55555 wrote:
    Pytałem czy taki wzor jaki zrobilem moze zostać, przełożeni odpowiedzieli ze nie. Nazwisko ma byc pogrubione i wyśrodkowane.
    To co w końcu jest ważniejsze?
    robert55555 wrote:
    Nazwisko ma byc pogrubione i wyśrodkowane.
    Najlepsze rozwiązanie już znasz - wstawić je w osobnym wierszu.
    robert55555 wrote:
    Ale jak będę chcial rozciągnąć cala zawartość w arkuszu"spis" jaka jest w Np pod liczba porządkowa 1 to mi funkcja będzie przeskakiwala o kazda komórkę.
    Zakłądając, że jeden "wiersz" rozbijesz na trzy wiersze, to zamiast przeciągać liczbę porządkową, wstaw w pierwszym wierszu 1, a w kolejnym formułę: = poprzednia_komórka + 1 i przeciągaj formułę. Potem możesz ją skopiować zastąpić wartościami.

    Jeśli chodzi o zwykłe formuły, to też można je przerobić tak, żeby dały się przeciągać. Widzę, że odwołujesz się do kolejnych numerów wierszy - można je skorelować z Lp i zamiast odwoływać się np. =DANE!B4 użyć funkcji ADR.POŚR do stworzenia odwołania do komórki: =ADR.POŚR("DANE!B" & A23), gdzie w A23 jest akurat Lp = 4
    Choć wymaga to trochę pracy, żeby każdy adres tak przerobić...

    PS. Zamiast wstawiać kilkanaście spacji w celu uzyskania efektu "przejścia" do kolejnej linii, lepiej użyć w złączeniu funkcji ZNAK(10).
  • #15
    robert55555
    Level 7  
    Piszac najwazniejszy jest efekt końcowy mialem na myśli zrobienie za pomocą funkcji lub makra, tak jak chcą przelozeni
  • #16
    robert55555
    Level 7  
    Dziekuje koledze za pomoc. Jak komputer wroci z naprawy postaram zrobić tak jak kolega poradzil. Niestety w pracy nie mam kiedy tego zrobić. W przypadku jak bede mial jakieś problemy mogę liczyć na kolegi pomoc lub innych osób?
  • #17
    marcinj12
    Level 40  
    robert55555 wrote:
    W przypadku jak bede mial jakieś problemy mogę liczyć na kolegi pomoc lub innych osób?
    Jeśli będziesz miał możliwość / chęć dostosowania pliku do sugerowanych rozwiązań - jak najbardziej. Ale jeśli będziesz próbował strzelać do komara z armaty bo "przełożony powiedział że tak ma być" - to myślę, że dużo pomocy tu nie uzyskasz... :]
  • #18
    robert55555
    Level 7  
    Rozumiem, że koledze @marcinj12 chodziło o tak zrobiony spis, jaki zrobiłem w "spis_wzor".

    Czy o to coś takiego chodziło koledze? W jaki sposób można przypisać funkcje aby wszystko się zgadzało? Czy można przypisać tak funkcje do lp. nr1 w spisie a potem przeciągnać i wszystko sie uzupełnia?
  • #19
    robert55555
    Level 7  
    marcinj12 wrote:
    wykle wystarczy podwójne kliknięcie w miejscu separatora oddzielającym dwa kolejne wiersze - przy lewym marginesie, gdzie znajdują się numery wierszy, np. między 19 a 20. Kursor zmienia wtedy symbol na kreseczkę z dwoma strzałeczkami w gorę i w dół. Można też zaznaczyć kilka wierszy czy nawet wszystkie i wykonać to dla wszystkich zaznaczonych wierszy jednocześnie. W VBA jest do tego funkcja Rows(x).AutoFit.
    Ale żeby to działało, nie możesz mieć scalonych kolumn, tak jak to (zupełnie niepotrzebnie) zrobiłeś z kolumnami C:G. Czemu po prostu nie rozszerzyłeś kolumny C?


    Zrobiłem wszystko jak kolega @marcinj12 mi radził. Funkcja Adr spełniła moje wymagania, ślicznie za nią dziękuje koledze.
    Mam problem z dostosowaniem wysokości komórek do jej zawartości. Tutaj pomysł kolegi nie wypalił. Nie zastosowałem scaleń w żadnej komórce i rada kolegi @marcinj12 nie pomogła.

    Ma ktoś pomysł jak można to zrobić?

    Dodano po 4 [minuty]:

    Musiał bym klikać w miedzy wszystkie wiersze żeby komórka dostosowała wyskość wiersza do jej zawartośći. Trochę klikania miałbym, jak można rozwiązać to inaczej, szybciej?