Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 59233 Skopiuj do schowka Access .Czy jest możliwa podmiana liczb?jak Wyszukaj,Replace
Autor Wiadomość
zen 
ExcelSpec



Pomógł: 9 razy
Posty: 1041
Wysłany: 30-10-2017, 14:24   Access .Czy jest możliwa podmiana liczb?jak Wyszukaj,Replace

Witam
Chciałbym aby to pytanie sondażowe jakie zadałem w tytule postu jest po to abym mógł się rozeznać i przymierzyć do następnego projektu jaki sobie wymyśliłem .Szukam najwydajniejszego w tym najszybszego sposobu zamiany liczb w b. dużej matrycy (ok 1mln) kombinacji na coraz to nowie i inne zestawy .
Szukałem w Googlach niestety nic adekwatnego nie znalazłem są zamiany liczby na tekst itp dotyczące raczej formatów .
Zaplanowałem sobie tak że zestawy będą po 30 do 36 liczb (taka będzie matryca a ilość tych kombinacji może sięgać miliona . Czy jest to właściwa droga ? Czy może poprzestać na zrobieniu sobie w dużym Excelu (2007) takiego makra . Z tym że ja już mam obawy że wykonywanie sie takiego makra może trwać długo . Formuły z kolei mogą zupełnie "zapchać Arkusz " (jeszcze nie sprawdzałem ale takie mam przeczucie . Stawiałbym na Accessa bo patrząc na wykonywanie
się kwerend wychodzi to dość szybko .
Czy mógłby ktoś z Państwa podpowiedzieć jaką metodę w takim przypadku zastosować ?

Pozdrawiam
zen
_________________
moja excelowa wiedza jeśli nie constans to asymptotycznie zbliża się do zera -Ciężki przypadek
Lektury typu >>Excel ; Access; VBA; dla opornych<< są dla mnie za trudne.
ID posta: 333178 Skopiuj do schowka
 
 
kulasart 
Excel Expert


Pomógł: 434 razy
Posty: 1761
Wysłany: 30-10-2017, 15:14   

zen, detale, detale i jeszcze raz detale.
Poprzestając na ogólnikach mało kto zrozumie o co dokładnie Ci chodzi.
_________________
Nie pomagam na PW.
Szanuj czas tych, którzy mogą Ci pomóc. Nie mają go wiele.
Czas spędzony na stworzenie załącznika przekłada się na szybsze rozwiązanie problemu.

Ostatnia wpis na stronie: Funkcja WARUNKI
ID posta: 333184 Skopiuj do schowka
 
 
zen 
ExcelSpec



Pomógł: 9 razy
Posty: 1041
Wysłany: 30-10-2017, 15:15   

Na stronie Coderscity http://www.coderscity.pl/stare/82732_1.htm pani KarolinaVB zamieściła w tym temacie link do http://www.trigeminal.com...net001.asp?1033 .
Niestety duże braki znajomości nomenklatury accessowej jak i to że translator na tę stronę nie działa niewiele zrozumiałem. Ale intuicja podpowiada mi że chyba VBA w Accesie jest to możliwe do zrobienia ....
Zapomniałem dodać że działam na Acc2000 ale " od biedy " ACC 2007 też używam To zdaje się (by miało jakieś znaczenie gdybym posiadał Acc 97 ) w moim przypadku jest neutralne .
Pozdrawiam
zen

Kulasart to było pytanie tylko o możliwość , w dalszej części sprawność i celowość bo może się okazać że pozostanie przy excelu będzie najsensowniejsze .Spróbuję taką bazę przygotować i tu zamieścić
Ale wygląda to tak

Jest jakiś zestaw docelowo nie 25 jak tu kombinacji a 500 tys


    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21 26 27 28 29
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 30 31 32 33
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 19 23 24 28 29 30 31 32 33
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 20 22 25 26 27 28 29 30 33
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 21 22 23 24 25 26 27 31 32
    1 2 3 4 5 6 7 8 9 10 11 12 13 15 18 19 22 25 26 27 30 31 32 33
    1 2 3 4 5 6 7 8 9 10 11 12 13 15 18 20 23 24 26 27 28 29 31 32
    1 2 3 4 5 6 7 8 9 10 11 12 13 15 18 21 22 23 24 25 28 29 30 33
    1 2 3 4 5 6 7 8 9 10 11 12 13 16 19 20 21 22 24 25 28 29 31 32
    1 2 3 4 5 6 7 8 9 10 11 12 13 16 19 20 21 23 24 25 26 27 30 33
    1 2 3 4 5 6 7 8 9 10 11 12 13 16 22 23 26 27 28 29 30 31 32 33
    1 2 4 10 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    1 3 9 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    1 5 6 8 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    1 7 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    2 3 5 11 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    2 6 7 9 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    2 8 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    3 4 6 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    3 7 8 10 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    4 5 7 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    4 8 9 11 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    5 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
    6 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33


i pod liczby tego zestawu chciałbym podstawić 33 liczby
    1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33
    10;11;27;9;7;31;1;33;26;24;32;18;3;29;6;2;4;17;8;30;16;23;28;15;22;19;14;25;21;5;12;20;13

Tu odpowiednikiem w excelu była by najlepiej Wyszukaj.Poziomo .

to daje tylko ogląd sytuacji
Pozdrawiam
zen
_________________
moja excelowa wiedza jeśli nie constans to asymptotycznie zbliża się do zera -Ciężki przypadek
Lektury typu >>Excel ; Access; VBA; dla opornych<< są dla mnie za trudne.
ID posta: 333185 Skopiuj do schowka
 
 
kulasart 
Excel Expert


Pomógł: 434 razy
Posty: 1761
Wysłany: 30-10-2017, 15:48   

Ale my nadal nie wiemy jak przechowujesz dane.
Inaczej działasz jeżeli masz strukturę:
ID|ID_KOMBINACJI|POZYCJA_W_KOMBINACJI|WARTOŚĆ

A inaczej kiedy masz strukturę:
ID_KOMBINACJI|WARTOŚĆ_1|WARTOŚĆ_2|WARTOŚĆ_3

Jeszcze inaczej:
ID_KOMBINACJI|WARTOŚĆ
gdzie wartość to cała kombinacja liczb rozdzielonych np przecinkiem.
_________________
Nie pomagam na PW.
Szanuj czas tych, którzy mogą Ci pomóc. Nie mają go wiele.
Czas spędzony na stworzenie załącznika przekłada się na szybsze rozwiązanie problemu.

Ostatnia wpis na stronie: Funkcja WARUNKI
ID posta: 333186 Skopiuj do schowka
 
 
zen 
ExcelSpec



Pomógł: 9 razy
Posty: 1041
Wysłany: 30-10-2017, 16:00   

Już nie mogę dopisać do poprzedniego wpisu (>30 minut) dlatego tu dołączam spakowanego Accessa dosłownie z tym co mamy tu powyżej A wiec te dwie tabelki
1) Matryca
2 ) zestaw do podmiany liczb w matrycy

Dodałem jeszcze tylko kwerendę w której tylko jej nazwa ma mówić o co chodzi w tej bazie .
Nadal głównym pytaniem jest to jak i czym najsprawniej robi się takie "masowe" podstawienia . Pomyślałem że może nawet w txt ?

Pozdrawiam
zen

Kulasart zaraz wygeneruję programem i kawałek w txt tu wstawię sorry

------------------
Tak wygląda podgląd tego pliku. Raczej nie mam problemu z separatorami poruszam się pomiędzy nimi "jak stary " :)


Kod:
02 03 04 05 06 08 10 11 12 13 15 17 18 19 23 24 25 26 27 28 29 30 31 32
01 03 04 05 06 07 08 10 11 12 14 15 19 20 21 23 24 25 26 27 28 29 32 33
01 03 04 05 06 07 08 09 10 11 12 14 15 16 17 18 19 21 24 26 27 29 30 32
02 03 04 05 06 07 10 11 12 13 15 16 18 19 22 23 24 25 26 28 30 31 32 33
01 02 04 05 06 08 09 10 11 12 13 16 17 19 20 21 22 23 24 26 28 30 31 33
03 04 05 07 08 09 11 12 13 15 16 17 18 19 20 21 22 25 26 27 28 29 32 33
01 02 03 05 08 10 11 12 13 14 15 17 18 19 20 21 22 25 26 28 30 31 32 33
01 03 05 06 08 09 10 11 12 14 15 16 18 20 22 23 24 25 26 27 28 31 32 33
01 02 03 04 07 08 09 13 15 16 17 18 21 22 23 24 25 26 27 28 29 30 31 32
01 02 03 05 06 08 09 10 11 12 14 16 17 18 20 21 22 24 26 27 28 29 31 33
02 03 04 05 09 10 11 12 14 15 17 18 19 20 22 23 24 25 26 28 29 30 31 32
02 03 04 08 09 10 11 13 15 16 17 18 19 22 23 24 25 26 28 29 30 31 32 33
01 02 03 05 06 08 09 10 11 12 13 14 19 20 21 22 24 25 26 27 29 30 31 32
01 02 04 05 06 07 08 09 10 11 13 14 16 17 20 21 22 23 24 25 27 28 29 30
01 02 03 04 07 08 09 11 12 13 15 16 17 18 19 21 22 24 25 26 27 28 29 31
03 04 05 06 07 08 09 10 11 12 14 18 19 21 23 24 26 27 28 29 30 31 32 33
02 04 05 07 08 10 11 12 14 15 16 17 19 21 22 23 24 25 26 28 29 30 32 33
02 04 05 06 07 08 09 10 11 14 15 16 17 19 21 22 23 27 28 29 30 31 32 33
02 04 05 06 07 08 09 12 13 14 15 16 18 21 23 24 25 26 27 28 29 31 32 33


Ten zamiennik (czyli chodzi o ten jeden wiersz z 33 liczbami) realnie będzie przedzielony tabulatorami ale ze wszystkim sobie poradzę


A teraz zastanawiam się czy dobrze zrozumiałem ideę Twojego pytania . Może jeszcze tak
Oprócz liczb nie ma żadnych dodatkowych oznaczeń określeń czy liczb porządkowych .Same liczby Matryca jako 0# A zestaw podmieniający jak daje excel L1 Tab L2 Tab L3 Tab itd

Testowa próbna.zip
Pobierz Plik ściągnięto 11 raz(y) 27.2 KB

Format generowanego pliku .txt
Pobierz Plik ściągnięto 16 raz(y) 1.35 KB

_________________
moja excelowa wiedza jeśli nie constans to asymptotycznie zbliża się do zera -Ciężki przypadek
Lektury typu >>Excel ; Access; VBA; dla opornych<< są dla mnie za trudne.
ID posta: 333188 Skopiuj do schowka
 
 
kulasart 
Excel Expert


Pomógł: 434 razy
Posty: 1761
Wysłany: 30-10-2017, 20:08   

Proszę o jedno, dostaję co innego... ehhhh....
Dobrze że chociaż załącznik się pojawił.

Bazując na samym załączniku:
Struktura matrycy to:
ID_KOMBINACJI | WARTOŚĆ_1 | WARTOŚĆ_2 | WARTOŚĆ_3 itd.

Struktura tabeli z wartościami do zamiany to:
ID | WARTOŚĆ_1 | WARTOŚĆ_2 | WARTOŚĆ_3 itd

Dla ID=1 są wartości szukane.
Dla ID=2 są wartości na które należy zamienić wartości szukane.

Jedną i drugą strukturę na start sprowadzam do postaci znormalizowanej.
Matryca ma mieć strukturę:
ID_KOMBINACJI | POZYCJA | WARTOŚĆ
Kod:

select [ID], 1 as POS, P1 as VAL from MATRYCA
union all
select [ID], 2 as POS, P2 as VAL from MATRYCA
union all
select [ID], 3 as POS, P3 as VAL from MATRYCA


Wartości do zamiany mają mieć strukturę:
ID | POZYCJA | CZEGO_SZUKAM | NA_CO_ZAMIENIAM

Kod:

    select
        [r1].[POS],
        [r1].[VAL] as SEARCH,
        [r2].[REP]
    from
    (
        select 1 as POS, Pole1 as VAL from [Zestaw do podmiany] where [ID]=1
        union all
        select 2 as POS, Pole2 as VAL from [Zestaw do podmiany] where [ID]=1
        union all
        select 3 as POS, Pole3 as VAL from [Zestaw do podmiany] where [ID]=1
    ) r1
    left join
    (
        select 1 as POS, Pole1 as REP from [Zestaw do podmiany] where [ID]=2
        union all
        select 2 as POS, Pole2 as REP from [Zestaw do podmiany] where [ID]=2
        union all
        select 3 as POS, Pole3 as REP from [Zestaw do podmiany] where [ID]=2
    ) r2 on [r1].[POS] = [r2].[POS]


Mając już struktury przyjazne do pracy, łącze je ze sobą po polu POZYCJA, by uzyskać coś takiego:
ID_KOMBINACJI | POZYCJA | WARTOŚĆ | CZEGO_SZUKAM | NA_CO_ZAMIENIAM
Kod:
select
        [t1].[ID],
        [t1].[POS],
        [t1].[VAL],
        [t2].[SEARCH],
        [t2].[REP]
    from
    (
        select [ID], 1 as POS, P1 as VAL from MATRYCA
        union all
        select [ID], 2 as POS, P2 as VAL from MATRYCA
        union all
        select [ID], 3 as POS, P3 as VAL from MATRYCA
    ) t1
    left join
    (
        select
            [r1].[POS],
            [r1].[VAL] as SEARCH,
            [r2].[REP]
        from
        (
            select 1 as POS, Pole1 as VAL from [Zestaw do podmiany] where [ID]=1
            union all
            select 2 as POS, Pole2 as VAL from [Zestaw do podmiany] where [ID]=1
            union all
            select 3 as POS, Pole3 as VAL from [Zestaw do podmiany] where [ID]=1
        ) r1
        left join
        (
            select 1 as POS, Pole1 as REP from [Zestaw do podmiany] where [ID]=2
            union all
            select 2 as POS, Pole2 as REP from [Zestaw do podmiany] where [ID]=2
            union all
            select 3 as POS, Pole3 as REP from [Zestaw do podmiany] where [ID]=2
        ) r2 on [r1].[POS] = [r2].[POS]
    )t2 on t1.POS = t2.POS


A kiedy uzyskam taką strukturę, to mogę w prosty sposób sprawdzić czy WARTOŚĆ jest równa CZEGO_SZUKAM. Jeżeli jest, to użyć NA_CO_ZAMIENIAM, jeżeli nie, użyć WARTOŚĆ. W konsekwencji dostając strukturę:
ID_KOMBINACJI | POZYCJA | WARTOŚĆ | CZEGO_SZUKAM | NA_CO_ZAMIENIAM | NOWA_WARTOŚĆ

Kod:

select
    [t1].[ID],
    [t1].[POS],
    [t1].[VAL],
    [t2].[SEARCH],
    [t2].[REP],
    iif([t1].[VAL]=[t2].[SEARCH], [t2].[REP], [t1].[VAL]) as NEW_VAL
from
(
    select [ID], 1 as POS, P1 as VAL from MATRYCA
    union all
    select [ID], 2 as POS, P2 as VAL from MATRYCA
    union all
    select [ID], 3 as POS, P3 as VAL from MATRYCA
) t1
left join
(
    select
        [r1].[POS],
        [r1].[VAL] as SEARCH,
        [r2].[REP]
    from
    (
        select 1 as POS, Pole1 as VAL from [Zestaw do podmiany] where [ID]=1
        union all
        select 2 as POS, Pole2 as VAL from [Zestaw do podmiany] where [ID]=1
        union all
        select 3 as POS, Pole3 as VAL from [Zestaw do podmiany] where [ID]=1
    ) r1
    left join
    (
        select 1 as POS, Pole1 as REP from [Zestaw do podmiany] where [ID]=2
        union all
        select 2 as POS, Pole2 as REP from [Zestaw do podmiany] where [ID]=2
        union all
        select 3 as POS, Pole3 as REP from [Zestaw do podmiany] where [ID]=2
    ) r2 on [r1].[POS] = [r2].[POS]
)t2 on t1.POS = t2.POS


Teraz trzeba na powrót zpivotować taką strukturę aby miała znów postać:
ID_KOMBINACJI | WARTOŚĆ_1 | WARTOŚĆ_2 | WARTOŚĆ_3

Żeby tego dokonać dodamy sobie jeszcze jedną kolumnę, w której zbudujemy nazwę kolumn dla "nowej" matrycy.

Kod:

transform first([final].[NEW_VAL]) as COLUMN_VALUE
select
    [final].[ID]
from
(
    select
        [t1].[ID],
        [t1].[POS],
        [t1].[VAL],
        [t2].[SEARCH],
        [t2].[REP],
        iif([t1].[VAL]=[t2].[SEARCH], [t2].[REP], [t1].[VAL]) as NEW_VAL,
        "P" & [t1].[POS] as COLUMN_NAME
    from
    (
        select [ID], 1 as POS, P1 as VAL from MATRYCA
        union all
        select [ID], 2 as POS, P2 as VAL from MATRYCA
        union all
        select [ID], 3 as POS, P3 as VAL from MATRYCA
    ) t1
    left join
    (
        select
            [r1].[POS],
            [r1].[VAL] as SEARCH,
            [r2].[REP]
        from
        (
            select 1 as POS, Pole1 as VAL from [Zestaw do podmiany] where [ID]=1
            union all
            select 2 as POS, Pole2 as VAL from [Zestaw do podmiany] where [ID]=1
            union all
            select 3 as POS, Pole3 as VAL from [Zestaw do podmiany] where [ID]=1
        ) r1
        left join
        (
            select 1 as POS, Pole1 as REP from [Zestaw do podmiany] where [ID]=2
            union all
            select 2 as POS, Pole2 as REP from [Zestaw do podmiany] where [ID]=2
            union all
            select 3 as POS, Pole3 as REP from [Zestaw do podmiany] where [ID]=2
        ) r2 on [r1].[POS] = [r2].[POS]
    )t2 on t1.POS = t2.POS
) final
group by [final].[ID]
pivot [final].[COLUMN_NAME]


Powyższe zapytania napisałem tylko dla matrycy składającej się z 3 pól. W przypadku większej ilości, należy rozszerzyć zarówno zapytanie normalizujące matrycę, jak i normalizujące wartości do zamiany.

Bardziej "krok po kroku" nie umiem tego rozpisać. Ba... nawet nie wiem czy o to chodziło, bo jak zwykle dostaliśmy ogólniki, które rozumie tylko sam autor :( A przy takich zadaniach należy się kierować zasadą ELI5 (Explain Like I'm 5 - Wytłumacz mi jakbym miał/a 5 lat)
_________________
Nie pomagam na PW.
Szanuj czas tych, którzy mogą Ci pomóc. Nie mają go wiele.
Czas spędzony na stworzenie załącznika przekłada się na szybsze rozwiązanie problemu.

Ostatnia wpis na stronie: Funkcja WARUNKI
ID posta: 333196 Skopiuj do schowka
 
 
zen 
ExcelSpec



Pomógł: 9 razy
Posty: 1041
Wysłany: 30-10-2017, 21:12   

Kulasart Dziękuję i najmocniej przepraszam. Do tej pory nie bardzo wiem jak inaczej mogę to opisać .Widzę że mam bardzo ograniczone postrzeganie i jedynie przez pryzmat możliwości excela którego chciałem uniknąć .
Dziękuję bardzo za to że pomimo mojej niekompetencji i nieumiejętności w wyrażeniu czego oczekuję podjąłeś się i podałeś rozwiązanie . I rzeczywiście jest opisane b. zrozumiale .
Ma ten opis swoją dobrą stronę że będę mógł tworzyć różne warianty dla różnych kombinacji .
Tak patrząc tylko na kody jeszcze nie "czuję" ich działania ale tworząc bazę po kolei wg Twojej receptury sądzę że wszystko będzie OK :beer
_________________
moja excelowa wiedza jeśli nie constans to asymptotycznie zbliża się do zera -Ciężki przypadek
Lektury typu >>Excel ; Access; VBA; dla opornych<< są dla mnie za trudne.
ID posta: 333205 Skopiuj do schowka
 
 
ogrzech 
Stały bywalec Excelforum



Pomógł: 46 razy
Posty: 252
Wysłany: 30-10-2017, 21:38   

Mam nadzieję, że dobrze zrozumiałem, i że w
Cytat:
i pod liczby tego zestawu chciałbym podstawić 33 liczby 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33 10;11;27;9;7;31;1;33;26;24;32;18;3;29;6;2;4;17;8;30;16;23;28;15;22;19;14;25;21;5;12;20;13

chodzi o to, aby zamienić 1 na 10, 2 na 11, 3 na 27, 4 na 9 itd.

Do tego celu stworzyłem "monstrum", jak w załączniku, opierając się tylko na powielonej w bok i w dół formule.

Jako że mam Excel'97, to mogłem sprawdzać tylko dla liczby wierszy nieco ponad 65,5 tys. - dane uzyskałem powielając odpowiednią ilość razy w kolumnach A:X 25-wierszowy przykład.
(Plik z taką ilością wierszy i formuł zajął mi >80 MB, więc w załączeniu tylko 100-wierszowa próbka)

Ciąg oryginalny jest w wierszu 1 w kolumnach A:AG, ciąg na który zamieniamy jest w kolumnach BA:CG.

Na mojej w miarę silnej maszynie te 65 tys. wierszy po wklejeniu ciągu z zamianami przelicza się w czasie poniżej 2 sekund.
Nie wiem jak byłoby na 500 tysiącach ;-)

NaForum1.zip
Pobierz Plik ściągnięto 8 raz(y) 600.42 KB

_________________
Republika marzeń...
ID posta: 333208 Skopiuj do schowka
 
 
zen 
ExcelSpec



Pomógł: 9 razy
Posty: 1041
Wysłany: 30-10-2017, 22:22   

Ogrzech Dziękuję za nieznaną mi możliwość rozwiązania tego tematu .
Jestem jednak pełen obaw co do pamięciożerności arkusza z taką ilością formuł .Ja formułami bym to robił przy pomocy Wyszukaj.Pionowo . Dla pół miliona czy miliona takich kombinacji po 25 liczb w wierszu do podmiany może dać się arkuszowi bardzo we znaki .
Obawiam się że będzie to muł.
Dzięki

Pozdrawiam
zen
_________________
moja excelowa wiedza jeśli nie constans to asymptotycznie zbliża się do zera -Ciężki przypadek
Lektury typu >>Excel ; Access; VBA; dla opornych<< są dla mnie za trudne.
ID posta: 333211 Skopiuj do schowka
 
 
kulasart 
Excel Expert


Pomógł: 434 razy
Posty: 1761
Wysłany: 30-10-2017, 22:32   

Takie pytanie uzupełniające:
01 ma być zamienione na 10 w całym zestawie danych, czy tylko na pierwszej pozycji (w pierwszej kolumnie) ?
_________________
Nie pomagam na PW.
Szanuj czas tych, którzy mogą Ci pomóc. Nie mają go wiele.
Czas spędzony na stworzenie załącznika przekłada się na szybsze rozwiązanie problemu.

Ostatnia wpis na stronie: Funkcja WARUNKI
ID posta: 333212 Skopiuj do schowka
 
 
zen 
ExcelSpec



Pomógł: 9 razy
Posty: 1041
Wysłany: 30-10-2017, 23:58   

Kulasart oczywiście że w całym zestawie i na jakiejkolwiek pozycji ta liczba by była .
Ja wkleiłem sortowane zestawy , a przecież mogą być wymieszane np. jedynka na ostatniej pozycji w kombinacji.

------------
Może jest tak że ja za dużo gadam ze sobą :bla i mnie się wszystko co ja wiem wydaje oczywiste .Sorki .

Pozdrawiam
zen
_________________
moja excelowa wiedza jeśli nie constans to asymptotycznie zbliża się do zera -Ciężki przypadek
Lektury typu >>Excel ; Access; VBA; dla opornych<< są dla mnie za trudne.
ID posta: 333215 Skopiuj do schowka
 
 
kulasart 
Excel Expert


Pomógł: 434 razy
Posty: 1761
Wysłany: 31-10-2017, 00:12   

W takim wypadku moje rozwiązanie można wyrzucić do kosza. :evil: :evil: :evil:
Z danych i ich struktury wynikało, że zamiany dokonujemy uwzględniając nie tylko wartość ale również pozycję w matrycy. A sensownego opisu problemu, wraz z oczekiwanym rezultatem niestety nie było.

Całość można ogarnąć przy pomocy:
1) Podwójnego, wyszukaj.pionowo z wyszukiwaniem przybliżonym - żeby całość działała szybko.
2) Prostego makra wykorzystującego np. słownik.
3) Zwykłego złączenia w SQL'u.

Tyle ode mnie. Dla mnie temat zamknięty.

Ps. zen, przestań klikać "pomógł" przy wszystkich postach, skoro większość z nich Ci nie pomogła. :-?

--------
orzech, funkcja ADR.POŚR, to "zło", którego radzę się wystrzegać. Należy ona do grupy funkcji "wrażliwych" (ang. volatile), które przeliczają się niezależnie od tego czy zmieniamy dane w komórkach, od których zależy wynik funkcji, czy nie. Przeliczają się przy każdej zmianie. Dlatego przy dużej liczbie danych, lepiej omijać ją szerokim łukiem.
Dodatkowo, o ile mnie pamięć nie myli jest to funkcja jednowątkowa - co sprawia że jest to funkcja powolna.
_________________
Nie pomagam na PW.
Szanuj czas tych, którzy mogą Ci pomóc. Nie mają go wiele.
Czas spędzony na stworzenie załącznika przekłada się na szybsze rozwiązanie problemu.

Ostatnia wpis na stronie: Funkcja WARUNKI
ID posta: 333216 Skopiuj do schowka
 
 
zen 
ExcelSpec



Pomógł: 9 razy
Posty: 1041
Wysłany: 31-10-2017, 01:05   

Kulasart dziękuję za tę konstatację . Nie da się no to trudno będę kombinował w Excelu
Kulasart jeśli ktoś mnie czegoś uczy to nie pomaga ?
Jeśli poświęca dla mnie swój czas.. To nie pomaga ?
Jeśli ktoś jest odporny na moje herezje i się stara .. To nie pomaga ?

Kulasart nawet nie wiesz jak się cieszę że nie zostałem wykopany z tego forum ..

i jeszcze jedno :
Jeden da dziesięciu nie i to się jakoś wyrównuje .

-----------------------------------------
Wracając do tematu to w pewnym momencie natknąłem się na barierę z którą będę musiał sobie poradzić .
Mianowicie chodzi o to że próbowałem ręcznej zamiany liczb a sytuacja wyjściowa taka.

Matryca
Kod:
1    2    4    5    6    7    9    20


Liczby do podmianki
Kod:

Wyszukaj            1    2    3    4    5    6    7    8    9
Zamiennik           2    4    5    7    8    10    14    17    18

Przy bezmyślne zamianie po kolei jak wskazują pozycje
zamiana liczby matrycowej "1" na dwa jest błędem bo dostaniemy wartość dwa z dwóch źródeł przy następnym kroku
jedno źródło to już istniejąca dwójka wtórne źródło to liczba dwa uzyskana z zamiany liczby jeden na dwa
Mój pokrętny umysł podpowiada mi podwójną zamianę najpierw na jakieś niepokrywające się z podmienianymi liczbami lub korzystniej zamienniki na inne liczby poza zakres tu w przytoczonym przykładzie większe niż 33 a potem jeszcze raz na właściwe liczby .
Lub porównać tylko które liczby w obu zbiorach są te same i tylko je podwójnie potraktować . Bo jeśli ręcznie to wystarczy tylko przypilnować kolejności by nie dopuścić do powielenia się niektórych liczb .
Nie wiem czy to potrzebne co napisałem
Kulasart jeszcze raz dziękuję i przepraszam za zamieszanie .

Pozdrawiam
zen
_________________
moja excelowa wiedza jeśli nie constans to asymptotycznie zbliża się do zera -Ciężki przypadek
Lektury typu >>Excel ; Access; VBA; dla opornych<< są dla mnie za trudne.
ID posta: 333217 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 269
Pomogła: 418 razy
Posty: 2291
Wysłany: 31-10-2017, 06:44   

Zabiegana jestem, nie bardzo mam czas wnikać w problem, ale w Accessie jest funkcja DlookUp, będąca swoistym odpowiednikiem excelowego Wyszukaj.Pionowo. Funkcja Replace też jest. Obie te funkcje występują nie tylko w kodzie VBA, można je wykorzystać bezpośrednio np. w polu kwerendy.
_________________
marzatela

http://www.szultaset.pl
ID posta: 333218 Skopiuj do schowka
 
 
ogrzech 
Stały bywalec Excelforum



Pomógł: 46 razy
Posty: 252
Wysłany: 31-10-2017, 08:09   

kulasart napisał/a:
funkcja ADR.POŚR, to "zło" (...)
Wiem o "ulotności" tej funkcji, natomiast nigdy nie słyszałem o "wątkowościach" poszczególnych funkcji - co zresztą świadczy o tym, że jeszcze zdecydowanie zbyt mało wiem ;-)
Proponując swoje rozwiązanie wyszedłem z założenia, że jeśli nie wypali pomysł z zapytaniem SQL, to będzie jakaś tam alternatywa, która na dodatek powinna działać szybciej, niż manualna podmiana (znajdź->zamień) 33 kolejnych par wartości.
A samo ADR.POŚR wzięło się po prostu z ćwiczenia swoich umiejętności - bardzo rzadko jej używam, więc skoro nadarzyła się okazja...

zen napisał/a:
Obawiam się że będzie to muł.
Sprawdzałeś?
Bo ja dla potrzebnego Ci zakresu danych nie mam jak...

zen napisał/a:
Ja formułami bym to robił przy pomocy Wyszukaj.Pionowo .
W załączeniu arkusz z funkcjami WYSZUKAJ.POZIOMO i WYSZUKAJ.PIONOWO.
Dla tej pierwszej wiersz z danymi po zamianie jest w zakresie A2:AG33, dla drugiej oba ciągi umiejscowiłem w zakresie AH6:AI38 - dało o sobie znać moje lenistwo, bo nie chciało mi się zmieniać ogólnego układu arkusza.
Dane pierwotne też są ograniczone do 100 wierszy ze względu na rozmiar pliku, a wytworzone zostały tak, jak poprzednio, czyli przez powielenie.
Użyte formuły dla komórki BA6 to:
Kod:
=WYSZUKAJ.POZIOMO(A7;$A$1:$AG$2;2;0)
lub
Kod:
=WYSZUKAJ.PIONOWO(A6;$AH$6:$AI$38;2;0)
Należy je oczywiście przeciągnąć w prawo i w dół odpowiednio do zakresu danych pierwotnych.
(Cały czas się zastanawiam, dlaczego kol. kulasart sugeruje zastosowanie podwójnego "WYSZUKAJ"...)

Ale zauważyłem, że także przy użyciu WYSZUKAJ.POZIOMO lub WYSZUKAJ.PIONOWO arkusz przelicza się przy każdej zmianie wartości dowolnej(!) komórki, nawet nie należącej do zakresów z danymi do przekształceń i par do zamiany - tak jest przynajmniej w moim Excel'97.

zen napisał/a:
Wracając do tematu to w pewnym momencie natknąłem się na barierę z którą będę musiał sobie poradzić .
To akurat jest najmniejszy problem.
Robisz: znajdź "1" -> zamień na "2a" ("a" to oczywiście tylko przykład!), potem: znajdź "2" -> zamień na "4a", itd., a na koniec: znajdź "a" -> zamień na "" (czyli na "nic").

NaForum2.xls
Pobierz Plik ściągnięto 8 raz(y) 53 KB

_________________
Republika marzeń...
ID posta: 333225 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum