Centar za edukaciju-BiH



#1 11.06.2015 23:39
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Postovi:4,691


Predmet:vba excel dim redim preserve matrica
dimenzioniranje matrice ovisi o broju redova i broju kolona
dim matrica(redova,kolona)
mozemo na pocetku zadati max broj redova i kolona
koje sigurno nikada necemo upotrijebiti.

dim matrica(1000,1000)
redovi=127
kolone=322
for f=1 to redovi
    for e=1 to redovi
        matrica(f,e)=cells(f,e).value
    next e
next f

problem je sto imamo praznih polja u matrici
isto tako UBound pokazuje sva polja i prazna i puna

1.pitanje:
molim objasnjenje za koristenje dim, redim i preserve
za 2D matricu.

2.pitanje:
redovi i kolone nemoraju uvijek krenuti od 1,
nekad redovi krenu od 17, 24 ili neki drugi broj,
a kolone isto tako, a htio bi da u matricu upisuju od 1,1
dakle

redovi=34
kolone = 189

for f= 15 to redovi
    for e=29 to kolone
        'ovo ispod nije dobro
        matrica(f-(f-1),e-(e-1))=cells(f,e).value
    next e
next f
zivot je moja domovina.
↑  ↓

#2 12.06.2015 11:59
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,610


Predmet:Re: vba excel dim redim preserve matrica
Citat:
1.pitanje:
molim objasnjenje za koristenje dim, redim i preserve
za 2D matricu.

Kada neznamo koliki nam je niz onda dimenzionisemo na sledeci nacin:
dim NekiNaziv() as String

e sada kada u toku izvrsenja procedure dobijemo vrijednost niiza napr. na osnovu petlje ili nceega drugoga.
Uzmimo da je ta vrijednost i.
Dim i as integer

for i= 1 to n

next i
sad ide redim

Redim NekiNaziv(i,8) as string

Nekad se nam znam desiti da uopste neznamo vrijednost niza.
Primjera radi kada niz punimo u petlji.
tada bi morali jednom obrnuti pezlju na prazno da saznamo koliko varijabli trebamo pa onovo obrnuti da pokupimo vrijednosti.
U ovom slucaju vrsimo redim za svaki prolaz petlje i najvjerovatnije i popunimo tu vrijednost.
Ukoliko izvrsimo redim sve vrijednosti ako ih ima u toj varijabli se gube.
da nebi izgubili vrijednosti ona koristimo preserve.
Primjer:

for i= 1 to N
redim preserve NekiNaziv(i,8)
NekiNaziv(i,8)="nekiPodatak"
next i
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#3 12.06.2015 12:03
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,610


Predmet:Re: vba excel dim redim preserve matrica
Citat:
2.pitanje:
redovi i kolone nemoraju uvijek krenuti od 1,
nekad redovi krenu od 17, 24 ili neki drugi broj,
a kolone isto tako, a htio bi da u matricu upisuju od 1,1
dakle

racunar uvije broji od 0.
ako dimenzionisemo:
Dim a(1) as string
Ovdje imamo dvije variable

a(0)="NekaVrijednost"
a(1)="nekavrijednost"

Cesto puta moi to nevidimo tako jer nama je obicaj brojati od 1 pa mi preskacemo var(0).
Nista se nece desiti sem sto se razbacujemo resursima pa ako je nasa app. kompleksna zauzimat ce vise memorije a nje nikad dosta i tra+eba voditi racuna.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#4 12.06.2015 16:43
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Postovi:4,691


Predmet:Re: vba excel dim redim preserve matrica
hvala
ja ocekivo da mi Div odgovori, a njega danas nema,ehh.
dobro, kad nece nitko drugi dobro i ti dodes Smiling
to sto si napisao dva posta ne znaci da cu ti dati + +
dobices samo jedan, bilo ti krivo il milo. Recesija je druze, treba da se stedi.
zivot je moja domovina.
↑  ↓

#5 12.06.2015 18:55
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,610


Predmet:Re: vba excel dim redim preserve matrica
Hehe kod mene to ne znaci nista jer sam presao maksimum.
Pluseve treba davati radi postova jer se poslije lakse nadje.
Nazalost meni su na pocetku bubali pluseve i u zabavi.
Netreba stavljati pluseve na imena nego na post.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#6 12.06.2015 20:05
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Postovi:4,691


Predmet:Re: vba excel dim redim preserve matrica
tebi ubuduce samo hvala
Citiraj zxz:

Pluseve treba davati radi postova jer se poslije lakse nadje.
aha znaci mogu naci po upitu "davanje +"

Van teme:
a ako se divim sam sebi kako sam dobro napisao mogu li sam sebi dati + kao u filmu vlak u snijegu kada je pero glasovo sam za sebe da bude voditelj zadruge hhhh

zivot je moja domovina.
↑  ↓

#7 14.06.2015 11:16
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Postovi:4,691


Predmet:Re: vba excel dim redim preserve matrica
uhuhuhuuu, dakle bilo problema sa ovim dok nisam otkrio ovo:
"kod redimenzioniranja vise dimenzionalne matrice, mozete redimenzionirati, povecati samo posljednju dimenziju matrice"
u praksi je to ovako:

dim matrica(10,10)

ovo mozemo
redim matrica(10,20)

ali ovo ne mozemo
redim matrica(20,10)

dakle gubitak od cirka 4 dana dok sam banalnu stvar otkrio. Sigurno ste se zabavljali dok ste razmisljali o meni i mojim mukama. heheheh


image uploading
to sam onda rijesio ovako:

PreuzmiIzvorni kôd (Visual Basic):
  1. Sub proba()
  2.     Dim matrica() As Variant
  3.     ReDim matrica(1 To 1, 1 To 1)
  4.    
  5.     Dim startDatum As Date
  6.     Dim endDatum As Date
  7.     startDatum = "2.1.2015."
  8.     endDatum = "5.1.2015."
  9.        
  10.     ActiveSheet.Range("B1").Select
  11.     ActiveSheet.Range(Selection, Selection.End(xlToRight)).Select
  12.     Set rangDatum = Selection 'stavim red datuma u rangDatum
  13.    Dim maxRed As Integer
  14.     maxRed = Range("A2").End(xlDown).Row 'max broj redova dakle od A2 do A5
  15.    Dim celija As Range
  16.  
  17.     For red = 2 To maxRed 'krece od drugod reda do maxRedova
  18.        For Each celija In rangDatum 'koja celija u rangu datuma
  19.            If celija >= startDatum And celija <= endDatum Then 'ima vrijednost
  20.                If red <= 2 Then 'ako je red prvi koji uzimamo u matricu
  21.                    kolona = celija.Column - 2 'stavimo kolonu na 1 zato da stavlja u matricu od prvog mjesta
  22.                    ReDim Preserve matrica(1 To red - 1, 1 To kolona) ' redimenzioniranje, povecamo drugu za kolonu tj +1
  23.                    matrica(red - 1, kolona) = Cells(red, celija.Column) 'ubacimo u matricu(red,celija.column) celija.column=kolona celija koja ispunjava uvijet
  24.                Else
  25.                     'ako nije pocetak tj red 2 onda vise ne redimenzioniramo matricu
  26.                    kolona = celija.Column - 2
  27.                     matrica(red - 1, kolona) = Cells(red, celija.Column)
  28.                 End If
  29.             End If
  30.         Next celija
  31.         If red < maxRed Then'ako red nije dostigao max vrijednost
  32.            matrica = Application.Transpose(matrica)' transponse = transportiram matricu(2,8) u matrica(8,2)
  33.            ReDim Preserve matrica(1 To kolona, 1 To red),'da bi mogao redimenzionirati posljednju dimenziju
  34.            matrica = Application.Transpose(matrica)' transportiram nazad matrica(8,3) u matrica(3,8)
  35.        Else
  36.             red = red + 1 'ako je red dostigao maxRed povecavamo red na max da bi izasli iz petlje
  37.                           'mogli smo i staviti goto
  38.        End If
  39.     Next red
  40.         'ispis matrice, a moze biti i u list ovdje je u immediate prozor
  41.    For red = 1 To maxRed - 1
  42.         For kolona = 1 To UBound(matrica, 1)
  43.             Debug.Print Cells(red + 1, 1) & "(" & red & "," & kolona & ")" & matrica(red, kolona)
  44.         Next kolona
  45.     Next red
  46. End Sub

ispis u immediate:
ivo(1,1)kruska
ivo(1,2)sljiva
ivo(1,3)tresnja
ivo(1,4)visnja
luka(2,1)sljiva
luka(2,2)tresnja
luka(2,3)visnja
luka(2,4)jagoda
mirko(3,1)tresnja
mirko(3,2)visnja
mirko(3,3)jagoda
mirko(3,4)lubenica
slavko(4,1)visnja
slavko(4,2)jagoda
slavko(4,3)lubenica
slavko(4,4)krumpir
zivot je moja domovina.
↑  ↓

#8 14.06.2015 11:29
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,610


Predmet:Re: vba excel dim redim preserve matrica
Citat:
"kod redimenzioniranja vise dimenzionalne matrice, mozete redimenzionirati, povecati samo posljednju dimenziju matrice"
PreuzmiIzvorni kôd (Visual Basic):
  1. Option Explicit
  2.  
  3. Function Matrica()
  4. Dim a()
  5. Dim I, N As Integer
  6.  
  7. For I = 1 To 5
  8.    For N = 1 To 5
  9.    
  10.    ReDim a(I, N)
  11.    Next N
  12. Next I
  13. End Function

Mozda si mislio na preserve.
ako njega koristis nemozes mijenjati sirinu matrice ili u praksi obicno kolone sto nama i netreba nego samo broj redova ili duzinu matrice.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#9 14.06.2015 12:09
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Postovi:4,691


Predmet:Re: vba excel dim redim preserve matrica
da mislio sam na preserve, pamcenje matrice te prosirivanje redova i kolona zato sam napisao ono gore da pokazem kako sam to rijesio uz pomoc transponse .
arr=transponse(arr)
zivot je moja domovina.
↑  ↓

Stranice (1):1


Sva vremena su GMT +01:00. Trenutno vrijeme: 10: 01 am.