» »

excel+visual basic

excel+visual basic

švrk ::

Pozdravljeni,

ker sem cisti zacetnik me zanima kako bi naredil naslednje:

V excelu v celico napisem poljubno stevilo. Nato grem na tools->macro->visual basic editor. Sedaj bi pa tukaj v tem editorju napisal programček, ki bo prebral število v celici in izvedel for zanko in nekaj naredil.

se pravi for 1 To številoVcelici (recimo seštel števila od 1 do števila v celici).

Bi mi mogoče kdo znal na hitro razložit ali pokazat kako se to naredi in kako to v excelu funkcionira oz kakšna je sploh povezava.

Za odgovore se vam ze vnaprej zahvaljujem.
LP

Isotropic ::

švrk ::

hvala, ravno to sem rabil nekaj preprostega s slikicami.
Sam sem vpisoval iskalni niz "visual basic" pa nisem nic pametnega nasel oz. preprostega.

švrk ::

Napisal sem svoj prvi macro, sešteje števila od 1 do števila v celici izgleda takole:
Sub CellsExample()

x = 0
y = Cells(1, 1)

   For i = 1 To y
        x = x + i
   Next i
   
   Cells(1, 2) = x
   
End Sub



Sedaj me pa zanima oz. me moti to da vedno ko spremenim število v celici moram ponovno ročno zagnati macro. Kako bi dosegel da bi spremenil stevilo in bi se macro samodejno zagnal, tako kot npr ce sestejes dve celici in potem ko poljubno spreminjas vrednosti se rezultat spreminja?

smetko ::

Sub PodatkovVKoloni()
'
  Dim ZadnjaVrstica, ZadnjiStolpec, i, j As Integer
  Dim PodatkoVKoloni As Integer
  ZadnjaVrstica = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
  ZadnjiStolpec = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
  For i = 1 To ZadnjaVrstica
    PodatkoVKoloni = 0
    For j = 1 To ZadnjiStolpec
      If Not IsEmpty(Cells(j, i)) Then
        PodatkoVKoloni = PodatkoVKoloni + 1
      End If
    Next j
    Cells(j + 1, i).Value = PodatkoVKoloni
  Next i
End Sub
No comment

Zgodovina sprememb…

  • spremenilo: smetko ()

švrk ::

smetko, hvala za odgovor.
Vendar to ni to kar jst hočem. Če poženem tvoj makro mi izpiše:
7 8 6 6 6 6 0 0 0 0 0 0

Jst bi rad samo to, da v celico A11 napišem število v celici A12 pa dobim vsoto števil od 1 do števila v celici A11. Problem je ker ko spremenim število v A11 se v A12 nič ne zgodi in moram spet pognat macro na roke.


Šeeno vprašanje napisal sem makro, ki mi naredi matriko 6x6 naključnih števil od 1 do 365. Zanimam me ali obstaja funkcija, ki mi bo povedala če sta morda dve števili v tej matriki enaki. Tale excel je res hlodast program v MATLABU je to zelo enostavno.
Poskušal sem napisat sam macro, ki to preveri, tako kot se to v javi naredi vendar je tukaj že sintaksa čudna. Sploh obstaja logični operator !=(ni enako) al je fora v nekih NOT(bla)=true al kako gre tukaj v excelu?

Hvala za odgovore

smetko ::

Zgornja procedura je bila samo primer kako v makrojih naslavljaš določeno celico in kako lahko dobiš meje do kje so podatki. Namenjena je bila naki drugi temi o excelu z podobnim vprašanjem

Če rabiš v celici a12 vsoto števil od a1 do a11 potem za to ne rabiš nobenega makroja temveč v celico a12 vpišeš =sum(a1:a11).

Tvoj drugi problem spet lahko rešeš brez makrojev, in to z pogojnim oblikovanjem ali z dodatno matriko
1. z dodatno matriko: (predpostavljam da se tvoja matrika začne z A1)
v neko polje vpišeš =COUNTIF($A$1:$D$5;A1), nato pa to funkcijo prekopiraš tako, da dobiš dodatno matriko z enako velikostjo kot je prvotna. v tej matriki dobiš podatek, kolikokrat se ti določena številka ponovi
2. Pri pogojnem oblikovanju najprej določiš obliko za eno celico (na primer A1), upodabiš "Uporabi formulo za določanje celic za oblikovanje" in vneseš formulo =COUNTIF($A$1:$D$5;A1)>1, določiš barvo pisave ali/in barvo polnila za to pravilo. Nakar prekopiraš in posebno prilepiš še samo oblike na ostale celice.

Predno daješ ocene o nekem orodju se je dobro predhodno pozanimati, čemu je to orodja namenjeno in kakšne so vse možnosti dela s tem orodjem. Kajti pri tebi sem opazil da se na muho spravljaš z kanonom(za enostavne stvari se siliš z makroji).
Iz svojih izkušenj ti lahko povem da se v excelu veliko problemov da rešiti brez pisanja makrojev. čeprav poznam makroje v excelu jih uporabljam samo izjemoma, če res drugače ne gre.
No comment

Zgodovina sprememb…

  • spremenilo: smetko ()

smetko ::

Da se samodejno posodobi sta lahko dva pristopa in sicer:
1. Napišeš svojo funkcijo, katero nato uporabiš http://office.microsoft.com/en-us/excel...
2. Napišeš proceduro, katera se izvede ob vsaki spremembi katerekoli celice v delovnem listu. pomagaj si z googlom z Worksheet_SelectionChange.
No comment

švrk ::

smetko hvala za uporabne namige in nasvete.

Glede muhe in kanona:) morda res izgleda tako, vendar sem ta primer s vsotami in nakljucnimi stevili dal samo zato, da vidim kak excel funkcionira in kako je s vhodnimi podatki v funkcijo oz. kakšna je sploh interakcija med kodo in celicami. Priznam, da sem malo len in bi rad to osvojil precej na horuk, še posebej ker te reči znam delat z javo in mi osnovna programerska logika ni tuja.

Na naslednjem koraku sem želel naredit statistično simulacijo verjetnosti, da ima N oseb na isti dan rojstni dan. Zato sem naredil matriko 6*6 in me je zanimalo kako bi preveril če sta dve cifri enaki. Ker nisem poznal ukaze sem hotel v macroju napisat funkcijo, ki bo to preverila. In potem sem kaj kmalu izgubil živce ker nisem kmalu pogruntal kaksen je logični operator != v excelu:)
Sem pa opazil da je v excelu preklemano slab generaor naklučnih števil razen, če sem kaj narobe naredil.
Vpisal sem takole Int((365 * Rnd) + 1). Fora je, da če je 23 ljudi na kupu je že več kot 50% da imata vsaj dva na isti dan rojstni dan. Generator mi pa meče precej različna števila.

Sicer pa makroje rabim zato, ker bom kasneje excel uporabljal za bolj kompleksne stvari. Kot so 0/1 nahrbtnik, optimalno množenje zaporedja matrik, razveji in omeji(RIO), diferencialne enačbe in podobne štale, kar pa se mi zdi, da brez makrojev ne bo šlo.

smetko ::

Pri vseh basicih (tudi VBAju), če hočeš vsaj približno dobiti naključno vrednost, moraš predhodno poklikcat funkcijo randomize
Še iz excelovega helpa:
Randomize uses number to initialize the Rnd function's random-number generator, giving it a new seed value.

Za zahtevne matematične operacije se pa raje drži mathlaba, je veliko bolj prilagojen takim nalogam. Excel je prilagojen računovodjem, kateri pa se v makroje niti slučajno ne poglablajo. Makroji so bolj dodatek, če slučajno kakšna funkcionalnost v osnovi ni pokrita, da jo je možno dograditi.
Excel si je najbolje predstavljati kot veliko tablo, kjer je v lahko v vsaki celici vrednost ali pa neka funkcija. funkcije pa vračajo samo eno vrednost, katero je celica sposobna pokazati. Dodanih je nekaj funkcionalnosti za obdelavo več podatkov kot so vrtilna tabela, filtri,... vendar so te zadeve bolj za osnovne finančne seštevke kot za matematične analize.
No comment

švrk ::

Pri vseh basicih (tudi VBAju), če hočeš vsaj približno dobiti naključno vrednost, moraš predhodno poklikcat funkcijo randomize
Še iz excelovega helpa:
Randomize uses number to initialize the Rnd function's random-number generator, giving it a new seed value.

Se mi je zdelo, da more bit nekakšna fora ker števila, ki jih je metal so bila vse prej kot naključna. Drugače pa bo res najbolje, da ne izgubljam kaj preveč časa z excelom. Zgleda, da je to res programček za uradničke:), čeprav se nekatere stvari zelo lepo elegantno rešijo, samo kot praviš za kake posebne funkcije pisat je pa res hlodast:)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Calc/excel delo s tabelo

Oddelek: Programiranje
131358 (1125) salabajs
»

[Excel]Kako izvleči vrednost?

Oddelek: Programiranje
223651 (3374) Mobidick
»

[Excel]Vrednost celice = ime dokumenta

Oddelek: Programska oprema
314538 (3960) veteran
»

[Excel] Deljenje vrednosti celice in izpis rezultata

Oddelek: Programiranje
102529 (2420) Zupa852
»

Visual Basic in Excel

Oddelek: Programiranje
262510 (2076) Vesoljc

Več podobnih tem