konto usunięte

Temat: Problemz pętlą

Czy mógłby mi ktoś powiedzieć co tu jest źle
Ta procedura ma znaleźć największą liczbę w zakresie arkusza

Public Sub największa()
Dim x
Dim dane()
dane() = Range("a1:a20").Value
x = 0
For i = 1 To 20
If dane(i) > x Then x = dane(i)
Next i
MsgBox x

End Sub
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Problemz pętlą

Nie musisz porownywac ze soba poszczegolnych liczb. W VBa mozesz korzystac takze z funkcji arkuszowych np.

Sub Najwieksza()

Dim lNajwiekszaLiczba As Long
lNajwiekszaLiczba = WorksheetFunction.Max(Arkusz1.Range("A1:A20"))

MsgBox lNajwiekszaLiczba

End Sub

konto usunięte

Temat: Problemz pętlą

Domyślnie masz option base 0, tzn. pierwszym indeksem tablicy jest 0 a zaczynasz od 1.

Poza tym zdaje się że ta tablica będzie dwuwymiarowa pomimo tego że ma tylko jedną kolumnę.

A wogóle to

x = application.worksheetfunction.max(range("a1:a20"))

A po piąte to takie rzeczy funkcją a nie subem - unikasz zmiennych publicznych.Maciek Głuszak edytował(a) ten post dnia 20.09.10 o godzinie 15:27
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Problemz pętlą

@Maciek, pierwszym elementem tablicy jest tutaj 1 bo sciagamy dane z arkusza. Zero by bylo gdybysmy ta tablice wypelnili recznie (Dane = Array(5,10,15)) :-).

@Piotr, deklaruj typy zmiennych bo tak naprawde wszystko masz zadeklarowane jako Variant. Poza tym czesc zmiennych deklarujesz, a np. zapomniales o zmiennej i.

Temat: Problemz pętlą

Tablica dane() wypełniona prze pobranie danych z komórek arkusza jest dwuwymiarowa - pierwszy wymiar to wiersz a drugi kolumna.

W kodzie powinno być:
If dane(i,1) > x Then x = dane(i,1)

konto usunięte

Temat: Problemz pętlą

Dziękuje wszystkim za pomoc, a w szczególności Ryszardowi, który odpowiedział na moje pytanie.

konto usunięte

Temat: Problemz pętlą

I jeszcze jeden problem w tym temacie. Jak już znalazłem szukaną wartość to jak zlokalizować w której komórce się ona znajduje (np zaznaczając w niej inne tło)?
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Problemz pętlą

Poczytaj o metodzie Find obiektu Range.
Andrzej Kowalski

Andrzej Kowalski Specjalista ds.
pomiarów / metrolog,
Hutchinson Poland
Sp...

Temat: Problemz pętlą

Można dodać w pętli drugą zmienną

If dane(i,1) > x Then
x = dane(i,1)
y = i
End If

...

MsgBox x + " w wierszu " + y
Bogdan Gilarski

Bogdan Gilarski www.excelperfect.pl
Perfect And
Practical

Temat: Problemz pętlą

Moje dodatkowe propozycje usprawnień:
1. Nie stosować polskich znaków w nazwie procedury
2. Założyć, że maksymalna wartość może być jednak liczbą ujemnąBogdan Gilarski edytował(a) ten post dnia 20.09.10 o godzinie 20:10

konto usunięte

Temat: Problemz pętlą

Piotr Rupacz:
Dziękuje wszystkim za pomoc, a w szczególności Ryszardowi, który odpowiedział na moje pytanie.
Holahola, sugerujesz ze pan kandydat na prezydenta i pan Jankowski nie odpowiedzieli na pytanie
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Problemz pętlą

No to poczepiam sie dalej :-)

@ Bodek, co do stosowania polskich znakow jak najbardziej tak (podobnie jest z nazwami zmiennych). Sluszna uwaga, ze maksymalna liczba moze byc wartoscia ujemna. Poza tym mysle, ze wypadaloby sprawdzic typ danej komorki jezeli juz chcemy te porownania koniecznie zrobic w petli.

@ Andrzej, prosimy deklarowac zmienne. Twoj kod nie zadziala mi gdy przekopiuje go do modulu.

@ Piotr, Ty sie nie przejmuj tym co my tutaj wypisujemy z Mackiem i innymi dyzurnymi VBA :-). Chcac utrwalic dobre praktyki programowania 3ba po prostu o pewnych rzeczach konsekwentnie trabic (np. to, ze odkrywanie Ameryki na nowo jest nieoplacalne pod zadnym wzgledem - lepiej skorzystac z wbudowanych opcji Excela np. funkcji arkuszowych - dostepnych rowniez w VBA).

konto usunięte

Temat: Problemz pętlą

Zgadzam się. Nie przejmuje się krytyką o ile jest trafna.
Co do odkrywania ameryki na nowo to zapytałem konkretnie o problem w pętli a nie o znalezienie najszybszej metody, gdyż właśnie o taką pętlę mi chodziło (bez urazy Maciek). Przecież są funkcje Excela, które liczą takie rzeczy ;-), a mnie zależało na zastosowaniu tej metody.

konto usunięte

Temat: Problemz pętlą

A jeżeli czepiamy się szczegółów, to:
Maciek Głuszak:

Poza tym zdaje się że ta tablica będzie dwuwymiarowa pomimo tego że ma tylko jedną kolumnę.


Mariusz słusznie prawi. Jakby odpowiadać konkretnie na zadane pytania to lud nigdy nie wyszedłby poza modyfikacje nagranego kodu metoda prób i błędów, zupełnie bez zrozumienia co się dzieje. I świat pogrążyłby się w otchłani chaosu i spaghetti.

Peace. Po prostu jestemsy ludźmi z misją.



Wyślij zaproszenie do