PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   Excel, kako prenijeti podatke na drugi sheet (https://forum.pcekspert.com/showthread.php?t=257490)

Kruno M 06.03.2014. 13:02

Excel, kako prenijeti podatke na drugi sheet
 
..ali da zadovoljava uvjet sa prvog sheet-a. Hm...

Podaak na drugi sheet prenosim pomoću IF-a:

Code:

=IF(Sheet1!AD5>0;Sheet1!N5)
E sad ja bi trebao automatski prenijeti sve redove sa sheeta1 na sheet2 koji zadovoljavaju taj uvijet. Tako da mi ne pokazuje FALSE vrijednosti nego samo jedno ispod drugoga pokazuje podatke koje ispunjavaju uvjeti.

Nadam se da kužite :bonker:

:fala:

sodom 06.03.2014. 13:26

Format Painter , zaokružiš- kopiraš, nisam ziher kako radi sa formulama ali probaj.

coconut 06.03.2014. 13:40

Čini mi da može i CTRL+A (copy all) na prvom sheetu, a onda Paste Special na drugi sheet.

Sa_Stilom 06.03.2014. 14:32

Baca ti FALSE jer si krivo postavio formulu.

IF funkcija ima 3 karakteristike
1 TKO,ŠTO,GDJE,KADA,ZAŠTO
2 ŠTO DA RADIM AKO JE TOČNO
3 ŠTO DA RADIM AKO JE NETOČNO

Primjer:
Provjeri da li je A=0, ako je prepiši, ako nije ostavi prazno

Formula:
IF(A=0;A;"")

U tvom primjeru:
=IF(Sheet1!AD5>0;Sheet1!N5;"")


Ja često u sličnim primjerima koristim dvostruki IF, gdje se fokusiram da li je polje koje provjeravam "PRAZNO", tada IF izgleda ovako (radi urednosti):
=IF(A1="";"";IF(A1>0;A1;B1))

U prijevodu:
- Provjeri da li je A1 prazan, ako je, ostavi polje prazno, ako nije...
- Provjeri da li je A1 veći od 0, ako je, prepiši A1, ako nije, prepiši B1


ps: Kod korištenja više IFova unutar IFa često uzmem olovku i papir kako se ne bih izgubio u logici i zagradama i crtam npr:

Code:

IF(nešto;
 DA
 IF(nešto;
  DA
  IF(nešto;
    DA
    NE)))


To bi bilo 35,00 kn na korist mog žiro-računa... ;)

Kruno M 07.03.2014. 08:04

@ Sa_Stilom: Radi meni IF fukcija i bez zadnje karakteristike, te on dodaje defaultnu vrijednost koja je u excelu FALSE.

Rezultat dobijem tipa:

Pero
Marko
FALSE
Ivan
Snježana
FALSE
FALSE
FALSE

A ja bi trebao da dobijem:

Pero
Marko
Ivan
Snježana

Samo IF-ovi koji zadovoljavaju uvjet. Neznam da li je to moguće u excelu uopće i napraviti. Da excel izvrti neku petlju i popunjava redove sa rezultatom koji ispunjava uvjet.

Storno 35,00kn :) - uvjek možeš na čevape doći ako riješim ovo ;)

Gledao sam malo i po prijedlozima od coconut-a i sodom-a ali bezuspješno.

D1viry 07.03.2014. 09:35

Dodaj još jedan IF. Primjer: =IF((tvoja naredba)=FALSE;"";Tvoja naredba).

Sa_Stilom 07.03.2014. 10:03

Ajde ti meni opet fino objasni što ti točno želiš, i što imaš...

Ako sam dobro shvatio:
Imaš Sheet1 u kojem u čelijama imaš određene vrijednosti, tipa
Sheet1!A1=Nina
Sheet1!A2=Marica
Sheet1!A3=Ana
Sheet1!A4=Petra
Sheet1!A5="PRAZNO"
Sheet1!A6="PRAZNO"
Sheet1!A7=Iva
Sheet1!A8=Kristina
Sheet1!A9="PRAZNO"
Sheet1!A10=Nika
Sheet1!A11="PRAZNO"
Sheet1!A12=Sunčica

I ti bi sada htio da ti u Sheet2 baca samo polja koja su ispunjena, tako da rezultat bude:
Sheet2!A1=Nina
Sheet2!A2=Marica
Sheet2!A3=Ana
Sheet2!A4=Petra
Sheet2!A5=Iva
Sheet2!A6=Kristina
Sheet2!A7=Nika
Sheet2!A8=Sunčica

Ako je to ono što želiš, to nećeš moći putem funkcije, nego ćeš morati napraviti petlju putem VBA.

Jesam li dobro shvatio što želiš ? Ako ne, molim te pojasni detaljnije kako bih mogao točno pristupiti zadatku.
Svaki problem se često može riješiti na više načina. Jedan je uvijek najispravniji, a drugi su, kako bih rekao "bending the rules".
Za potrebe "škole" ili "zadatka" često se traži trajno - univerzalno riješenje koje podrazumijeva više-manje što manju, odnosno nikakvu interakciju korisnika, odnosno da "program" napravi sve sam. To se u ovom slučaju postiže VBA. Ako pak to nije takva vrsta zadatka, isti se može riješiti s dodatnom interakcijom korisnika, u ovom slučaju tebe na način koji si već dobio, a to je:

Kad u drugom sheetu dobiješ rezultate s FALSE, označiš cijeli taj stupac, stisneš COPY-PASTE Special->Values, filtriraš samo FALSE, obrišeš te redove (ukoliko u ostalim redovima nema informacija, makneš filter i time ti ostane sve ostalo. No, čini mi se da ovdje nije takva vrsta zadatka i riješenja, nego da se ipak traži VBA petlja. Ako pak imaš informacije u ostalim stupcima, ja takve simple probleme riješavam i bez IFa, tako da cijeli stupac u Sheeta1 kopiram u prazni EXCEL, filtriram prazna polja, obrišem ih, i ono što ostane kopiram u Sheet2. No, rekoh, mislim da to ovdje nije ono što se traži.

Kruno M 07.03.2014. 10:25

Citiraj:

Autor Sa_Stilom (Post 2558902)
Ajde ti meni opet fino objasni što ti točno želiš, i što imaš...

Ako sam dobro shvatio:
Imaš Sheet1 u kojem u čelijama imaš određene vrijednosti, tipa
Sheet1!A1=Nina
Sheet1!A2=Marica
Sheet1!A3=Ana
Sheet1!A4=Petra
Sheet1!A5="PRAZNO"
Sheet1!A6="PRAZNO"
Sheet1!A7=Iva
Sheet1!A8=Kristina
Sheet1!A9="PRAZNO"
Sheet1!A10=Nika
Sheet1!A11="PRAZNO"
Sheet1!A12=Sunčica

I ti bi sada htio da ti u Sheet2 baca samo polja koja su ispunjena, tako da rezultat bude:
Sheet2!A1=Nina
Sheet2!A2=Marica
Sheet2!A3=Ana
Sheet2!A4=Petra
Sheet2!A5=Iva
Sheet2!A6=Kristina
Sheet2!A7=Nika
Sheet2!A8=Sunčica

Ako je to ono što želiš, to nećeš moći putem funkcije, nego ćeš morati napraviti petlju putem VBA.

Jesam li dobro shvatio što želiš ? Ako ne, molim te pojasni detaljnije kako bih mogao točno pristupiti zadatku.
Svaki problem se često može riješiti na više načina. Jedan je uvijek najispravniji, a drugi su, kako bih rekao "bending the rules".
Za potrebe "škole" ili "zadatka" često se traži trajno - univerzalno riješenje koje podrazumijeva više-manje što manju, odnosno nikakvu interakciju korisnika, odnosno da "program" napravi sve sam. To se u ovom slučaju postiže VBA. Ako pak to nije takva vrsta zadatka, isti se može riješiti s dodatnom interakcijom korisnika, u ovom slučaju tebe na način koji si već dobio, a to je:

Kad u drugom sheetu dobiješ rezultate s FALSE, označiš cijeli taj stupac, stisneš COPY-PASTE Special->Values, filtriraš samo FALSE, obrišeš te redove (ukoliko u ostalim redovima nema informacija, makneš filter i time ti ostane sve ostalo. No, čini mi se da ovdje nije takva vrsta zadatka i riješenja, nego da se ipak traži VBA petlja. Ako pak imaš informacije u ostalim stupcima, ja takve simple probleme riješavam i bez IFa, tako da cijeli stupac u Sheeta1 kopiram u prazni EXCEL, filtriram prazna polja, obrišem ih, i ono što ostane kopiram u Sheet2. No, rekoh, mislim da to ovdje nije ono što se traži.


U pravu si što se tiće zadatka. I zadatak je poslovne naravi, davno nema veze sa školom :).

Ja sam za sada to riješio ručno. Prebacim sve na Sheet2 i onda sortiram po stupcima descendig i na početku dobijem rezultate koji su mi potrebni, FALSE ostane na kraju.

A ja sam htio to napraviti da ide automatski.

Ja popunjavam samo Sheet1, automatski prebacujem na Sheet2 i onda sa Sheeta2 automatski popunjavam obrazac na Sheet3. E sad meni je poluautomatski samo Sheet2 gdje moram sortirati da bi dobio na vrhu sve osim FALSE.

Da li se to može pomoću Macroa riješiti ili možda imaš primjer neki i sa VBA. Te da li si radio tako šta?

Sa_Stilom 07.03.2014. 10:39

Nisam maher u VBA, puno googlam googlam dok ne sklepam "kod" koji radi ono što mi treba.

Znam otprilike kako postaviti zadatak, no ne znam ga napisati.

Code:

Sub Zadatak ()
Dim X as ?, Y as ?, Z as ?

X = Sheet1A1
Z = Sheet2A1

i = i + ActiveCell.Offset(1, 0) = 1

If X>0 Then nešto Sheet2A1

nešto nešto idi na početak

...i sad još treba postaviti neki uvijek kada se petlja završava

E sad, koliko sam blizu ili daleko od točnog riješenja, ne bih znao... Više sam matematičar, nego programer i to me koči da napredujem ako programer a i ne interesira me previše programiranje osim kada mi zatreba, a onda završim satima/danima googlajući.

:D

Generalno, putem VBA sve se može riješiti, samo treba to znati postaviti i napisati.


Pokušati ću ovo riješiti jer dobro mi dođe da malo i taj dio nadogradim.

Kruno M 07.03.2014. 10:41

Citiraj:

Autor Sa_Stilom (Post 2558925)
Nisam maher u VBA, puno googlam googlam dok ne sklepam "kod" koji radi ono što mi treba.

Znam otprilike kako postaviti zadatak, no ne znam ga napisati.

Code:

Sub Zadatak ()
Dim X as ?, Y as ?, Z as ?

X = Sheet1A1
Z = Sheet2A1

i = i + ActiveCell.Offset(1, 0) = 1

If X>0 Then nešto Sheet2A1

nešto nešto idi na početak

...i sad još treba postaviti neki uvijek kada se petlja završava

:D

Pokušati ću ovo riješiti jer dobro mi dođe da malo i taj dio nadogradim.

Ja ću ga sad sa VBA auto sortirati (valjda:)), ali bi mi takodjer bilo zanimljivije eliminirati podatke koji su mi nepotrebni.

Isto tako će mi ovo uskoro više trebati, ovo je prvi puta.

D1viry 07.03.2014. 10:47

Ja sam potpuno drukčije skužio zadatak i promašio rješenje, naravno:D.

Sa_Stilom 07.03.2014. 11:19

Citiraj:

Autor Kruno M (Post 2558926)
Ja ću ga sad sa VBA auto sortirati (valjda:)), ali bi mi takodjer bilo zanimljivije eliminirati podatke koji su mi nepotrebni.

Isto tako će mi ovo uskoro više trebati, ovo je prvi puta.

Ja sam često takve zadatke koji mi se recimo puno ponavljaju oko sortiranja i gdje postoji određena forma-standard napravio sa čistim MACRO.

Record -> Zatim napravim što trebam -> STOP, malo još uredim taj kod da se brže odvija, isključim da se ne prikazuje korisniku izvođenje macro, odnosno da se vrši u backgroundu, ubacim neke gumbiće, MesBox, tipa pričekajte, itd itd... i dotlem Excel odradi što treba. Nije super profesionalno riješenje programera, ali često tako riješim ono što mi treba. Ako stvar funkcionira i dobijem ono što trebam, zadovoljan korisnik, zadovoljan ja, sve 5.

Ovdje se spominje sličan zadatak, no trebati ćeš ga doraditi. Više manje ima svega online, rijetko točno ono što čovjek treba, ali komad koda ovdje, ondje i sklepa se. Još ako si uzmeš vremena i shvatiš i naučiš postavljanje varijabli, petlji, if, i, do, loop, itd... i ostale manipulacijske sintakse i formule, onda si car. Meni zatreba tako nešto 1-3 godišnje i onda mi se neda štrebati satima to naučiti, nego kombiniram sve i svašta da dobijem što trebam.

http://stackoverflow.com/questions/1...eet-to-another

Kruno M 07.03.2014. 11:59

Riješeno za sada sa Macro naredbom. Snimio Sortiranje kako sam htio i onda podesio da se pri aktivaciji tog sheeta automatski izvrši taj macro - ručno ali stručno :)

Desni klik na sheet pa View code i onda pase:

Code:

Private Sub Worksheet_Activate()
    Call sort (ime macroa)   
End Sub

Nek se nadje ak nekom zatreba.


@Sa_Stilom: kako si rekao, sve radi, svi zadovoljni.

Ako naletiš na elegantnije riješenje molim te javi, i ja ću svakako.

Sa_Stilom 07.03.2014. 12:26

Daj baci mi taj macro da ga samo pogledam...

Caka kako sakriti izvršenej Macroa:
Code:

Application.ScreenUpdating = False
PS: Ovaj link na Youtube jako detaljno radi objašnjava VBA:
http://www.youtube.com/user/WiseOwlT...?feature=watch

Kruno M 07.03.2014. 13:08

Citiraj:

Autor Sa_Stilom (Post 2559012)
Daj baci mi taj macro da ga samo pogledam...

Eo ga:

Code:

Sub Sort()
'
' Sort Macro
' Macro recorded 07.03.2014 by K
'
' Keyboard Shortcut: Ctrl+k
'
    Range("A2:D218").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub


Sa_Stilom 07.03.2014. 14:25

Citiraj:

Autor Kruno M (Post 2559032)
Eo ga:

Code:

Sub Sort()
'
' Sort Macro
' Macro recorded 07.03.2014 by K
'
' Keyboard Shortcut: Ctrl+k
'
    Range("A2:D218").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub


OK, evo ja sam riješio (ovo je riješeno pomoću gumba, a ti sebi implementiraj kako god želiš) - Ovo je pojednostavljena verzija unutar jednog sheeta, a ti sad sebi gradi tako da ga samo pozicioniraš da iz drugog sheeta provjerava u prvi, te naravno da zadovoljava uvjet koji tebi treba:

Code:

Private Sub CommandButton1_Click()

Dim i As Integer
i = 1

Cells(1, 2).Select

Do While Cells(i, 1) <> ""
If Cells(i, 1) > 0 Then
    ActiveCell = Cells(i, 1)
    i = i + 1
    ActiveCell.Offset(1, 0).Select
Else
  i = i + 1
End If
Loop
End Sub

VBA radi sljedeće:
Provjerava u prvoj koloni od prve vrijednosti (znači kolona A) da li je vrijednost veća od 0

Kolona sadrži:
1
2
-1
-2
3
4
-4
-3
-4
5
6
7
-5
-6
8
9
-7
-8
-9

Ako je veća od nula, prepiši pa se pomakni dalje, ako nije, samo povećaj i

Rezultat je da dobijem (u drugoj koloni (B) samo pozitivne brojeve jedan ispod drugog):
1
2
3
4
5
6
7
8
9

Kruno M 07.03.2014. 19:43

Odlično. Hvala, isprobat ću


Sva vremena su GMT +2. Sada je 17:42.

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