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
|
|
|
 |
|
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
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.
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ę a moja funckja i tak powinna pójść do poprawki, bo są byki |
_________________ Szkolenia z Excela, Power Query, Power Pivot, wizualizacje danych w Excelu, szkolenia online |
|
 | ID posta:
212735
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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ą... 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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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 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
|
|
|
 |
|
|
|
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
|
 |
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
|