PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Aplikacije (https://forum.pcekspert.com/forumdisplay.php?f=37)
-   -   excel-vba-button (https://forum.pcekspert.com/showthread.php?t=245819)

gorkix 20.03.2013. 20:04

excel-vba-button
 
pozdrav svima,imam jedan problem ,pa ako može pomoć

imam nekoliko čelija u kojima su neki rezultati dobiveni if funkcijama,..htio bih napraviti zbroj višednevnih rezultata.......
zamislio sam to pomoću buttona koji bi zbrajao rezultate,pa me zanima pomoć oko naredba za taj button...

htio bih sljedeće npr.
rezultat iz A1 (if funkcije) da se zbraja u D1
rezultat iz A2 da se zbraja u D2 itd.

mislim da bi to moglo funkcionirati preko vba i butona,tako kad kliknem na button da se zbroji vrijednost iz A1 i D1 i da ta nova vrijednost (zbroj) zamijeni prijašnju vrijednost u D1....isto to i za A2 u D2 itd.

tako bi postigao da u čelijama D1,D2 ostaju rezultati zbrajanja,neovisno o tome što se nekad brišu i dobiju nove vrijednosti u A1,A2 ,a klikom na buton vrijednost se povećava i imao bih rezultat ukupne statistike.

neznam napisati vba naredbu za taj button,pa ako može pomoć oko toga ili neki drugi prijedlog

IvanVk 20.03.2013. 22:01

Citiraj:

Autor gorkix (Post 2362691)
neznam napisati vba naredbu za taj button,pa ako može pomoć oko toga ili neki drugi prijedlog

malo googlanja i prerada makroa (link)

- Kako pribrojiti broj postojećem broju pomoću VBA

gorkix 20.03.2013. 22:56

Citiraj:

Autor IvanVk (Post 2362768)
malo googlanja i prerada makroa

Ivane pretpostavljam po nicku da si mi već pomagao oko exela .

nagooglao sam se ovih dana,al nisam vidio ovaj link...

Hvala ti na pomoći jer mi baš tako nešto treba,.......

p.s.jedino ako se slučajno mogu koristiti nazivi čelija A1,D1 itd kod unosa šta će se zbrajati umjesto a = Worksheets("List1").Cells(1, 1).Value 'celija A1
zbog jednostavnosti,ako ne ,zadovoljan sam i sa ovom pomoći.

IvanVk 21.03.2013. 20:22

Citiraj:

Autor gorkix (Post 2362807)
nagooglao sam se ovih dana,al nisam vidio ovaj link...

Nisi ni mogao jer sam ga napravio radi tebe

Cells(1, 1) označava ćeliju A1 tj. sjecište (red1, stupac1) i tako mora biti

gorkix 21.03.2013. 23:07

da nemaš mene izgubio bi motivaciju za nove tutoriale ;)......krenuo sam nešto praviti,a nisam skoro ništa znao o exelu,....na kraju sam završio izmeđuostalog zahvaljujući i tvojoj pomoći.........

što se ovog tiće ,da se ne mogu koristiti nazivi čelija A1 itd,..ok,...zadovoljavajuće mi je i ovako kako mora biti,......

D1viry 22.03.2013. 00:31

Gle, može se izvest i sa A1, B10 i ostalim oznakama, ali komplicira kod poprilično. Vjeruj mi, radio sam to za neke ljude, ali nema ni smisla ni potrebe.

gorkix 22.03.2013. 22:13

nema veze,samo sam pitao ako može,....zadovoljan sam i sa ovim što je ivan napisao..

gorkix 26.08.2013. 14:14

trebao bih ako može još jedna formula,...
koristio sam (button) formulu za zbrajanje dvije čelije
...........................................
Sub DodajBrojZbroji()
' pribraja broj u celiji A1 (a) broju u celiji D1 (b)
' zbroj se rezultira u celiji D1
a = Worksheets("List1").Cells(1, 1).Value 'celija A1
b = Worksheets("List1").Cells(1, 4).Value 'celija D1
b = b + a
Worksheets("List1").Cells(1, 4).Value = b
'Worksheets("List1").Cells(1, 1).Value = "" 'brise vrijednost u A1
----------------------------------------------------------

pošto mi je sad to potrebno u većem opsegu,nekoliko desetaka stupaca,zanima me da li postoji formula da odmah izračuna sve čelije jednog stupca ili više stupaca i to za svaku čeliju posebno.

u prilogu (slici) sam malo pojasnio što bi želio,tako da ne moram za svaku čeliju posebno pisati naredbu

IvanVk 26.08.2013. 14:53

Citiraj:

Autor gorkix (Post 2449005)
trebao bih ako može još jedna formula,...
koristio sam (button) formulu za zbrajanje dvije čelije

Ne znam zašto insistiraš na VBA makronaredbi za zbrajanje kada imaš SUM formulu

Ako baš želiš pogledaj pri dnu link sa primjerom preko VBA koji je snimljen direktno u Excelu.

gorkix 26.08.2013. 21:16

nisi me izgleda shvatio šta želim,......ovdje se radi o istom principu kao i kod tvog primjera zbroji broj na već postojeći u čeliji,......samo da ne moram pisati za svaku čeliju posebno,pitao sam dal može formula zbroji brojeve iz više čelija (slika-brojevi lijevo) na više čelija (brojevi desno) i da se ti desni uvećaju,i ne suma svih brojeva,..već svaka čelija posebno,........znaći iz primjera čelija b5 se pribraja čeliji h5...b6 pribraja h6...itd.....

trebam više desetaka takvih stupaca,pa za svaku posebnu čeliju je dugotrajno,a pošto su grupirani podaci (redovi,stupci).,možda može brže....

IvanVk 26.08.2013. 22:22

Citiraj:

Autor gorkix (Post 2449216)
...ovdje se radi o istom principu kao i kod tvog primjera zbroji broj na već postojeći u čeliji

ufff
morat ćeš naći nekog tko aktivno programira u VBA

Ovo je primjer za prva dva reda ali to nije dobro jer ti imaš puno redova a uduplavanjem bi se jako puno povećao kod. Ne kažem da možda ne bi uspio riješiti ali bi mi trebalo puno vremena koje sada nemam. Ako ti se nitko ne javi probaj na nekom drugom forumu (da ih ne reklamiram)

Ovo ti je za prva dva reda tri stupca
Code:

Sub DodajBrojZbroji()

' pribraja broj u celiji B5 (a) broju u celiji H5 (b)
a = Worksheets("Sheet1").Cells(5, 2).Value 'celija B5
b = Worksheets("Sheet1").Cells(5, 8).Value 'celija H5
b = b + a
Worksheets("Sheet1").Cells(5, 8).Value = b
'------------------------------------------------------------------
' pribraja broj u celiji C5 (a) broju u celiji I5 (b)
c = Worksheets("Sheet1").Cells(5, 3).Value 'celija C5
d = Worksheets("Sheet1").Cells(5, 9).Value 'celija I5
d = d + c
Worksheets("Sheet1").Cells(5, 9).Value = d
'------------------------------------------------------------------
' pribraja broj u celiji D5 (a) broju u celiji J5 (b)
e = Worksheets("Sheet1").Cells(5, 4).Value 'celija D5
f = Worksheets("Sheet1").Cells(5, 10).Value 'celija J5
f = f + e
Worksheets("Sheet1").Cells(5, 10).Value = f
' pribraja broj u celiji B6 (a) broju u celiji H6 (b)
g = Worksheets("Sheet1").Cells(6, 2).Value 'celija B6
h = Worksheets("Sheet1").Cells(6, 8).Value 'celija H6
h = h + g
Worksheets("Sheet1").Cells(6, 8).Value = h
'------------------------------------------------------------------
' pribraja broj u celiji C6 (a) broju u celiji I6 (b)
h = Worksheets("Sheet1").Cells(6, 3).Value 'celija C6
i = Worksheets("Sheet1").Cells(6, 9).Value 'celija I6
i = i + h
Worksheets("Sheet1").Cells(6, 9).Value = i
'------------------------------------------------------------------
' pribraja broj u celiji D6 (a) broju u celiji J6 (b)
j = Worksheets("Sheet1").Cells(6, 4).Value 'celija D6
k = Worksheets("Sheet1").Cells(6, 10).Value 'celija J6
k = k + j
Worksheets("Sheet1").Cells(6, 10).Value = k
End Sub


gorkix 26.08.2013. 23:39

Ivane,taj način znam od prije,...bilo je za jednu čeliju,ali samo dodajem kako si i ti sad
napravio,......baš sam to htio izbjeći jer imam puno čelija,......zasad je to jedini način koji znam.....a znam ga zahvaljujući tebi i u svakom slučaju bolje išta nego ništa........

sačekat ću još malo,pa ako nitko nezna,..morat ću se uhvatit posla......

rodney 27.08.2013. 10:51

Neznam sintaksu VBA, ali ovako napamet bih rekao da se ono što vam treba zove - petlja. Ako mjenjaš i stupce i retke, onda dvije ugnježđene for petlje.
"VBA for loop" u google.

gorkix 27.08.2013. 18:12

došao sam na jednu ideju za koju možda ima riješenje,.........radi se o selektiranju određenog raspona čelija ,kopiranje njih ,te posebno lijepljenje i zbrajanje sa drugim čelijama,.........na slici sam pojasnio kako to funkcionira i dali se za to može napisati jednostavna komanda za button.......i to bi bilo riješenje za moje pitanje....

IvanVk 27.08.2013. 18:56

Citiraj:

Autor gorkix (Post 2449723)
i to bi bilo riješenje za moje pitanje....

Probaj ovaj kod (primjer imaš ovdje)
Code:

Option Explicit

Sub Pribroji()
    Range("B5:D23").Select
    Selection.Copy
    Range("H5").Select 'prva ćelija u koju se pribrajaju brojevi iz B,C i D stupaca)
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
    Range("B5").Select
End Sub


gorkix 27.08.2013. 21:46

odlično je,........hvala puno na pomoći........

gorkix 28.08.2013. 19:25

evo mene Ivane ponovo....

ovo sam probao na obično upisane brojeve i funkcionira odlično,.......ali danas kad sam pokušao u excelu gdje su mi brojevi dobijeni pomoću if naredbi to ne radi,.....ako možeš malo modificirati komandu za buton ,da koristi vrijednosti čelija,a ne if funkciju.......slika u prilogu......

IvanVk 29.08.2013. 15:42

Citiraj:

Autor gorkix (Post 2450470)
evo mene Ivane ponovo.......slika u prilogu......

Tako je to kada se ne postavi izvorni file (ne slika) sa realnim stanjem i činjenicam :(
A da ne govorim o organizaciji podataka i zahtjevu za nekakav određeni rezultat, jedno rješenje može biti problem za drugo itd ...

Ovo neće ići kako si zamislio. Bar ja ne znam model rješenja na ovaj način kako si ti zamislio. (drugi puta postavi realan primjer za download, da se vidi stvarna činjenica da bi ti netko mogao pomoći ;)
Na ovaj način ako imaš nekakav rezultat dobiven preko funkcije VBA kod je isti (bar kod mene u mojim probama) a formula se uvijek povećava (možda zbog toga što nemam uvid u tvoj realan izvorni file i stvarnu situaciju).
Tu sada ima još jedan eventualni problem (ne znam jer nemam uvid u tvoj original file). Kažeš da imaš funkciju kojom si dobio neke brojeve (koje u kojem stupcu i kakva je funkcija???), ta funkcija ako se nalazi u stupcima H, I i J će biti obrisana jer će VBA macro na njeno mjesto direktno pribrojiti brojeve iz stupaca B, C i D i prikazati samo rezultat.

Zbog toga sam si dao malo truda radi tebe i tvog problema i uz pomoć drugih pronašao rješenje a na ovom linku imaš gotovu datoteku sa primjerom za download i svim objašnjenjima da ovdje ne pišem prevelike litanije.
Vjerujem da znaš da nakon pokretanja VBA makronaredbe nema mogućnosti UNDO buttona. Ako npr. imaš nekoliko stotina redova ili masu podataka i pogriješiš u brzini, nema korak unazad. Tako da ako negdje pogriješiš može biti veliki problem jer ne znaš kako se vratiti nazad na prethodno stanje. Zbog toga je dobro kopirati stanje na kojem radiš da imaš u rezervi.
Na već postojećem linku za download dodao sam primjer sa novim VBA (Sheet2 i Module2) a u tom VBA ima jedan dodatak za kopiranje postojećeg Sheeta prije nego li se macro izvrši, tako da imaš kopiju stanja korak prije. Naravno ove kopije možeš naknadno izbrisati. Taj dio VBA koda je pod komentarima pa ako ga želiš koristiti izbriši apostrof ispred naredbene linije.

Code:

      ActiveWorkbook.Sheets("Sheet2").Copy _
      after:=ActiveWorkbook.Sheets("Sheet2")
'zbog nemogućnosti UNDO vrši se kopiranje Sheeta2 prije izvršavanja makronaredbe
    Sheets("Sheet2").Select 'pozicioniranje na bazni Sheet2

Nadam se da ćeš se snaći. Toliko od mene, pozz

gorkix 29.08.2013. 22:00

Citiraj:

Autor IvanVk (Post 2451046)
Tako je to kada se ne postavi izvorni file (ne slika)
Kažeš da imaš funkciju kojom si dobio neke brojeve (koje u kojem stupcu i kakva je funkcija???), ta funkcija ako se nalazi u stupcima H, I i J će biti obrisana jer će VBA macro na njeno mjesto direktno pribrojiti brojeve iz stupaca B, C i D i prikazati samo rezultat.

Ivane izvorni fajl je velik 38mb......a i osobne je prirode......

stvar je da pojednostavim ovakva

na slici su recimo lijevo označene čelije u kojima su dobijeni rezultati pomoću if funkcija.......i ti rezultati se trebaju pribrojiti čelijama na desnoj strani,.....ručno to ide tako da se lijevo čelije oznaće stisne kopiraj ,oznaći se prva čelija na desnoj strani i stavi točka na vrijednosti i zbroji i ok,....mora tako jer ako se ne stavi na vrijednosti on prekopira formule iz lijeve strane,........
i za to sam pitao komandu za button,.......
a probat ću i ovaj način koji si napravio iako na prvi pogled vidim da kod tebe je primjer gdje se obični brojevi dodaju brojevima sa if funkcijama,..

meni treba obratno..........

IvanVk 30.08.2013. 14:32

Citiraj:

Autor gorkix (Post 2451334)
Ivane izvorni fajl je velik 38mb......a i osobne je prirode......

To nema veze. Uvijek se može obrisati višak i ostaviti 10 redova a uz to promijeniti vrijednosti, naslove, nazive, imena itd ...
Na taj način brže se dolazi do krajnjeg cilja i pomoći.

Probao sam i ovaj način da su mi IF funkcije u lijevoj strani i da se pribrajaju vrijednosti na desnu stranu gdje su fiksni brojevi i ja ne vidi nikakav problem. No dobro probaj ovaj novi VBA valjda će ti biti od pomoći, a ako ne, sorry ja više nemam ideja.
pozz

gorkix 01.09.2013. 18:59

nisam još probao jer nemam vremena,......ali u svakom slučaju hvala na pomoći.......


Sva vremena su GMT +2. Sada je 06:54.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger