Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel VBA - Jak zrobić Public Function albo Private Function w VBA

Laik2013 07 Kwi 2014 15:17 1764 9
  • #1 07 Kwi 2014 15:17
    Laik2013
    Poziom 11  

    Cześć,

    Zrobiłem sobie proste obliczenie w Excelu i widze, że w kodzie robi mi sie niezła książka.

    Chciałbym przerobić ten kod na funkcje, która robiłaby to samo.


    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Jak podejść do tego,

    Dzięki wielkie za pomoc :)

    0 9
  • SterControl
  • SterControl
  • #3 07 Kwi 2014 18:31
    Laik2013
    Poziom 11  

    Cześć,

    Niestety nie o to mi chodziło.

    Zacząłem robić coś takiego ale wywala mi błąd Argument not optional?

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #4 07 Kwi 2014 19:40
    JRV
    Specjalista - VBA, Excel

    Piszesz, że funkcja musi akceptować 5 parametry
    Function Oblicz(dane, rangeName, Grupa, rangeName1, Grupa1)
    i dać jej tylko 3 :
    Oblicz(Sheets("dane"), Range("A1:A" & lastcell), Grupa)
    Z powodu tego błęd

    Dodano po 4 [minuty]:

    Ale, że sens tego funkcja replikuje funkcji arkusza?

    0
  • #5 07 Kwi 2014 19:47
    Laik2013
    Poziom 11  

    Witam,

    Dzięki, poprawiłem.

    Funkcja musi sie odnosić do Arkusza ponieważ wynik jest wpisywany do innego arkusza do konkretnej komórki.

    0
  • #6 07 Kwi 2014 20:04
    JRV
    Specjalista - VBA, Excel

    Dla 'CountIf' trzeba tylko 2 argumenty: zakres i wartosc
    Dla 'CountIfs' trzeba 2 albo 4 albo 6 ... it.d.

    Dodano po 2 [minuty]:

    (dane.Range(rangeName), <<< nie testowałem, ale intuicyjnie tutaj jest coś nie podoba

    Dodano po 3 [minuty]:

    Range("A1:A" & lastcell) - łatwiej Range("A:A")

    Dodano po 9 [minuty]:

    Cytat:

    Funkcja musi sie odnosić do Arkusza ponieważ wynik jest wpisywany do innego arkusza do konkretnej komórki.

    Dlaczego do innego arkusza do konkretnej komórki nie napisać prostą funkcję Excel?

    0
  • #7 07 Kwi 2014 20:49
    Laik2013
    Poziom 11  

    Cześć,

    Udało mi sie napisać coś takiego:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Widze że liczy dobrze ale mam problem taki że jak wychodzi z funkcji to gubi wynik i w miejscu Range("B2") = k
    k ma wartość 0 co jest błędne ponieważ w funkcji obliczył 272.

    Jak zachować wynik z funkcji?

    Dzięki

    0
  • Pomocny post
    #8 07 Kwi 2014 21:03
    JRV
    Specjalista - VBA, Excel

    .........
    Wynik= WorksheetFunction.CountIf(Sheets("dane").Range("A1:A" & lastcell), kryterium)
    End Function
    Przepraszam, funkcja ta nadal nie ma sensu

    łatwiej naprosto
    Range("B2")=WorksheetFunction.CountIf(Sheets("dane").Range("A:A"), kryterium)

    0
  • #9 07 Kwi 2014 21:32
    Laik2013
    Poziom 11  

    Cześć:)

    Dzięki za podpowiedź.

    Ubrałem wszystko w pętelke i śmiga :)

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #10 07 Kwi 2014 21:46
    JRV
    Specjalista - VBA, Excel

    Laik2013 napisał:
    i = i + 1
    Next i


    Next i - oznacza i=i+1 jeśli nie określono warunek Step

    Dodano po 5 [minuty]:

    Laik2013 napisał:
    For Each i In kryterium

    oznacza dla każdego elementu w kryterium
    dlatego i=i+1 nie ma sens

    0