Centar za edukaciju-BiH


Odgovori na temu











Prosiri Boja Prosiri Velicina Spoiler WMP-Videos Neprimjereno
Podebljano Kurziv Podvuceno Slika Internet adresa (URL) Citat Van teme Neuredena lista Narucena lista Pretplata Nadredeni
Grinning Happy Cool Surprised Disappointed Laughing In love Angry No comment Embarrassing Shy Smiling Tongue Undecided Innocent Wink Sad Prosiri i skupi vise smajlica
Povecaj velicinu · Smanji velicinu Provjeri duzinu

Pretvori smajlice u postu
Pretvori & quot; vokable & quot; u postu


Upravljanje prilozima
Mozete priloziti 3 datoteke!



Posljednjih 15 postova u ovoj temi


Avko (14.06.2015 12:09):
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)

zxz (14.06.2015 11:29):
Predmet: Re: vba excel dim redim preserve matrica
Citat:
"kod redimenzioniranja vise dimenzionalne matrice, mozete redimenzionirati, povecati samo posljednju dimenziju matrice"
PreuzmiIzvorni kd (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.

Avko (14.06.2015 11:16):
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 kd (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

Avko (12.06.2015 20:05):
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

zxz (12.06.2015 18:55):
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.

Avko (12.06.2015 16:43):
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.

zxz (12.06.2015 12:03):
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.

zxz (12.06.2015 11:59):
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

Avko (11.06.2015 23:39):
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

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