» »

[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č!
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT

Sc0ut ::

VBA!
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850

dusangonzo ::

Kako pa?
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š.
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850

Zgodovina sprememb…

  • spremenil: Sc0ut ()

karafeka ::

Zakaj pa ne uporabiš vrtilne tabele ?

Je prav za to.

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
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.
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
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.

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.
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.

Isotropic ::

kaj je vrtilna tabela (vsaj kako se rece v ang.)?

imagodei ::

Pivot table

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?
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?
8rda+ rev 2.1 , XP 1662@2312(Thorton) , 1GB Geil Value PC3200 , Gf 6600GT

Zgodovina sprememb…

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
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š.

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.

(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 ...

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

Excel: tiskanje po vrsticah

Oddelek: Pomoč in nasveti
71115 (1028) luksorzi
»

excel IF funkcija

Oddelek: Programska oprema
236574 (3581) Cofko Cof
»

Calc/excel delo s tabelo

Oddelek: Programiranje
131467 (1234) salabajs
»

excel+visual basic

Oddelek: Pomoč in nasveti
101568 (1455) švrk
»

[Excel] problem z makrojem, visual basic (strani: 1 2 )

Oddelek: Programiranje
585704 (5167) steev

Več podobnih tem