Hirdetés

2024. április 20., szombat

Gyorskeresés

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-11-13 08:31:56

LOGOUT.hu

A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.

Összefoglaló kinyitása ▼

Hozzászólások

(#12001) Barnes válasza Delila_1 (#12000) üzenetére


Barnes
aktív tag

sajnos nem jöttem rá :(

(#12002) Delila_1 válasza Barnes (#12001) üzenetére


Delila_1
Topikgazda

Jobb klikk az adatsávokon, trendvonal felvétele. Több félét ajánl fel, amikből választhatsz, azért nem írtam részletesebben.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12003) Barnes válasza Delila_1 (#12002) üzenetére


Barnes
aktív tag

igen, azt megtaláltam, csak sajnos nem jó egyik sem, amiket felajánl.
Esetleg arra tudsz megoldást, hogy két diagramot egyesíteni hogy kell?

(#12004) Delila_1 válasza Barnes (#12003) üzenetére


Delila_1
Topikgazda

Ha a két diagramod egy lapon van, áthúzod a sávokat egyikről a másikra.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12005) Barnes válasza Delila_1 (#12004) üzenetére


Barnes
aktív tag

no igen, viszont az egyik diagramnál úgy van, hogy az adatok függőlegesen vannak a másikban pedig vízszintesen és ha megváltoztatom, akkor teljesen más diagram jön ki. lehet forgatni valahogyan a diagramot?

(#12006) Delila_1 válasza Barnes (#12005) üzenetére


Delila_1
Topikgazda

Muszáj sávdiagramot készítened? Ha terület diagramot csinálsz az adatokból, az megadja a burkoló görbét, és még össze is tudod hozni a két diagramot.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12007) Barnes válasza Delila_1 (#12006) üzenetére


Barnes
aktív tag

megpróbálom!
köszönöm! :)

(#12008) Delila_1 válasza Barnes (#12007) üzenetére


Delila_1
Topikgazda

Sok szerencsét!

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12009) torment


torment
csendes tag

Üdv Mindenkinek !

Örömmel tölt el, hogy rátaláltam erre a Fórumra.

Excel táblázatokat gyakran használok, de eljutottam a felismeréshez a VBA nem erősségem.

Segítsetek makrót írni!

Adatok a hét napjai, naponta három műszak

Feladat adott munkalap kitöltött celláinak átmásolása másik munkalap adott celláiba.

Sheets("Lemez_SPC").Select
Range("B35:F42").Select
Selection.Copy
Sheets("Heti_adatbázis").Select
Range("B3").Select
ActiveSheet.Paste

Ez a makró fut, de az adatokat a Heti_adatbázis lapon más-más helyre kell átírni.

Vagyis 3x7 feltételt kell megvizsgálni és azok szerint 21 helyre kell adatot másolni.

A Lemez_ SPC lapon nem változnak az átírandó cellák. Rendelkezésre állnak kijelölt cellákban a műszakok és a hét napjainak kódjai. (1.2.3. vmint 1.2.3.4.5.6.7.)

Ha valaki tud segítsen!

Előre is köszönet :W

(#12010) Apollo17hu válasza Fire/SOUL/CD (#11998) üzenetére


Apollo17hu
őstag

királyság

(#12011) perfag válasza torment (#12009) üzenetére


perfag
aktív tag

Az a helyzet, hogy én nem értem (ez persze nem meglepő, ennyi IQ-cskával amennyi nekem van :D.
"a hét napjai, naponta három műszak" az a "3x7 feltétel" azt hiszem. Na de hol adod meg ezeket az adatokat? És milyen formában?
"21 helyre kell adatot másolni." - kell, vagy lehet? 21-szer másolod ugyanazt az adatot valahova, vagy egyszer a 21 lehetséges hely valamelyikére? Ez a 21 hely 21 munkalap, vagy egy munkalap 21 különböző lehetséges tartománya? A felépítésről el kellene mondanod egy s mást.

(#12012) Delila_1 válasza torment (#12009) üzenetére


Delila_1
Topikgazda

Addig is, míg Perfag kérdéseire válaszolsz, a másolás egyszerűbb módja

sheets("Lemez_SPC").range("B35:F42").copy sheets("Heti_adatbázis").range("B3")

elegendő.
Ahhoz, hogy ne legyen mindenféle vigyori fej a képletben, ki kell jelölnöd, és a "Konvertálatlan" üzemmódot kell alkalmaznod.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12013) torment válasza perfag (#12011) üzenetére


torment
csendes tag

Köszönöm a gyors reagálást.

Adott egy Lemez_Spc munkalap, adatokat kell átírni B35:F42 cellákból a Heti_adatbázis

munkalap 21 kijelölt cella tartományba. A 21 kijelölt tartomány kiválasztását meg kell

határozni a következők szerint. A hét minden napja és naponta 3 műszak igy jön ki a 21

tartomány. A napok és műszakok kódjai automatikusan generáltak.

Napok kódjai 1,2,3,4,5,6,7 értékek a Lemez_spc munkalap Y6 cellában.

Műszakok kódjai 1,2,3 értékek a Lemez_spc munkalap Y21 cellában.

Olyan makróra lenne szükségem ami figyeli a napok illetve műszakok kódjait és a

Heti_adatbázis lapra átírja az adatokat.

Hétfő, Kedd, Szerda, Csütörtök, Péntek, Szombat, Vasárnap
1. mű B3, G3, L3, Q3, V3, AA3, AF13
2. mű B11, G11, L11, Q11, V11, AA11, AF11
3. mű B19, G19, L19, Q19, V19, AA19, AF19

A 21 hely kijelölése.

Szerintem ennyi elég kell, hogy legyen. Az én IQ közle jár a 60-hoz.

Köszönöm az eddigi fáradozásodat. :R

(#12014) torment válasza Delila_1 (#12012) üzenetére


torment
csendes tag

Köszönöm!

Kipróbálom.

Tanulni tőled Delila öröm. Felveszlek az angyalaim közé.

(#12015) perfag válasza torment (#12013) üzenetére


perfag
aktív tag

Újabb kérdés: látni vélek egy rendezettséget, amit ofszet segítségével ki lehetne használni.
B3 az alap cella, ehhez képest a napok 5 oszloppal tolják el a cél tartományt, a műszakok pedig 8 sorral. Jól látom?
Most még dolgozom (? ha a tanítást annak lehet mondani), dél körül végzek, ha addig DelDelila nem oldja meg, küldöm a kódot.

(#12016) torment válasza perfag (#12015) üzenetére


torment
csendes tag

Igen jól látod.

A lényeg, hogy minden másolás 40 cellát foglal el.

Ez a következőkből adódik óránként 5 mérési adatot viszek be, ez 8 órára számolva 40 adat.

(#12017) Delila_1 válasza torment (#12014) üzenetére


Delila_1
Topikgazda

Nem offset-tel oldottam meg, hanem a több elágazású select case-zel.

A Select Case sorban meg kell adni a figyelendő változót, a Case1, Case2, ....Case7 sorokban pedig azt, hogy melyik érték esetén mit csináljon a program.

Sub Másol()
Dim sor%, oszlop%
Sheets("Lemez_Spc").Select
sor% = Range("Y21"): oszlop% = Range("Y6")

Select Case sor%
Case 1
sor% = 3
Case 2
sor% = 11
Case 3
sor% = 19
End Select

Select Case oszlop%
Case 1
oszlop% = 2
Case 2
oszlop% = 7
Case 3
oszlop% = 12
Case 4
oszlop% = 17
Case 5
oszlop% = 22
Case 6
oszlop% = 27
Case 7
oszlop% = 32
End Select

Range("B35:F42").Copy Sheets("Heti_adatbázis").Cells(sor%, oszlop%)
End Sub

Szerk:
A #12012-es hozzászólásban úgy látszik, mintha 2 sorban lenne megadva a honnan - hova másol, pedig 1 sorba kell írni, közötte szóközzel. Programkódként kellett volna megadnom.

[ Szerkesztve ]

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12018) erich85T


erich85T
csendes tag

Sziasztok! Új vagyok a fórumon. Nem tudom, hogy mennyire nehéz megvalósítani, de ha esetleg van valakinek valami ötlete, esetleg kész megoldása a problémámra azt szívesen fogadnám. A kérdésem excel makro programozása témakörhöz kapcsolódik.

Van két oszlop, az első oszlopban nevek vannak a másodikban meg a névhez tartozó adatok. Valahogy így:

név - adat
a - x
a - y
a - z
b - q
b - w
b - p
b - q

Ezen táblázatot úgy szeretném transzponálni, hogy a név (egy adott sorban) csak egyszer szerepeljen, és az adatok a sorokból, egymás mellé kerüljenek oszlopokba. Így:

a - x - y - z
b - q - w - p - q

Több problémát is meg kellene így oldani a kódolásban:
- a kódnak figyelnie kell az azonos neveket, mivel valamelyik névhez lehet másik névhez meg akár 200 adat is tartozhat.
- ennek megfelelően az egymás mellé kerülő oszlopok száma is változik
- át kell rendeznie a táblázatot,a fenti formának megfelelően stb stb.

Ha valakinek van erre ötlete, hogy miképpen lássak neki, esetleg kész kódja van ehhez azt megköszönném.

Erik

Egyszerűbben írva:

Igen ez stimmel, valóban transzponálásról van szó. Viszont automatizálni szeretném ezt a folyamatot, nekem arra kell egy program, hogy a tartományt kiválassza és a fent leírt elv szerint transzponálja. Nagyon sok sor van a táblázatban, és a tartományok méretei is különböznek. Nekem azt kellene, hogy megvalósítsa a program, hogy kijelölje a megfelelő tartományt, jelen esetemben az egymás alatt lévő azonos neveket. Ehhez a névhez tartozó adatokat pedig egymás mellé oszlopba transzponálja.

tehát ebből:

név1 - adat1
név1 - adat 2
név1 - adat 3

név2 - adat 4
név2 - adat 5
név3 - adat 6

ezt csinálja:

név 1 - adat 1 - adat 2 - adat 3
név 2 - adat 4 - adat 5
név 3 - adat 6

(#12019) torment válasza Delila_1 (#12017) üzenetére


torment
csendes tag

Nagyon szépen köszönöm a segítséget.

A gondolataim elkalandoztak, tudtam elágazásokkal van dolgom de a Select Case nem ugrott be.

Remekül fut a makró.

Köszönöm :C

(#12020) Delila_1 válasza torment (#12019) üzenetére


Delila_1
Topikgazda

Szívesen. El ne fusson a makró! :D

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12021) Delila_1 válasza erich85T (#12018) üzenetére


Delila_1
Topikgazda

A makró egy irányított szűréssel indul, ami az A oszlopban lévő neveket szűri meg úgy, hogy minden név csak egyszer szerepeljen az E oszlopban. Ezután a nevek mellé felsorolja az adatokat.

Sub mm()
Dim sor As Integer, usor As Integer, sor_név As Integer, usor_név As Integer
Dim név, oszlop As Integer

'Irányított szűrés az E oszlopba az egyedi nevekkel
Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"E1"), Unique:=True

usor = Range("E1").End(xlDown).Row: usor_név = Range("A1").End(xlDown).Row

'Kigyűjtés
For sor = 2 To usor
név = Cells(sor, "E"): oszlop = 6
For sor_név = 2 To usor_név
If Cells(sor_név, 1) = név Then
Cells(sor, oszlop) = Cells(sor_név, 2)
oszlop = oszlop + 1
End If
Next
Next
End Sub

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12022) perfag válasza torment (#12016) üzenetére


perfag
aktív tag

Látom mire hazaértem megoldódott a dolog. Annyi baj legyen, ha már belekezdtem itt a kód:
Sub Másol()
Worksheets("Lemez_Spc").Select
sorok = Range("Y21")
oszlopok = Range("Y6")

Range("B35:F42").Copy Worksheets("Heti_adatbázis").Range("B3").Offset((sorok - 1) * 8, (oszlopok - 1) * 5)
End Sub

(#12023) Delila_1 válasza perfag (#12022) üzenetére


Delila_1
Topikgazda

Elegánsabb az én makrómnál. :)

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12024) torment válasza perfag (#12022) üzenetére


torment
csendes tag

Zseniális megoldás.
Köszönöm a fáradozásodat.

(#12025) perfag válasza Delila_1 (#12023) üzenetére


perfag
aktív tag

Ne dicsérjetek, így is el vagyok szállva magamtól! :D

(#12026) torment válasza Delila_1 (#12020) üzenetére


torment
csendes tag

Bejött még egy feltétel az adtok kezeléseben. A gépsorok száma 3.
Így a mérési adatokat 3 külön álló munkalapra kell elhelyezni, attól függően melyik gépsor adatait állítom be. A gépsorok kódja 1,2,3 X15 cellában. Az előző makrót kitudnád bővíteni ezekkel a feltételekkel. A munkalapok neve gép1_heti; gép2_heti; gép3_heti :W

Előre is köszönet.

Torment

(#12027) Delila_1 válasza torment (#12026) üzenetére


Delila_1
Topikgazda

Perfag makrójába írtam be a
lap = "gép" & Range("X15") & "_heti" sort, és a másolásnál a lap helyét ennek megfelelően módosítottam.

Sub Másol()
Sheets("Lemez_Spc").Select
Dim lap As String, sor As Integer, oszlop As Integer

lap = "gép" & Range("X15") & "_heti"
sor = Range("Y21")
oszlop = Range("Y6")

Range("B35:F42").Copy Sheets(lap).Range("B3").Offset((sor - 1) * 8, (oszlop - 1) * 5)
End Sub

[ Szerkesztve ]

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12028) torment válasza Delila_1 (#12027) üzenetére


torment
csendes tag

A gyakorlatlanok nincsenek kudarcra ítélve, ha angyalok segítik őket.

Köszönöm a megoldást. :R

(#12029) Delila_1 válasza torment (#12028) üzenetére


Delila_1
Topikgazda

Szívesen.

Lelki szemeim előtt már látom is Perfagot nagy fehér szárnyakkal. :D

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12030) Zomb€€


Zomb€€
őstag

Lehet olyat csinálni, hogy egy nyitott munkafüzetből egy nem megnyitottba másolok direktbe? Pl. így: Range("A1").Copy Workbooks("d:\user\Documents\MAKRO\teszt02.xls").Sheets("Munka2").Range("A1")

"Egyszer fent...egyszer fent!"

(#12031) perfag válasza Zomb€€ (#12030) üzenetére


perfag
aktív tag

Lehet.

(#12032) Zomb€€ válasza perfag (#12031) üzenetére


Zomb€€
őstag

És hogyan?:DDD Mert a bemásolt kód nekem nem működik :(

[ Szerkesztve ]

"Egyszer fent...egyszer fent!"

(#12033) perfag válasza Zomb€€ (#12032) üzenetére


perfag
aktív tag

Igazad van, rossz volt a válaszom. Lehet, de nem úgy.
Google: vba writing data to closed workbook

Az egyik lehetőség használj ADO-t. Ez a norvég fickó a kedvencem, mert trondheimi (Rosenborg), bár a kommentek szerint nem műxik a kód. Microsoft terméktámogatás, egy ipse, aki ezt tanítja is, ők sem rosszak.

Miért nem jó neked egy ScreenUpdating=False paranccsal elrejteni a fájl megnyitását? Amit nem látok az nincs is :D

(#12034) torment


torment
csendes tag

Beviteli listából választottam eddig műszak számot.

1. műszak 06:00-14:00
2. műszak 14:00-22:00
3. műszak 22:00-06:00

Az operátorok feledékeny emberek ezért felmerült a következő ötlet.

Az aktuális időt kiíratom B6 cellába a MOST függvénnyel, majd a HA(ÉS) függvénnyel össze
hasonlítom az idő intervallumokat.
A várt eredmény nem lett díjazva.

Kinek van megoldása ? :W

(#12035) perfag válasza torment (#12034) üzenetére


perfag
aktív tag

Állj a sarkadra! A beviteli lista nagyon OK, kár piszkálni.

(#12036) Apollo17hu válasza torment (#12034) üzenetére


Apollo17hu
őstag

Ez esetleg?

=HA(ÉS((MOST()-MA())*24>=6;(MOST()-MA())*24<14);"1. műszak";HA(ÉS((MOST()-MA())*24>=14;(MOST()-MA())*24<22);"2. műszak";"3. műszak"))

(#12037) Aguinaga


Aguinaga
őstag

Kéne egy kis help, én úgy tűnik, kevés vagyok hozzá:

2003-as Excelben meglehet-e oldani egy olyat, hogy adott két munkalap:
- elsőn adatok vannak sok-sok sor, soronként 4 db.
- ezen adatokat a második munkalap megfelelő sorába kell átmásolni, majd
- ezen munkalapokat kinyomtatni egyesével (mindig csak egyet, tehát az 1. munkalap első sorának 4 adatát átmásolva kinyomtatni a második munkalapot, majd feltölteni az első adatlap 2. sorával, kinyomtatni, etc, etc). A lényeg az lenne, hogy ez automatikusan menjen, ne kelljen a másolgatni az első lap adatait és utána egyesével nyomtatgatni.

Van valami ötlete valakinek erre?

PSN: OldSlowhand74

(#12038) perfag válasza Aguinaga (#12037) üzenetére


perfag
aktív tag

Nem kell átmásolni, hivatkozni kell az első lapra, az eltolás függvényt használva.

Nálam a 2010-ben ez Eltolás, de a 2003-ban úgy emlékszem Ofszet volt a függvény neve.
Pl. A második lapon az F4 cellába beírom az eltolás értékét. Az első adatsornál ez 0, utána 1, 2 ... ha sok van, akkor betehetsz egy Léptető nyíl vezérlőt.
Ugyancsak a második lapon D4-be beírom: =ELTOLÁS(Munka1!B3;F4;0)
Ez átveszi a Munka1 lapról a B3 értékét és eltolja a sorok számát F4 értékével, most 0-val.

Ezt megcsinálod 4 helyen, utána nyomtatás gomb, léptetés, nyomtatás gomb ...

A léptetés, nyomtatás beírható egy makró For ... Next ciklusába - de minek.

(#12039) Aguinaga válasza perfag (#12038) üzenetére


Aguinaga
őstag

Ksözi, majd kipróbálom, bár ezt a léptető nyíl vezérlőt nem ismerem

PSN: OldSlowhand74

(#12040) perfag válasza Aguinaga (#12039) üzenetére


perfag
aktív tag

(#12041) Aguinaga válasza perfag (#12040) üzenetére


Aguinaga
őstag

Köszi!

Még egy kérdés:
Ha annyiban változott a dolog, hogy nem a sorokat kell átmásolni a második lapra, hanem mondjuk az első lap a2 celláját a második lap d17-esébe, az első lap b2 celláját a második b11-ében, és így tovább a négy adattal, akkor mennyiben változna a megoldás?
Persze az továbbra is áll, hogy az 1. munkalap minden egyes sora után a 2. lapot ki kellene nyomtatni és feltölteni az első lap következő sorával.

PSN: OldSlowhand74

(#12042) torment válasza Apollo17hu (#12036) üzenetére


torment
csendes tag

Köszönöm, tetszik a megoldás. :R

(#12043) perfag válasza Aguinaga (#12041) üzenetére


perfag
aktív tag

Az, hogy a céltartomány nem összefüggő egyáltalán nem érdekes. Az a fontos, hogy a forrástartomány rendezett legyen, mert csak ez teszi lehetővé, hogy egy ciklust működtess, akár így az ofszet segítségével, akár makróval.

(#12044) Zomb€€ válasza perfag (#12033) üzenetére


Zomb€€
őstag

Hú, ezek tényleg nagyon jók, köszi szépen! :R

[ Szerkesztve ]

"Egyszer fent...egyszer fent!"

(#12045) Delila_1 válasza Aguinaga (#12037) üzenetére


Delila_1
Topikgazda

Erre való a Word körlevél funkciója, ami tipikusan az ilyen feladatok megoldására készült.
Körlevél a Wordben, adatok az Excelben.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#12046) Aguinaga válasza Delila_1 (#12045) üzenetére


Aguinaga
őstag

Köszi az infokat mindkettőtöknek, a mai feladatot megoldottam ofszet függvénnyel, de legközelebb, ha lesz hasonló, megnézem ezt a word-körlevél + excel-tábla cuccot is!
:R

[ Szerkesztve ]

PSN: OldSlowhand74

(#12047) Gerisz


Gerisz
addikt

Sziasztok!

Azt sem tudom mit kell keresnem így segítsetek!

Adott egy tábla amiben az első 10 sor szeretném úgy fixálni (vagy mit kell vele), hogy az alattuk lévőkben nyugodtan állíthassam a cella sor és oszlop szélességét, azok fixen maradjanak és ne változzanak.

(#12048) mArZsi


mArZsi
tag

Sziasztok Excelesek!

Segítséget szeretnék kérni, mert kezdek dührohamot kapni... :W
Egyik excel fájlból szeretném behívni a másik excel fájl egyes celláit. Ez így néz ki:
='[fájl.xls]lap'!$A$1 :K
Na most van hogy behívja, van, hogy nem. :(( Ha behívta, de látom, hogy rossz cellát kértem be, mondjuk nekem A2 kell, akkor átírom 2 végűre, de ahogy átírom, már nem azt hozza be, hanem szövegként kiírja a behívás parancsát.
Gondoltam 2010 nyavajája, de 2007-el is ugyanezt csinálja. :O

:F

Most még egy kérdés eszembe jutott:

Van mondjuk sok-sok nevünk egy tartományban. De van, hogy egy név többször is szerepel, több Gipsz Jakabunk van. Hogyan hozhatok létre egy listát, hogy milyen nevek vannak?! :F
Ugye egymás alá bemásolva az összes nevet és utána a többszörösen előfordulókat kitörölni kicsit macerás, főleg, ha mondjuk 2000 név van...

[ Szerkesztve ]

(#12049) Zomb€€ válasza mArZsi (#12048) üzenetére


Zomb€€
őstag

A 2. kérdésedre az Adatok/Ismétlődések eltávolítása lehet segítségedre, feltéve ha a többször szereplő Gipsz Jakab mindig ugyan úgy van írva.

"Egyszer fent...egyszer fent!"

(#12050) bugizozi válasza mArZsi (#12048) üzenetére


bugizozi
őstag

1. kérdésedre: meg van nyitva az az excel is ahonnan veszi az adatot?

VCP7-DCV, CCNA ||| Ami működik, ahhoz nem szabad hozzányúlni!

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.