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
Przesunięty przez: bodek
06-07-2014, 20:50
Konkurs Mikołajowy
Autor Wiadomość
Artik 



Wersja: Win Office 365
Pomógł: 3133 razy
Posty: 10378
Wysłany: 10-12-2013, 09:56   

A mówiłem, że się do sprawy nie przyłożyłem. :-)
SpecialCells, mało że wolne (porównać kod Rycha), to działające jeszcze pod pewnymi warunkami. :-(

Artik
ID posta: 212595 Skopiuj do schowka
 
 
OShon 
Excel Expert



Zaproszone osoby: 398
Wersja: Win Office 365
Pomógł: 1638 razy
Posty: 8386
Wysłany: 10-12-2013, 12:58   

Choć zapewne funkcja będzie miała ograniczony zakres to interesujące jest rozwiązanie Bizzy17, które to na wyjściu funkcja daje zakres nieciągły. W niektórych przypadkach, w których jest wiele pustych komórek ma to większy sens. Wręcz chodzi mi po głowie hybryda...

Niestety nie miałem zbytnio czasu aby przysiąść do testów wydajnościowych, a ograniczyłem się do zakresu o kwadracie 20x20, wypada to nadrobić (co zostawiam wnikliwym i czekam na komentarze).

W załączniku plik ze wszystkimi funkcjami (Quasi zmieniłem twój kod na postać zadania, którego wynikiem jest obiekt oraz Incognito aby kod był funkcją i pare drobnych które starałem się opisać w kodzie).
Innych modyfikacji nie robiłem - bo istotą jest wasza praca a nie poprawianie.

Jeszcze raz dziękuje za uczestnictwo.
Mam nadzieję że kolejna rywalizacja będzie równie emocjonująca.

Przykład konkursowy.xlsm
Pobierz Plik ściągnięto 275 raz(y) 52.39 KB

_________________
Oskar Shon - MVP Office System/Development 11/21, 3xMCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA | GL Excel VBA
Dodatki do Office VBATools.pl, aktualne promocje, darmowe artykuły i literatura
ID posta: 212618 Skopiuj do schowka
 
 
J_B 
Excel Expert


Wersja: Win Office 2016
Pomógł: 541 razy
Posty: 1339
Wysłany: 10-12-2013, 20:33   

Ot i narobiłem zamieszania czepiając się funkcji Artika
Wiec przyjdzie posprzątać

mkkk23 naprawdę nie mam pojęcia dlaczego tak i od kiedy
to robię ale działa więc wyznaję zasadę jak działa nie ruszaj
Od dziś będę stosował twój sposób zapisu bo też działa

Teraz wracam do różnicy odczytu przy funkcji Artika
"Wiedziałem że wiedziałem" o ograniczeniach dla SpecialCells
W moim przykładzie uwzględniłem to ograniczenie dodając funkcję
" Min_Range_To_Limit" do której to przekazywałem zakresy nie przekraczające limitu
i łączyłem całość przez Union

Ale nie mając odwagi powątpiewać w poprawność rozwiązania Artika
testując zgłosiłem grzecznie tylko że otrzymuję inny wynik

A co do meritum
Wszyscy stosujący SpecialCells odpowiednio zabezpieczają się On Error Resume Next
i przypisując obszar do zmiennej np
Kod:

Set r = Cells.SpecialCells(xlTextValues)


Nie otrzymujemy komunikatu o błedzie lecz
Zmienna r wraca niepoprawny adres


Może jednak podam przykład do testów bo pedagog ze mnie żaden
I tłumaczenie na nić się nie przyda
Oczywiście dla wersji do 2007 bo dla 2010 parametry inne

Kod:


Sub Test()

    Dim W As Long, x As Long, Limit As Long
    Dim kom As Range, r As Range
    Cells.Clear
    Cells.ColumnWidth = 2.5
    'Limit = 2147483648 * 2
    'dla limitu 8192 wszystko ok
    Limit = 8193 * 2
    ' lecz już dla Limit = 8192 kicha
    'oczywiscie do wersji 2007
    'dla 2010 Limit = 2147483648
    x = 1
    W = 3000

    For Each kom In Range("A1:U" & W)
        If x - 1 = Limit Then Exit For
        If x Mod 2 = 0 Then
            kom = "x"
        End If
        x = x + 1
    Next

    Set r = Cells.SpecialCells(xlTextValues)
   
    Debug.Print "Adres zakresu    " & r.Address

    On Error Resume Next
   
    Debug.Print "Ilość komórek  " & Cells.SpecialCells(xlTextValues).Count
    If Err.Number <> 0 Then
        Debug.Print "Nr błędu - opis   "; Err.Number & "   " & Err.Description
        On Error Resume Next
    End If
   
    Set r = Nothing
   
End Sub



Z okna immediate
Adres zakresu $1:$1048576
Nr błędu - opis 6 Overflow

Tak więc już wiemy gdzie pies pogrzebany

Quasi i Wormsek też do tego nawiązują
ID posta: 212643 Skopiuj do schowka
 
 
incognito 
Stały bywalec Excelforum


Pomógł: 113 razy
Posty: 415
Wysłany: 10-12-2013, 22:14   

Witam,
ja jeszcze trochę Mikołajowo :) Wpisałem w zakres A1:A1000000 jedynki, zaznaczyłem pierwszych 12 kolumn, odpaliłem stoper i otrzymałem takie wyniki (zrobiłem to tylko dwa razy, dla lepszego rezulatu trzebaby zrobić 10 razy test i wziąć średnią, ale średnio mi się chce):

1. Patronus: 10,10 s (bład: nie zaznaczona pierwsza linia)
2. Artik: 5,79 s
3. tkuchta1: 5,56 s
4. Bizzy17: po minucie spasowałem
5. mkkk23: 23,45 s
6. incognito: 6,65 (błąd w zaznaczeniu obszaru, jedna kolumna za dużo)
7. Worm: po minucie spasowałem
8. Rycho: po minucie spasowałem
9. Bodek: 4,6875 !!! (ale pierwsza linia niestety nie została zaznaczona)
10. Quasi: 5,01 s

Wnioski wyciągnijcie/wyciągnijmy sami :)
Pozdrawiam.
ID posta: 212648 Skopiuj do schowka
 
 
bodek 


Wersja: Win Office 2019
Pomógł: 994 razy
Posty: 2900
Wysłany: 11-12-2013, 20:50   

Przy okazji, tak to jest jak się zmienia warunki gry w trakcie :mrgreen:
Coś tam napisałem a tu zmiany, zmiany i zmiany a ja akurat wyjechałem w teren i czasu nie tylko na testy ale ewentualne uwzględnienie nowych wymogów (elementy dodatkowe) po prostu nie miałem i przy wysyłaniu "pracy konkursowej" po prostu to napisałem. Potem się okazuje, że punkt 6 ostatecznych wytycznych brzmi
Cytat:
6. Pusty zakres komórek (nie zawierający żadnych danych)
to co z nim? Bo nie wiem, ja założyłem że powinien zwrócić pojedynczą komórkę i to oprogramowałem a tu beee, nie ma ok. :shock:
Ponadto okazało się, że
Cytat:
* elementy dodatkowe
były tak samo punktowane jak podstawowe, czyli jednak stały się one podstawowe i wymagane a nie jak napisano dodatkowe.

Żeby nie było, nie twierdzę, że napisałbym coś lepszego od kolegów. Tylko takie tam, sobie piszę :mrgreen: a moja funckja i tak powinna pójść do poprawki, bo są byki :tak
_________________
Szkolenia z Excela, Power Query, Power Pivot, wizualizacje danych w Excelu, szkolenia online
ID posta: 212735 Skopiuj do schowka
 
 
incognito 
Stały bywalec Excelforum


Pomógł: 113 razy
Posty: 415
Wysłany: 12-12-2013, 06:29   

Witam jeszcze raz, naszło mnie na testowanie. Zrobiłem jeszcze jeden test. Chciałem wpisać do komórek A1:AAA1000000 jedynkę, ale brakło mocy obliczeniowej, więc wpisałem do A1:AA1000000 (zastanawiam się jak wpisać dane do całego Arkusza bez pętli, ale to pytanie czysto hobbystyczne, no a jeżeli z pętlą to ile by to w przybliżeniu trwało, komórek jest trochę). Po zaznaczeniu odpowiedniej ilości kolumn oraz odpaleniu stopera otrzymałem wyniki:

1. Quasi: 10,37 s
2. Bodek: 10,73 s
3. tkuchta1: 11,09
4. Artik: 76,87 s
5. mkkk23: spasowałem po 90 s
6. Patronus spasowalem po 90 s
7. incognito: wykrzaczył się po minucie

Tak mi dzisiaj minął ranek... :) Pozdrawiam.
ID posta: 212779 Skopiuj do schowka
 
 
Quasi 
Excel Expert


Wersja: Win Office 365
Pomógł: 142 razy
Posty: 1103
Wysłany: 12-12-2013, 11:14   

incognito napisał/a:
(zastanawiam się jak wpisać dane do całego Arkusza bez pętli, ale to pytanie czysto hobbystyczne.


1. Zaznaczasz obszar jaki chcesz
2. Wpisujesz wartość jaką chcesz w pierwszej komórce
3. Zatwierdzasz Ctrl+Enter
4. Masz zakres wypełniony danymi :-)

Jak zaznaczyć duży zakres danych np. A1:XX50000?

1. Zaznaczasz komórkę startową tj. A1
2. Włączasz w arkuszu tryb blokowy (F8)
3. Właczasz Przejdź do.... (F5) i tam wpisujesz XX50000
4. Po kliknięciu OK masz zaznaczony cały zakres
5. Jak wklepać dane - masz podane wyżej :-)
6. Klikasz F8 ponownie aby wyjść z trybu blokowego zaznaczania komórek.
_________________
http://www.swiatexcela.pl - blog nie tylko dla programistów VBA
ID posta: 212798 Skopiuj do schowka
 
 
incognito 
Stały bywalec Excelforum


Pomógł: 113 razy
Posty: 415
Wysłany: 12-12-2013, 11:38   

dzięki, chyba podstawy się kłaniają... :oops: ciekawy jestem czy komputer przemieli wpisywanie danej do całego arkusza... :)

PS. Przetestowałem większe zakresy, dla Excela to chyba ta sama metoda, tylko użytkownik ją wykonuje raz z Excela, a raz z poziomu VBA, tak mi się wydaje...
ID posta: 212801 Skopiuj do schowka
 
 
OShon 
Excel Expert



Zaproszone osoby: 398
Wersja: Win Office 365
Pomógł: 1638 razy
Posty: 8386
Wysłany: 12-12-2013, 11:59   

bodek napisał/a:
Potem się okazuje, że punkt 6 ostatecznych wytycznych brzmi
Cytat:
6. Pusty zakres komórek (nie zawierający żadnych danych)
to co z nim? Bo nie wiem, ja założyłem że powinien zwrócić pojedynczą komórkę i to oprogramowałem a tu beee, nie ma ok. :shock:
Ponadto okazało się, że
Cytat:
* elementy dodatkowe
były tak samo punktowane jak podstawowe, czyli jednak stały się one podstawowe i wymagane a nie jak napisano dodatkowe.

Nie czochraj się tak. Wymagania się rozjechały ponieważ nowe okoliczności (pytania) odsłoniły nowe obszary, jaki funkcja ta mogła realizować.
Mogłeś również otrzymywać powiadomienia (wystarczyło tylko się wypowiedzieć na FB).
Oczywiście pierwsze koty za płoty.

Taki żarcik mi się na myśl jawi: Następnym razem (choć kto wie bo nikt się nie wypowiedział za) ogłosi się konkurs na miesiąc przed terminem, aby na starcie każdy mógł rzucić świetnie przygotowaną pracę.
Po godzinie zamknie się konkurs i bez sprawdzenia wylosuje się jednego zwycięzcę.

Bodzio - dobrze jest bo jest co analizować - stanąłeś na wysokości zadania (nie popatrzyłeś na FB, ale to przecież nic się nie stało) - po co te napięcie.
_________________
Oskar Shon - MVP Office System/Development 11/21, 3xMCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA | GL Excel VBA
Dodatki do Office VBATools.pl, aktualne promocje, darmowe artykuły i literatura
ID posta: 212805 Skopiuj do schowka
 
 
bodek 


Wersja: Win Office 2019
Pomógł: 994 razy
Posty: 2900
Wysłany: 13-12-2013, 08:39   

Ja się nie czochram (bo już prawie nie mam po czym) ale po prostu chyba czegoś nie rozumiem i nie zamkniesz mi ust żarcikiem :mrgreen:
OShon napisał/a:
(nie popatrzyłeś na FB, ale to przecież nic się nie stało)
No to może popatrzmy wspólnie, zacytuję pierwsze zdanie
Cytat:
W konkursie liczy się dokładność wyniku oraz prędkość działania funkcji.
Tak na oko 50/50%. No i co z tego zostało uwzględnione?
Ponadto zareklamowałem sposób punktacji mojego rozwiązania dla punktu numer 6 i uprę się, że jak obszar jest pusty, to wynikiem powinna być jedna komórka, bo wynika to z drugiego zdania zasad konkursowych
Cytat:
Funkcja powinna zwrócić nowy obszar, który zawierać będzie wszystkie komórki zawierające dane (bez pustych wierszy czy kolumn w których brak danych)

I jeszcze bym się pewnych kwestii czepił, na przykład tego, że ..., ale dobra, niech zostanie jak jest, bo wyjdzie, że jestem oszołomem. Rozumiem, że mleko się rozlało i nie ma co już nad nim dalej płakać.
_________________
Szkolenia z Excela, Power Query, Power Pivot, wizualizacje danych w Excelu, szkolenia online
ID posta: 212813 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

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe