Forum » Programiranje » [Excel]Kako izvleči vrednost?
[Excel]Kako izvleči vrednost?
dusangonzo ::
Rad bi iz tabele dobil naslednji podatek, pa mi nikakor ne uspe. Tabela izgleda nekako takole:
KONTO SM VREDNOST
401 100 1230
402 100 2340
403 100 4430
401 101 3420
402 101 3320
403 101 3310
401 102 1120
402 102 4470
403 102 4550
. . .
. . .
Rad pa bi podatek za npr. SM 102 koliko je vrednost konta 403. Probal sem z Vlookup, dget,... pa brez uspeha.
Prosim za pomoč!
KONTO SM VREDNOST
401 100 1230
402 100 2340
403 100 4430
401 101 3420
402 101 3320
403 101 3310
401 102 1120
402 102 4470
403 102 4550
. . .
. . .
Rad pa bi podatek za npr. SM 102 koliko je vrednost konta 403. Probal sem z Vlookup, dget,... pa brez uspeha.
Prosim za pomoč!
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT
Sc0ut ::
najenostavneje:
v prvi column imaš konto, v drugem sm, v tretjem vrednost
Pokni na celice en gumb in ga v build načinu dvoklikni.
Nato vpiši v prostor med private sub... in end
dim a as long
for a = 1 to 5000 ' npr prvih 5000 celic
if cells(a, 2).value = "102" and cells(a,1).value = "403" then
msgbox cells(a,3).value
end if
next a
Nisem glih programer in kaj več ne znam, vendar vem, da to dela. Pač, trotl ziher easy vba.
Si pa še lahko narediš da namesto "102" in "403" daš cells(x,y).value in cells(x1,y1).value in potem v tisto celico vrednosti vpisuješ.
v prvi column imaš konto, v drugem sm, v tretjem vrednost
Pokni na celice en gumb in ga v build načinu dvoklikni.
Nato vpiši v prostor med private sub... in end
dim a as long
for a = 1 to 5000 ' npr prvih 5000 celic
if cells(a, 2).value = "102" and cells(a,1).value = "403" then
msgbox cells(a,3).value
end if
next a
Nisem glih programer in kaj več ne znam, vendar vem, da to dela. Pač, trotl ziher easy vba.
Si pa še lahko narediš da namesto "102" in "403" daš cells(x,y).value in cells(x1,y1).value in potem v tisto celico vrednosti vpisuješ.
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850
Zgodovina sprememb…
- spremenil: Sc0ut ()
dusangonzo ::
Hvala Sc0ut, to dela, ampak jest bi to vrednost rabil v neki celici ne v MsgBox-u. Pa se tega res ne da s standardnimi excelovimi formulami?
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT
Sc0ut ::
Glede excel orodij - Verjetno se da, ampak nimam pojma kako:)
Pol pa na mestu msgbox napiši cells(x2,y3).value = cells(a,3).value
Pol pa na mestu msgbox napiši cells(x2,y3).value = cells(a,3).value
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850
smetko ::
lahko uporabiš tudi filter in sicer.
(Hitri) filter
označiš vse podatke, izbereš filter, dobiš pri vsakem polju gumb z puščico navzdol, in nato to puščico klikneš ter izbereš ustrezen KONTO in SM.
Napredni filter:
nekje na listu ali na drugem listu napišeš v prvi kolono imena polj katera iščeš ter v drugi koloni vrednosti, katere iščeš.
za tvoj primer
KONTO SM
403 102
Izbereš napredni filter.
pod Obseg seznama izbereš tvoje podatke, pod obseg s pogoji izbereš zgornje pogoje, in če hočeš imeti rezultat vedno na istem mestu izbereš še Prekopiraj na drugo mesto, in nato izbereš mesto, kamor se ti prekopira rezultat.
(Hitri) filter
označiš vse podatke, izbereš filter, dobiš pri vsakem polju gumb z puščico navzdol, in nato to puščico klikneš ter izbereš ustrezen KONTO in SM.
Napredni filter:
nekje na listu ali na drugem listu napišeš v prvi kolono imena polj katera iščeš ter v drugi koloni vrednosti, katere iščeš.
za tvoj primer
KONTO SM
403 102
Izbereš napredni filter.
pod Obseg seznama izbereš tvoje podatke, pod obseg s pogoji izbereš zgornje pogoje, in če hočeš imeti rezultat vedno na istem mestu izbereš še Prekopiraj na drugo mesto, in nato izbereš mesto, kamor se ti prekopira rezultat.
No comment
dusangonzo ::
OK ScOut smo že bližje :)
Zdaj imam samo še problem, kako povem VBA, da se podatki nahajajo na drugem listu ali celo drugem dokumentu.
Zaenkrat izgleda takole:
Dim a As Long
Dim b As Long
For a = 1 To 5000
For b = 3 To 6
If Cells(a, 2).Value = Cells(b, 8).Value And Cells(a, 1).Value = Cells(2, 9).Value Then
Cells(b, 9).Value = Cells(a, 3).Value
End If
Next b
Next a
Zdaj imam samo še problem, kako povem VBA, da se podatki nahajajo na drugem listu ali celo drugem dokumentu.
Zaenkrat izgleda takole:
Dim a As Long
Dim b As Long
For a = 1 To 5000
For b = 3 To 6
If Cells(a, 2).Value = Cells(b, 8).Value And Cells(a, 1).Value = Cells(2, 9).Value Then
Cells(b, 9).Value = Cells(a, 3).Value
End If
Next b
Next a
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT
dfajt ::
Meni se zdi še vedno najuporabnejše tako kot je napisal že ScOut s pomočjo makrov. Malce ga je potrebno le prirediti in deluje tako, kot je potrebno. V celico e7 vpišeš konto, v celico F7 pa SM, v celici G7 ti nato izpiše vrednost.
Lahko pa narediš makro tako, da se zažene vsakič, ko spremeniš SM ali konto. To narediš tako, da z desnim gumbom klikneš na ime delovnega lista (spodaj levo) in izbereš View Code. Nato vpišeš:
Ta koda se ti bo zagnala ob vsaki spremembi delovnega lista, a makro se zažene le ob spremembi celic E7 ali F7.
Primer moje tabele je na http://www.shrani.si/f/u/l1/3SapFWir/pr...
Sub najdiVrednost() zadnjaVrstica = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For n = 2 To zadnjaVrstica ' Primerja vrednost Konta in SM s celicama E7 in F7, ter zapiše vrednost v celico G7 If Cells(n, 1).Value = Cells(7, 5).Value And Cells(n, 2).Value = Cells(7, 6).Value Then Cells(7, 7).Value = Cells(n, 3).Value End If Next n End Sub
Lahko pa narediš makro tako, da se zažene vsakič, ko spremeniš SM ali konto. To narediš tako, da z desnim gumbom klikneš na ime delovnega lista (spodaj levo) in izbereš View Code. Nato vpišeš:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 7 And (Target.Column = 5 Or Target.Column = 6) Then najdiVrednost End If End Sub
Ta koda se ti bo zagnala ob vsaki spremembi delovnega lista, a makro se zažene le ob spremembi celic E7 ali F7.
Primer moje tabele je na http://www.shrani.si/f/u/l1/3SapFWir/pr...
dusangonzo ::
Kaj pa je razlika med tem in ScOut-ovim VBA? Ker tisti mi sedaj deluje tako kot mora, samo zanima me še, kako se doda referenco na drug list ali file.
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT
Sc0ut ::
Uporabiš
Dim oExcel As Excel.Workbook
Dim oDataSheet As Object
Set oDataSheet = Excel.Sheets(4) '4 določa kater list
oDataSheet.Cells(a, 3).Value
Ne vem pa kako je z drugim dokumentom.
Dim oExcel As Excel.Workbook
Dim oDataSheet As Object
Set oDataSheet = Excel.Sheets(4) '4 določa kater list
oDataSheet.Cells(a, 3).Value
Ne vem pa kako je z drugim dokumentom.
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850
dfajt ::
Moj makro je pravzaprav malo popravljen ScOut-ov. Dodal sem to, da namesto v MsgBox vrednost napiše v celico in pa da namesto hardcoded vrednosti v if stavku vzame vrednosti celic E7 in F7, ter da se število celic določi glede na velikost tabele in ni potrebno zapisati številke (npr. dodaš vrstico in v makru pozabiš vrednost končne vrstice povečati za 1). Pa dodal sem to, da se ob spremembi vnosa avtomatsko preračuna tudi vrednost.
Sicer pa velja enako kot pri ScOutu. Določiš delovni list (delovni list lahko določiš tudi glede na ime lista: Excel.Sheets("Ime_lista"), kar je morda bolj prikladno, sploh če kdaj zamenjaš vrstni red listov.
Sicer pa velja enako kot pri ScOutu. Določiš delovni list (delovni list lahko določiš tudi glede na ime lista: Excel.Sheets("Ime_lista"), kar je morda bolj prikladno, sploh če kdaj zamenjaš vrstni red listov.
imagodei ::
Pivot table
VBA je fajna stvar, samo res ne vem, zakaj je treba iz konzervo odpirat z macolo?
VBA je fajna stvar, samo res ne vem, zakaj je treba iz konzervo odpirat z macolo?
- Hoc est qui sumus -
dusangonzo ::
Hvala za vso pomoč, sedaj pa imam še eno vprašanje, ki se nanaša na iste podatke.
Podatki (Konto, SM, Vrednost) so izvoženi iz enega programa v Excel. Problem pa je, ker Excel ne "prepozna" vrednosti v stolpcu Konto. Na primer, če dam funkcijo max iz teh vrednosti, mi vrže 0. Kakorkoli spremenim "Format cells" je isto. Tudi če dam recimo tip celice Currency, ne naredi nič. Če pa se postavim v eno izmed celic v stolpcu Konto (v formula bar) in pritisnem Enter, se številka desno poravna in jo vse funkcije v Excelu zaznajo. Problem je, ker bi moral to narediti za vseh 3000+ vrstic, kar pa mi ne diši ravno.
Kakšna ideja?
Podatki (Konto, SM, Vrednost) so izvoženi iz enega programa v Excel. Problem pa je, ker Excel ne "prepozna" vrednosti v stolpcu Konto. Na primer, če dam funkcijo max iz teh vrednosti, mi vrže 0. Kakorkoli spremenim "Format cells" je isto. Tudi če dam recimo tip celice Currency, ne naredi nič. Če pa se postavim v eno izmed celic v stolpcu Konto (v formula bar) in pritisnem Enter, se številka desno poravna in jo vse funkcije v Excelu zaznajo. Problem je, ker bi moral to narediti za vseh 3000+ vrstic, kar pa mi ne diši ravno.
Kakšna ideja?
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT
imagodei ::
Lahko poskusiš s kopiranjem celega stolpca in nato Posebno lepljenje v drug stolpec - pa izbereš ustrezno lepljenje. Potem pa na celem stolpcu nastaviš format tako, da so številke, pobrišeš original stolpec in delaš s tem?
- Hoc est qui sumus -
Sc0ut ::
Posnemi macro, ko na eni celici stisneš enter, pa ga pol priredi za vseh 3000+ :)
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850
dusangonzo ::
imagodei, to ne dela, sem že poiskusil.
macro sem pa nekaj začel, ampak mi še ni ratalo "pritisniti enter". Zaenkrat imam tole, kar seveda v vseh celicah vrne št. 1:
Dim a As Long
For a = 2 To 20
Cells(a, 1).Select
ActiveCell.FormulaR1C1 = "1"
Next a
Nima nihče ideje?
macro sem pa nekaj začel, ampak mi še ni ratalo "pritisniti enter". Zaenkrat imam tole, kar seveda v vseh celicah vrne št. 1:
Dim a As Long
For a = 2 To 20
Cells(a, 1).Select
ActiveCell.FormulaR1C1 = "1"
Next a
Nima nihče ideje?
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT
Zgodovina sprememb…
- spremenil: dusangonzo ()
smetko ::
v tvojem makru spremeni:
ActiveCell.FormulaR1C1 = ActiveCell.FormulaR1C1*1
Sicer meni bolj ustreza sledeč zapis tega makroja:
Dim a As Long
For a = 2 To 20
Cells(a, 1).Value = Cells(a, 1).Value * 1
Next a
brez makroja pa lahko uporabiš funkcijo value
ActiveCell.FormulaR1C1 = ActiveCell.FormulaR1C1*1
Sicer meni bolj ustreza sledeč zapis tega makroja:
Dim a As Long
For a = 2 To 20
Cells(a, 1).Value = Cells(a, 1).Value * 1
Next a
brez makroja pa lahko uporabiš funkcijo value
No comment
maia ::
evo, se ena ne makro ideja:probaj narest stolpec pon enk (1,1,1,1). Potem pa ta konto stolpec kopiraj v ta stolpec enk, ampak ne navaden Paste, ampak "Paste Special" in "Multiply".
karafeka ::
A za besedilo v stolpce si že slišal ?
Podatki --> besedilo v stolpce. Izbereš fiksno in dokončaj.
Če imaš v stolpcu besede s presledki, ti bo besede razdelilo po stolpcih, če pa samo številke, ti pa jih konvertira, tako, da lahko z njimi računaš.
Podatki --> besedilo v stolpce. Izbereš fiksno in dokončaj.
Če imaš v stolpcu besede s presledki, ti bo besede razdelilo po stolpcih, če pa samo številke, ti pa jih konvertira, tako, da lahko z njimi računaš.
Mobidick ::
dusangonzo: hehe, vidim, da si nekje v podobni stroki kot jaz in si skušaš delo olajšat z excelom. Konte imej v celicah tipa "Besedilo". To kar hočeš narediti, je iskanje z dvema pogojema; najprej naj poišče ustrezen konto, potem pa izmed vseh s tem kontom, ustrezno str.mesto. Rezultat mora torej zadostovati obema pogojema.
zgoraj v celico B15 (trenutno kaže rezultat 3310) vstavi kodo:
{=IF(ISNA(MATCH(B13&B14;A2:A10&B2:B10;0));;INDEX(C2:C10;MATCH(B13&B14;A2:A10&B2:B10;0)))}
Formulo vpišeš brez teh zavitih oklepajev na začetku in koncu, vendar namesto z ENTER potrdiš formulo s CTRL+SHIFT+ENTER.
(A)KONTO (B)SM (C)VREDNOST 401 100 1230 402 100 2340 403 100 4430 401 101 3420 402 101 3320 403 101 3310 401 102 1120 402 102 4470 403 102 4550 NAJDI: KTO 403 SM 101 ??? 3310
zgoraj v celico B15 (trenutno kaže rezultat 3310) vstavi kodo:
{=IF(ISNA(MATCH(B13&B14;A2:A10&B2:B10;0));;INDEX(C2:C10;MATCH(B13&B14;A2:A10&B2:B10;0)))}
Formulo vpišeš brez teh zavitih oklepajev na začetku in koncu, vendar namesto z ENTER potrdiš formulo s CTRL+SHIFT+ENTER.
The future is digital!
Zgodovina sprememb…
- spremenil: Mobidick ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Excel: tiskanje po vrsticahOddelek: Pomoč in nasveti | 1089 (1002) | luksorzi |
» | excel IF funkcijaOddelek: Programska oprema | 6536 (3543) | Cofko Cof |
» | Calc/excel delo s tabeloOddelek: Programiranje | 1447 (1214) | salabajs |
» | excel+visual basicOddelek: Pomoč in nasveti | 1550 (1437) | švrk |
» | [Excel] problem z makrojem, visual basic (strani: 1 2 )Oddelek: Programiranje | 5634 (5097) | steev |