napisał: julek81 postów: 28
umieszczony: 27 lipca 2010 19:10
|
|
tak jak poniżej funkcję wywołujesz:
w wierszu 2
=minje(A2;A2:B65553;2)
i masz wynik
kolega rycho też miał dobry pomysł i też działa :D
Cytat:o ile się nie mylę to przy tworzeniu funkcji które chcesz wywoływać w komórkach to przy pierwszym przypisaniu wartości jej nazwie po prostu ja przerywa
jeżeli chcesz mieć funkcję min to może coś takiego:
Public Function minJe(var As Double, zakres As Range, nrkol As Integer) As Double
Application.Volatile
Dim m As Double
m = 0
For Each rw In zakres.Rows
If rw.Cells(1, 1).Value = var And (CDbl(rw.Cells(1, nrkol).Value) < m Or m = 0) Then
m = CDbl(rw.Cells(1, nrkol).Value)
End If
Next rw
minJe = m
End Function
'--------------------------------------------------------------------------------
' var - wartosc wg której wyszukiwane jest minimum
' zakres - zakres w którym zawiera się w pierwszej kolumnie wartości według której
' ma być wyszukiwane min oraz kolumna w której to min sie znajduje
' nrkol - nr kolumny w zakresie w któej znajduje się min |
|
|
napisał: rolandk postów: 6
umieszczony: 26 lipca 2010 15:23
|
|
Witajcie jeszcze raz.
Mam nadzieję, że pytam po raz ostatni :)
Posiadam coś takiego:
Opisuję np. słownie cenę produktu wg wartości.
Nazwa oceny i wartość oceny. Gdzie 0 to najgorsza wartość, 4 najlepsza.
W kolumnie A są nazwy a w B wartości.
bardzo dobra 4
dobra 3
mało interesująca 1
niedobra 0
średnia 2
Zauważyłem, że jak nie posiadałem posortowanych wartości po nazwie (kolumna A) tylko po wartości (kolumna B) to miałem błędne wyliczenia. Wykorzystuję funkcję WYSZUKAJ do późniejszych obliczeń.
Moje pytanie jest mam nadzieję banalne,
czy istnieje inna funkcja, która nie będzie wymagała ustawiania sortowania alfabetycznie tylko pozwoli np. na posortowanie wg wartości? |
|
|
napisał: rolandk postów: 6
umieszczony: 26 lipca 2010 14:39
|
|
Dzięki wszystkim za pomoc.
Jeszcze tylko jedno pytanko, bo przerobić poniższe wskazówki z wykorzystaniem "ŚREDNIEJ" oraz "MAX" chyba dam radę.
Ale czy wiecie jak zrobić ODCHYLENIE STANDARDOWE ("ODCH.STANDARDOWE"), dla zakresu spełniającego warunek? |
|
|
napisał: julek81 postów: 28
umieszczony: 23 lipca 2010 21:15
edytowany: 23 lipca 2010 21:43
|
|
o ile się nie mylę to przy tworzeniu funkcji które chcesz wywoływać w komórkach to przy pierwszym przypisaniu wartości jej nazwie po prostu ja przerywa
jeżeli chcesz mieć funkcję min to może coś takiego:
Public Function minJe(var As Double, zakres As Range, nrkol As Integer) As Double
Application.Volatile
Dim m As Double
m = 0
For Each rw In zakres.Rows
If rw.Cells(1, 1).Value = var And (CDbl(rw.Cells(1, nrkol).Value) < m Or m = 0) Then
m = CDbl(rw.Cells(1, nrkol).Value)
End If
Next rw
minJe = m
End Function
'--------------------------------------------------------------------------------
' var - wartosc wg której wyszukiwane jest minimum
' zakres - zakres w którym zawiera się w pierwszej kolumnie wartości według której
' ma być wyszukiwane min oraz kolumna w której to min sie znajduje
' nrkol - nr kolumny w zakresie w któej znajduje się min |
|
|
napisał: Rycho postów: 291
umieszczony: 23 lipca 2010 15:51
|
|
Witaj,
funkcja użytkownika, czyli funkcja napisana w VBA i wywołana z komórki arkusza, nie może dokonywać zmian w arkuszach a ty użyłeś metody select.
Zamiast select użyj pełnego odwołania do przeglądanych komórek
sheet(...).Cells(..., "V")
a jeszcze lepiej, zastosuj instrukcję with
with Worksheets("Transakcje")
.Cells(j,"P")
end with
Jednak najlepiej, zamiast VBA, użyj prostej formuły tablicowej - przykład:
-kolumna A - produkt
-kolumna B - wartość
-komórka C1 - jakiś produkt (czyli warunek)
formuła tablicowa (po wpisaniu zatwierdź ją klawiszami Ctrl+Shift+Enter)
=MIN(JEŻELI(A1:A10=C1;B1:B10;1E+38))
wyjaśnienie: 1E38 to baaardzo duża liczba w notacji naukowej.
Powodzenia. |
|
|
napisał: rolandk postów: 6
umieszczony: 23 lipca 2010 12:44
|
|
Witam, czy możecie mi powiedzieć czemu makro nie liczy minimum?
W Arkuszu Transakcje mam dane i tak w kolumnie P (nr 16) występuje warunek - produkt, a w kolumnie V (nr 22) wartość.
Chcę aby marko policzyło minimalną wartość dla produktu X, który na wejściu mu podajemy, np. wskazując komórkę w arkuszu zestawienie z napisaną nazwą produktu.
Wykombinowałem coś takiego. W procedurze to działało ale w funkcji nie chce :(
Dajcie znać co przekombinowałem.
Function min_jezeli(warunek As String) As Double
Application.Volatile
Dim j, ile_transakcji As Integer
ile_transakcji = Worksheets("zestawienie 97").Range("B6").Value
Sheets("Transakcje").Select
min_jezeli = Cells(2, 22)
For j = 2 To ile_transakcji - 1
If ((Cells(j, 16).Value = warunek) And (Cells(j, 22).Value < min_jezeli)) Then min_jezeli = Cells(j, 22).Value
Next j
Sheets("zestawienie 97").Select
End Function |
|
|
 wstecz 1 dalej  wszystkich stron: 1
|