Štetje zadetkov števil!

Pomoč pri delu z MS Excelom
Odgovori
Zoki
Prispevkov: 22
Pridružen: So Feb 04, 2006 9:54 pm

Štetje zadetkov števil!

Odgovor Napisal/-a Zoki »

Pozdravljeni!

Nekako se mučim z makrojem, ki bi mi znal prešteti določena števila, pa mi ne uspe.
PRIMER: Predstavljajte si, da imate v stolpcu v obsegu od B4 do B1000 (lahko tudi manjši ali večji obseg) različna števila in sicer samo od 1 do 99 (večjih ni). Ta števila so brez reda in isto število se lahko večkrat tudi ponovi npr. 4,19,58,6,19,19,7,99....... Sedaj bi pa jaz rad, da mi Excel prešteje (ne sešteje) vsa vpisana števila (in mi jih vpiše v celico D25), v celico D26 mi naj prešteje koliko števil je v rangu od 1 do 10, v celico D27 mi naj prešteje koliko je števil v rangu od 11 do 20, itd...

Hvala že vnaprej!

L.P.: Zoki
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Pozdravljen Zoki

Koda: Izberi vse

Sub Prestej_st()
'
Dim zadnja_vrstica, stevec_stevil, stevec_stevil_OD1DO10 As Integer

    zadnja_vrstica = Range("B65536").End(xlUp).Row
    stevec_stevil = 0
    stevec_stevil_OD1DO10 = 0
    
   For Each c In Range("B4:B" & zadnja_vrstica)
    If IsNumeric(c.Value) = False Then GoTo Naprej
    'prešteje vsa števila
    If c.Value <> "" Then stevec_stevil = stevec_stevil + 1
    'prešteje vsa števila od 1 - 10
    If c.Value >= 1 And c.Value <= 10 Then stevec_stevil_OD1DO10 = stevec_stevil_OD1DO10 + 1
    '...
Naprej:
   Next
   Range("D25").Value = stevec_stevil
   Range("D26").Value = stevec_stevil_OD1DO10
   '...
'
End Sub
Upam, da sem prav razumel.

Lp
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Lahko si pomagate sami in še zelo preprosto je. Recimo, da v celici B3 piše "Števila", kar nama bo predstavljalo ime.
  1. Postavite se sedaj v celico B4 in izberite Podatki/Poročilo vrtilne tabela ali vrtilnega grafikona.
  2. Odpre se čarovnik, ki ga lahko kar zaključite (ni se potrebno prebijati skozi tri korake).
  3. Čarovnik vam bo odprl nov list, kjer vam bo pripravil posebno tabelo in odprl se eno malo okno, kjer bodo zapisani vsi nasovi v vaši tabeli. Med njimi bo tudi najin 'Števila'.
  4. Zagrabite z miško ta naziv ('Števila') in ga nesite na levo stran pripravljene tabele (tam piše 'Tule spustite polja vrstice'). Zagrabite ga še enkrat in ga nesite na sredino tabele (tam piše 'Tule spustite podatkovne elemente')
  5. To je to. Excel vam je pripravil tabelo, kjer so zapisana vsa števila, ki jih je našel, ob njih pa piše kolikokrat se pojavijo.
Ni sicer vidno kolikokrat se pojavijo števila v območju od npr 21-30, a iz takšne tabel to ni teško ugotoviti :). Ste se pa naučili zuporabljati vrtilne tabele!
lp,
Matjaž Prtenjak
Administrator
Zoki
Prispevkov: 22
Pridružen: So Feb 04, 2006 9:54 pm

POZDRAVLJENI!

Odgovor Napisal/-a Zoki »

Zelo dobro, sam sem še malo modificiral makro in to je to. Ste me pa že prehiteli z vrtilno tabelo oz. jaz sem imel v mislih graf, ki bi se mi izrisal v obliki kroga in procentih po posameznih zadetkih (stevec_stevil_OD1DO10) in skupnega števila.
Moja prošnja bi bila še samo, če mi lahko iz makroja zadnjo vpisano vrstico Excel poišče sam (ker ni vedno RANGE("B1000"), lahko je B356 itd.), potem pa npr. 5 vrstic pod zadnjim vnosom mi naj sam vpiše rezultate (kar imama sedaj v makroju Range("D25").Value = stevec_stevil).
Vem da sem že takšen makro videl v tem forumu, ampak ga sedaj ne najdem.

Hvala za trud in dober napotek!

L.P.: Zoki
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Ponovno pozdrav
...če mi lahko iz makroja zadnjo vpisano vrstico Excel poišče sam...
je že:

Koda: Izberi vse

zadnja_vrstica = Range("B65536").End(xlUp).Row 
...potem pa npr. 5 vrstic pod zadnjim vnosom mi naj sam vpiše rezultate (kar imama sedaj v makroju Range("D25").Value = stevec_stevil).
na koncu kode dodajte:

Koda: Izberi vse

Range("B" & zadnja_vrstica + 5).Value = stevec_stevil
Lp
Zoki
Prispevkov: 22
Pridružen: So Feb 04, 2006 9:54 pm

POZDRAVLJENI!

Odgovor Napisal/-a Zoki »

Seveda, hvala, stvar "špila" kot v Nemčiji! :lol:

L.P.: Zoki
Zoki
Prispevkov: 22
Pridružen: So Feb 04, 2006 9:54 pm

Še dodaten pogoj!

Odgovor Napisal/-a Zoki »

Sedaj bi si še pa želel, če bi lahko vstavil še dodaten pogoj pri štetju in sicer npr za vrstico:

If c.Value >= 1 And c.Value <= 10 Then stevec_stevil_OD1DO10 = stevec_stevil_OD1DO10 + 1


in če je ta pogoj izpolnjen, bi še pogledal dodaten pogoj, če je v stolpcu N vpisana vrednost 1 (potem naj sešteje npr.: stevec_stevil_OD1DO10_1), če pa je vpisana vrednost 2 pa naj sešteje npr.: stevec_stevil_OD1DO10_2.

Rad bi vedel predvsem, kako se dodajajo dodatni pogoji (če je prvi izpolnjen, kako preverjat drugega, tretjega, itd....)

Upam da je dovolj razumljivo in se Vam že vnaprej zahvaljujem!

L.P.: Zoki
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Pozdrav

If v eni vrstici

If to je to Then To je To

Zadevo, pa lahko malo razvlečete.

If To je To Then
To je to
Else
To je To
End If

Lahko pa tudi naredite If stavek v If stavku.

Lp
Zoki
Prispevkov: 22
Pridružen: So Feb 04, 2006 9:54 pm

Zdravo

Odgovor Napisal/-a Zoki »

Ni problem v if stavku, problem nastane v c.Value, ker ne vem, kako mu pa naj dopovem da mi pregleda še vrednosti v N stopcu :?:

Hvala za pomoč in L.P:
Zoki
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Ne vem, mogoče vas ne razumem prav.
Lahko pa tudi naredite If stavek v If stavku.
Lahko naredite tako:

If To je To Then
If To je To Then
Naredi To
End If
End If

Lahko pa:

If To je To And (Or) To je To Then Naredi To

Lp
Zoki
Prispevkov: 22
Pridružen: So Feb 04, 2006 9:54 pm

Pojasnilo!

Odgovor Napisal/-a Zoki »

Mislim, da se res nisva dobro razumela. Če pogledava ta del makra:

For Each c In Range("B4:B" & zadnja_vrstica)
If IsNumeric(c.Value) = False Then GoTo Naprej
'prešteje vsa števila
If c.Value <> "" Then stevec_stevil = stevec_stevil + 1
'prešteje vsa števila od 1 - 10
If c.Value >= 1 And c.Value <= 10 Then stevec_stevil_OD1DO10 = stevec_stevil_OD1DO10 + 1
'...
Naprej:


...vidiva, da je vsak c v vrstici od B4 pa da zadnje izpolnjene vrstice. Jaz bi pa rad, da mi še, če je izpolnjen (če ni izpolnjen takrat ne) prvi pogoj If c.Value >= 1 And c.Value <= 10 Then .... pregleda še vrednost v tej isti vrstici v stolpcu N in sicer, če je vpisana vrednost 1 v stolpcu N mi naj sešteje "stevec_stevil_OD1DO10_1", če pa je vpisana vrednost 2, pa mi naj sešteje "stevec_stevil_OD1DO10_2"

Upam, da sem sedaj bil malo bolj razumljiv!

L.P.: Zoki
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Koda: Izberi vse

Sub Prestej_st()
'
Dim zadnja_vrstica, stevec_stevil, stevec_stevil_OD1DO10_1, stevec_stevil_OD1DO10_2 As Integer

    zadnja_vrstica = Range("B65536").End(xlUp).Row
    stevec_stevil = 0
    stevec_stevil_OD1DO10_1 = 0
    stevec_stevil_OD1DO10_2 = 0
    
   For Each c In Range("B4:B" & zadnja_vrstica)
    If IsNumeric(c.Value) = False Then GoTo Naprej
    'prešteje vsa števila
    If c.Value <> "" Then stevec_stevil = stevec_stevil + 1
    'prešteje vsa števila od 1 - 10
    If c.Value >= 1 And c.Value <= 10 And c.Offset(0, 12).Value = 1 Then stevec_stevil_OD1DO10_1 = stevec_stevil_OD1DO10_1 + 1
    If c.Value >= 1 And c.Value <= 10 And c.Offset(0, 12).Value = 2 Then stevec_stevil_OD1DO10_2 = stevec_stevil_OD1DO10_1 + 1
    '...
Naprej:
   Next
   Range("D25").Value = stevec_stevil
   Range("D26").Value = stevec_stevil_OD1DO10_1
   Range("D27").Value = stevec_stevil_OD1DO10_2
   '...
'
End Sub
Lp
Zoki
Prispevkov: 22
Pridružen: So Feb 04, 2006 9:54 pm

POZDRAVLJENI!

Odgovor Napisal/-a Zoki »

E, to je tisto, kar mi je manjkalo. Vsa čarovnija je v ukazu Offset, ki ga pa jaz nisem poznal. Ali je morda kje na internetu kakšna dobra razlaga tega ukaza in ostalih podobnih ukazov za VBA? Sicer pa saj veste, kaj pravi stari kitajski pregovor:"Ne daj mi ribe, temveč me nauči loviti".

Hvala za pomoč in trud,
Zoki
Odgovori