-
Fototrend
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.
Új hozzászólás Aktív témák
-
Delila_1
Topikgazda
-
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("B3542").Select
Selection.Copy
Sheets("Heti_adatbázis").Select
Range("B3").Select
ActiveSheet.PasteEz 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
-
Apollo17hu
őstag
válasz Fire/SOUL/CD #11998 üzenetére
királyság
-
perfag
aktív tag
válasz torment #12009 üzenetére
Az a helyzet, hogy én nem értem (ez persze nem meglepő, ennyi IQ-cskával amennyi nekem van .
"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. -
Delila_1
Topikgazda
válasz torment #12009 üzenetére
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.
-
torment
csendes tag
válasz perfag #12011 üzenetére
Köszönöm a gyors reagálást.
Adott egy Lemez_Spc munkalap, adatokat kell átírni B3542 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, AF19A 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.
-
perfag
aktív tag
válasz torment #12013 üzenetére
Ú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. -
Delila_1
Topikgazda
válasz torment #12014 üzenetére
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 SubSzerk:
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.
-
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 - qEzen 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 - qTö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 3név2 - adat 4
név2 - adat 5
név3 - adat 6ezt csinálja:
név 1 - adat 1 - adat 2 - adat 3
név 2 - adat 4 - adat 5
név 3 - adat 6 -
Delila_1
Topikgazda
válasz erich85T #12018 üzenetére
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 SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
perfag
aktív tag
válasz torment #12016 üzenetére
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 -
torment
csendes tag
válasz Delila_1 #12020 üzenetére
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_hetiElőre is köszönet.
Torment
-
Delila_1
Topikgazda
válasz torment #12026 üzenetére
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.
-
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!"
-
perfag
aktív tag
válasz Zomb€€ #12032 üzenetére
Igazad van, rossz volt a válaszom. Lehet, de nem úgy.
Google: vba writing data to closed workbookAz 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
-
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:00Az 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 ?
-
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
-
perfag
aktív tag
válasz Aguinaga #12037 üzenetére
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.
-
Aguinaga
őstag
válasz perfag #12040 üzenetére
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
-
torment
csendes tag
válasz Apollo17hu #12036 üzenetére
Köszönöm, tetszik a megoldás.
-
-
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.
-
mArZsi
tag
Sziasztok Excelesek!
Segítséget szeretnék kérni, mert kezdek dührohamot kapni...
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
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.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?!
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 ]
Új hozzászólás Aktív témák
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! LEGOLCSÓBB! Automatikus 0-24
- Canva Pro előfizetés - 1 éves
- Warhammer Online - Age of Reckoning (DE) Collectors Box (Figurával!)
- Adobe Creative Cloud - 2024. 04. 05 - 2025. 04. 05-ig