- Felháborodott az Apple, a Meta az iPhone-felhasználók üzeneteit akarja olvasni
- A luxusmárkáknak kell a bitcoin, az USA jegybankjának nem
- Letiltja az USA a politikusokat a telefonhívásokról és szöveges üzenetekről
- Nagy áttörés jön a napelemek piacán, nem kell annyi hely a paneleknek
- Belenyúlt az USA az Epic Games igazgatótanácsába, nyomoz az NVIDIA
-
IT café
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
-
m.zmrzlina
senior tag
válasz repvez #45415 üzenetére
Tegyük fel, hogy
-H2:H7 tartományban viszel fel adatokat a Munka1 nevű munkalapon
-ENTER-re lefelé ugrik az aktív cella és nem jobbra
-ha nem is írsz minden cellába a H2:H7-be akkor is leviszed az aktív cellát H8-ig
-további ha-k >....< ide
akkor itt egy Móricka megoldás:Private Sub Worksheet_Change(ByVal Target As Range)
Dim holavege As Long
Dim cella As Range
If ActiveCell.Column = 8 And ActiveCell.Row = 8 Then
holavege = Worksheets("Munka2").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Munka2").Range("A" & holavege) = Date
For Each cella In ActiveSheet.Range("H2:H7")
Worksheets("Munka2").Cells(holavege, cella.Row) = Worksheets("Munka1").Cells(cella.Row, 8)
Next
End If
End Sub
Ez azért Móricka megoldás mert csinál olyan dolgokat is amit nem szeretnél, de pontosabb megoldáshoz nekem pontosabb feladat leírás kellene. -
m.zmrzlina
senior tag
válasz Hege1234 #45359 üzenetére
Állnak a gyerekek a tornasorban. (nem mostanság, mondjuk 40 évvel ezelőtt, manapság nem frusztráljuk a tökmagot, hogy ő mindig az utolsó ) Nagyság szerint a legnagyobb áll elöl a legkisebb hátul. A második legnagyobb gyerek a sorban a második. Nálad ez az 55 és a 15 ez rendben van. A legkisebb áll hátul, a második legkisebb előtte eggyel. Nálad a legkisebb a 4 ez oké, a második legkisebb szerintem a 7.
Majd holnap írd meg, hogy a tanárod hogyan értelmezte a feladatot? Nagy összegbe mernék fogadni, hogy hasonlóképpen ahogyan én.
-
m.zmrzlina
senior tag
válasz Hege1234 #45355 üzenetére
Szerintem te félreértetted a feladatot. Az van benne, hogy nagyság szerint az utolsó előtti számot kéri. Nem pedig a C2-C11tartomány utolsó előtti értékét. Ha a második legnagyobb számot a =NAGY() fv-nyel csináltad (én azzal csináltam volna) annak van egy párja =KICSI() Így már szerintem magad is meg tudod oldani.
-
m.zmrzlina
senior tag
válasz Fferi50 #45326 üzenetére
TextToColumns megoldás: ez érdekes, ki fogom próbálni.
AdvancedFilter függvény: lehet ez a legegyszerűbb erre nem is gondoltam
Esetleg csak a feltétel tartományokat beolvasni: ezt nem igazán értem. A bemenő tömbbel nincsen gondom, a kiíráshoz viszont a bemenő tömb sorának minden eleme kell. -
m.zmrzlina
senior tag
Kétdimenziós dinamikus tömbökkel kapcsolatban lenne elméleti kérdésem. Gyakori feladat, hogy nagyobb adattartományokból (pl 10-20 000 sor 5-10 oszlop)kell bizonyos feltételek szerint kiválogatni egyes rekordokat. Én ezt úgy szoktam csinálni, hogy csinálok két tömböt. (pl beTömb, kiTömb)A bemenő tartományt beolvasom a beTömb-be amin azután végigmegyek egy For-Next ciklussal, és ha a kívánt feltétel teljesül azt a rekordot hozzáadom a kiTömb-höz. Ezt úgy teszem hogy előbb a Redim Preserve utasítással megnövelem a kiTomb méretét, majd ezt az új üres tömbelemet feltöltöm adattal.
A probléma itt kezdődik, mivel 2D dinamikus tömbnek nem lehet növelni a sorainak csak az oszlopainak számát. Ezt pl itt olvastam de számos más helyen is ugyanezt találtam. Ezért aztán egy eléggé nyakatekertnek lászó megoldást eszeltem ki. A kimenő tömbhoz hozzáadok egy oszlopot (Redim Preserve.....) ezt az oszlopot feltöltöm a beTömb sora adatával. Így kvázi egy transzponált tömböt kapok amit amikor kiíratok a munkalapra akkor a:
célmunkalap.Range(ahovárakniakarom).Value = Application.Transpose(kiTomb)
sorral itatom ki. Vagyis újratranszponálom a kapott kiTömb-ötAz a kérdésem, hogy lethet-e ezt a feladatot egyszerűbben csinálni, illetve, hogy milyen más megoldások léteznek?
-
m.zmrzlina
senior tag
válasz Fferi50 #45253 üzenetére
Az a baj hogy nincs lehetőségem személyesen ellenőrizni a nyomtató beállításait, de a kolléga azt mondja, hogy az első oldal előtt kétoldalasra állítja de nem nyomtat kétoldalasan. Nem tudom, hogy miért törlődik - ha egyáltalán ez a baja - de kénytelen vagyok hinni neki.
Egyébként a
.PrintOut
metódust használom (paraméter nélkül) és ez az első ilyen makróm amiben nyomtatást használok. Nincsen benne semmilyen gyakorlatom. -
m.zmrzlina
senior tag
Adott egy nagyobb munkalap. Tizenezer sor - az nekem már nagyobb. Erről a lapról bizonyos feltételek alapján össze kell válogatnom több szűkebb listát majd kinyomtatni azt. Ezek a szűkebb listák kb 0 és 200 sor között mozognak. A válogatás és az egyoldalas nyomtatás megy is nincsen vele gond. Viszont egy 200 soros listát nem szeretnék 4 lapra nyomtatni ha kettőre is elfér
A makró úgy működik hogy amint megvan a lista megy a nyomtatóra - ez sokszor 1000-1500 különböző listát jelent - menet közben nincsen ideje a juzernek printer setupot állítgatni.
Kérdésem, hogy meg lehet -e oldani makróból a kétoldalas nyomtatást?
-
m.zmrzlina
senior tag
válasz Fferi50 #43423 üzenetére
Köszönöm, akkor bevezetek még egy névtartományt szerintem az egyszerűbb. Illetve pontosabban a két oszlopból álló évkat-ot szétválasztom két külön névtartományra.
keveredik az angol és magyar szintaktika
Ezt nem értem. Angol excelem van. Az INDEX magyarul angolul is INDEX A MATCH meg nem is kérdés hogy angol. Vagy arra gondolsz, hogy a névtartomány neve ékezetes? -
m.zmrzlina
senior tag
INDEX-MATCH függvényben szertetnék névtartomány második oszlopára hivatkozni, de nem jön össze.
így működik:
=INDEX(évkat;MATCH(D63;alapadatok!$E$1:$E$17;0);2)
Azalapadatok!$E$1:$E$17
tartomány ugyanaz mint az "évkat" névtartomány második oszlopa. Erre lehet-e valahogy hivatkozni úgy hogy "évkat(másodikoszlopa)" vagy erre külön be kell vezetni egy új névtartományt? -
m.zmrzlina
senior tag
válasz Fferi50 #41916 üzenetére
Köszönöm a kimerítő választ. Én magam is azon elvek mentén szoktam szervezni a kódjaimat amiket leírtál. A kérdés egy beszélgetés során vetődött fel és nem tudtam, hogy van-e valami kötelezőség ezzel kapcsolatban. Ugyanis C/C++-ban van ilyen (tudom az egy másik kávéház) sőt vannak egyetemi/főiskolai oktatók akik buktatnak inicializálatlan változók használata miatt.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Köszönöm a választ!
Közben én is közelebb jutottam kicsit. Az eltűnt lista egy másik munkalapra való hivatkozással volt beállítva kb így
=másikMunkalap!$B$2:$B$20
Van néhány másik lista is ezen a lapon amivel nincsenek bajok de ott Named Range (mi ennek a magyar neve?) segítségével van megadva a hivatkozás a másik lapra.
Nem tudom pontosan a kollégának milyen Excel verzió van az új gépén (ezt majd ma kiderítem) de én úgy tudom hogy Excel 2010 után már nem szabad hogy gondot okozzon a közvetlenül tartományra való hivatkozás. De mindegy is a Named Range használata szerintem megoldást fog hozni.
Amit írtál azt is leellenőriztem de az nincsen tekintettel arra hogy milyen formában van megadva a hivatkozás. Ha bekattintom a None opciót akkor az összes lista eltűnik nem csak a tartományra hivatkozó. -
m.zmrzlina
senior tag
Lehet-e az valamilyen biztonsági beállítás eredménye hogy bizonyos gépeken nem jelenik meg egy cellához rendelt validált lista. Korábban jój működő fájl egy gépcsere után nem akar a korábbiakban megszokott módon működni.
-
m.zmrzlina
senior tag
válasz Bobrooney #41892 üzenetére
Igen közben találtam róla valamit én is. Mondjuk elég dodonai:
When you run a macro, all variables are initialized to a default value. The initial default value: for a numeric variable is zero; for a variable length string it is a zero-length or empty string (""); a fixed length string is initialized with the ASCII code 0, or Chr(0); an object variable defaults to Nothing; a Variant variable is initialized to Empty. In numeric context, an Empty variable denotes a zero while in a string context an Empty variable is a zero-length string ("") . A zero-length string ("") is also referred to as a null string. However, it is advised to explicitly specify an initial value for a variable instead of relying on its default initial value.
Szóval csináld ahogy jónak látod! -
m.zmrzlina
senior tag
Létrehozok egy változót (pl Integer vagy Long ). Kötelező-e incializálni és ha igen akkor mire?
-
m.zmrzlina
senior tag
Adott egy több sorból és oszlopból álló input tartomány. A tartomány határait (bal felső cella-jobb alsó cella) a felhasználótól kell bekérni. Az input tartomány minden (nem üres) celláját meg kell vizsgálni és ha a cella értéke még nem szerepel egy listában akkor hozzá kell adni a listához. A listát a felhasználó által kívánt helyre kell kitenni. A kívánt eredmény az M oszlopban látható.
A beépített Advanced filter "Copy to another location" Unique records only kapcsolóval azért nem jó mert itt csak az számít unique record-nak amikor két (vagy több) sor minden egyes cellája egyezik. (
G1:K4
)Ezt sikerült kiötleni:
Sub kivalogat()
Dim honnanvegye As String
Dim hovategye As String
Dim holavege As Integer
holavege = 1
honnanvegye = InputBox("Add meg a vizsgálandó tartományt!")
hovategye = InputBox("Add meg az eredmény helyét!")
Set honnan = Range(honnanvegye)
Set hova = Range(hovategye)
For Each cella In honnan
If cella.Value <> "" Then
If Application.WorksheetFunction.CountIf(hova, cella.Value) = 0 Then
Cells(holavege, hova.Column).Value = cella.Value
holavege = holavege + 1
End If
End If
Next
End SubAz a gondom, hogy elég macerás az inputboxba begépelgetni a tartományok határait, sok helyen lehet téveszteni stb stb...
Kérdésem, hogy van-e módszer arra, hogy úgy kérjük be az input output tartományok határait, hogy a felhasználó egérrel jelölje ki?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Nem képlettel vagy makróval kapcsolatos a kérdésem de mégis excel.
Van a pl Ctrl+F-re felugró popup ablak és annak van egy alapértelmezett mérete amit a bal alsó sarokban megfogva módosítani lehet. Ha a találat nem fér bele ebbe méretbe akkor görgethetővé válik az ablak.
Az lenne a kérdés, hogy el lehet-e valahogy menteni egy custom size méretét ennek az ablaknak, hogy egy hosszabb találati listát alapértelmezetten egyben lehessen látni és ne mindig az ablak átméretezéssel kelljen kezdeni a lista vizsgálatát.
Egyelőre azt sem tudom, hogy egyáltalán Excel vagy oprendszer szinten kell keresni megoldást, bár az Excel Options-ban nem találtam ilyen lehetőséget.
-
m.zmrzlina
senior tag
Adott 12 db nagyjából egységes munkafüzet. Vannak különbségek de van egy tartomány ami mindegyikben cakkra megegyezik. A tartomány maga (amolyan fejléc féle) nem túl nagy,
A1:B135
de ezt a két oszlopot aztán további oszlopok követik, egyik munkafüzetben kevesebb másikban több. A munkafüzeteket több user használja értelemszerűen hálózati meghajtóról.Az a gond, hogy néha módosítani kell ezt a listát (törölni/beszúrni sorokat, vagy csak a A,B oszlopban módosítani az azonosítókat). Természetesen minden módosítást mindjárt mind a 12 fájlban végre kell hajtani.
Mi a legcélszerűbb módja annak, hogy meg lehessen úszni a 12-szeri megnyitom>átírom>mentem műveletet. Oké hogy a fejléc tartomány minden celláját át lehet hivatkozni egy másik fájlból és akkor csak abban az egyben kell módosítani de mi a helyzet a sorok törlése/beszúrása művelettel?
Természetesen a fájlokon valaki úgy dolgozik, hogy a hálózati meghajtóról nyitja meg és oda is ment, van aki a saját gépére másolja ott dolgozik rajta aztán másolja vissza, néha nem is ugyanabba a könyvtárba és nem is ugyanazon a néven mint amin levette.
És persze minél bolondbiztosabb megoldás kellene (ha létezik egyáltalán).
Előre is köszi.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Egy lehetséges megoldás (ha az A:A oszlopban vannak a számok):
=LEFT(A1;LEN(A1)-2) & "90"
Ettől persze szöveggé váltak a számok ami nem baj akkor ha pl raktárnyilvántartás azonosítóiról van szó, azokkal rendszerint ui nem kell matematikai műveleteket végezni.
Ha az eredménybe szám kell akkor meg lehet pl szorozni 1-gyel a fv-t:
=(LEFT(A1;LEN(A1)-2) & "90")*1
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Hol tudom beállítani hogy az Excel teljes ablakban nyíljon meg és ne a Maximize gombbal kelljen kezdeni a munkát?
Nem makróval gondolom megoldani egy adott munkafüzet esetében (ismerem az Application.WindowState = xlMaximized parancsot) hanem rendszerszintű megoldás kellene.
Az összes többi telepített Microsoft termék (Word, Access, Powerpoint stb) teljes ablakban nyílik meg csak az Excellel van gond.
-
-
m.zmrzlina
senior tag
Van egy makróm ami egy emailben html formátumban érkező adathalmazt illeszt be Excelbe vágólapról. A felhasználó a levéltörzset kopizza majd Excelben elindítja a makrót. Az Excel megcsócsálja feltételesen formázza majd a sokkal áttekinthetőbben mint az eredeti formátumban volt megjeleníti .
Van benne az elején egy ilyen sor:
AcvieSheet.PasteSpecial Format:="Szöveg", Link:=False, DisplayAsIcon:=False
Korábban minden felhasználó magyar Excelt használt de szép lassan mindenki áttér angolra. Az angolos változatnál a következő sor működik:
AcvieSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
A kérdésem, hogy a Format argumentumot meg lehet-e adni másképpen (pl számmal) amit mindkét verzió megért.
Ne kérdezd miért ezt a megoldást használtam, régen csináltam.
"Fiatal voltam kellett a pénz"[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz bteebi #31076 üzenetére
Nálam is sok olyan makró működik ami hasonló feladatot lát el. Én úgy oldottam meg ezt a problémát, hogy a makrós munkafüzetbe olvasom be a textfájlt vagy az .xls-t, megcsinálom a fájlon a szükséges dolgokat és aztán elmentem a kívánt formátumba.
Így nem kell pakolgatni a makrót meg nem kell a minden .xls forrásfájlból xlsm-et csinálni. Plusz a makrós munkafüzetbe kiválóan lehet változókat mentegetni, meg a feldolgozáshoz szükséges listákat tárolni.
-
m.zmrzlina
senior tag
válasz sedyke #30816 üzenetére
Ha mindenképpen ha fv-t szeretnél használni akkor itt egy lehetséges megoldás:/A1-ben lévő darabszámot figyeli/
=HA(A1>=30;2;HA(ÉS(A1<30;A1>=12);1;HA(A1<=11;"ide jön a ha fv a méret feltétellel ")))
Ha kicsit profibbat szeretnél és esetleg több feltételt is kell vizsgájni akkor a #30435-ös hszt ajánlom a figyelmedbe.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz alfa20 #30521 üzenetére
Próbáld így:
Worksheets("keres").Range(Cells(2, 1), Cells(usor, 2)).Copy Destination:=Worksheets(1).Range("A2")
Kicsit szebb lenne, ha a cél munkalapnak is megadnád a nevét "idézőjelek közt" és nem index-szel kellene hivatkozni rá. Meg hasznosabb is mert ha valaki elmozdítja az első helyről ezt a lapot akkor is a megfelelő helyre kerül a másolt adat.
-
-
m.zmrzlina
senior tag
válasz mindanee #30430 üzenetére
Igen. Mindig a HA fv hamis ágába teszed a következő feltételt. Figyelj hogy a második fv-től kezdve intervallumot kell megadni. Ezért van az ÉS fv a vizsgálatnál.
A képhez tartozó képlet:
=HA(F2<=B2;F2*B3;HA(ÉS(F2>B2;F2<=C2);F2*C3;HA(ÉS(F2>C2;F2<=D2);F2*D3;F2*E3)))
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Annyira nem fontos, csak érdekességként vetettem fel.
beírsz a kódba egy olyan sort, hogy "Dim Range" (Range nagy betűvel),
Ezért nem értettem a dolgot. Lásd Delila hozzászólását. Nekem ez magától értetődik.
-
m.zmrzlina
senior tag
válasz Delila_1 #30355 üzenetére
Köszi Delila és bocs hogy feleslegesen dolgoztál de nem igazán volt időm részletekbe menően leírni mit akarok. Most kivettem a teljes makróból azt a részletet ami problémás, hogy ne zavarjon hogy mit deklaráltam korábban és hogyan. Így néz ki:
Sub valogat()
Dim int_usor As Integer, int_uoszlop As Integer, int_vege As Integer
int_usor = 135
int_uoszlop = 50
int_vege = 2
'ThisWorkbook.Worksheets(1).Activate
Dim tartomany As range
Set tartomany = ThisWorkbook.Worksheets(1).range(Cells(2, 3), Cells(int_usor, int_uoszlop))
For Each cella In tartomany.Cells
If cella.Interior.ColorIndex = 6 And cella.Value <> "" And Application.WorksheetFunction.CountIf(Worksheets("csatorna").range("D2:D50"), cella.Value) = 0 Then
Worksheets("csatorna").Cells(int_vege, 4).Value = cella.Value
int_vege = int_vege + 1
End If
Next
End SubA makrórészlet feladata az hogy gyűjtse ki az első munkalap egy adott tartományában /range(Cells(2, 3), Cells(int_usor, int_uoszlop))/ a sárga cellaháttérrel jelölt cellákból az ott előforduló összes cellaértéket és készítsen egy listát a "csatorna" nevű munkalap D oszlopába. Természetesen ha a cellaérték a tartományban 50-szer fordul elő a listában akkor is csak egyszer szerepeljen. /ezért van a CountIf a feltételek közt/
A makró működik is ha a kikommentezett sor benne van. Ha azonban nincsen benne akkor a Set tartomany = stb... sornál Application-defined or object-defined errorral kiakad.
Szóval a kérdés az, hogy hogyan lehet megszabadulni a vizsgálandó tartományt tartalmazó munkalap aktiválásától?
Ja és a range ebben a munkafüzetben lévő összes előfordulásánál kisbetűs.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #30343 üzenetére
Hogyan egészítem ki a terulet objektumváltozó deklarálását a példádban, hogy ne a ws_Kabelo munkalap objektumváltozón értelmezze a terulet változót hanem pl mindig az első munkalapon /Worksheets(1)/?
Még egy kérdés:
Van a kódszerkesztőben az a ficsör, hogy beírod kisbetűvel a parancssort és ha rendben van a szintax akkor a megfelelő kezdőbetűk nagybetűre váltanak.Az egy dolog, hogy ebben a sorban a range nem vált nagybetűre de ha beírom nagybetűvel akkor visszavált kisbetűre
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #30335 üzenetére
Szóval az előbbi kérdésben leírt probléma megoldódott a For Each cella In ws_Kabelo.UsedRange.Cells használatával.
Tovább szeretném finomítani a dolgot hogy megadok egy szűkebb tartományt és csak ezen belül szeretnék kerestetni. Ha úgy csinálom pl hogy:
For Each cella In ws_Kabelo.Range("C2:AQ135").Cells akkor műdödik de mivel a kérdéses tartomány mindig más méretű ezért más módszerre van szükség.
Ismerem a tartomány bal felső celláját (ez mindig a C2) illetve integer tipusú változóban megvan, hogy hány sor hosszú és hány oszlop széles a tartomány amiben kerestetni akarok.
Ezek figyelembevételével hogyan adjam meg a For Each cella... sorban a tartomány határait.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #30335 üzenetére
Közben rájöttem. Előbb gondolkozni kellett volna.
-
m.zmrzlina
senior tag
Szeretnék készíteni egy listát arról, hogy egy munkalapon adott háttérszínű cellákban milyen cellaértékek fordulnak elő. Így próbálom:
For Each cella In ws_Kabelo.UsedRange
If cella.Interior.ColorIndex = 6 And cella.Value <> "" And Application.WorksheetFunction.CountIf(Worksheets("valami").range("D2:D50"), cella.Value) = 0 Then
Worksheets("valami").Cells(int_vege, 4).Value = cella.Value
int_vege = int_vege + 1
End If
NextEz a kód a "WorksheetFunction osztály CountIf tulajdonsága nem érhető el hibával kiakad.
Ha a For Each cella In ws_Kabelo.UsedRange helyett
pl: For Each cella In ws_Kabelo.Range("A1:Z100") formában adom meg a tartományt akkor lefut.Mi lehet ennek az oka?
-
m.zmrzlina
senior tag
válasz m.zmrzlina #30147 üzenetére
Na meglett. Ha valaki más is szeretné használni: Ctrl+L
Ez ugyan nem pontosan az amit kerestem mert ennél előbb ki kell jelölni a kitöltendő tartományt úgy hogy a legfelső cellában - vagy ha több oszlopot jelölünk ki akkor a felső sorban - az a tartalom szerepeljen amivel ki akarjuk tölteni a a kijelölt tartományt.
Aztán CTRL+L és ....TADÁÁÁÁM....
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz sztanozs #30146 üzenetére
Ezt ismerem és használom is de itt az Activecell.CurrentRegion.Rows.Count tulajdonság által meghatározott tartomány kitöltése a lényeg. Valami háromgombos kombináció rémlik de képtelen vagyok megtalálni.
Ha végképp nem megy akkor elmentem példában lévő soromat a Personalba csak minek ha van beépített lehetőség
Ha van...?
-
m.zmrzlina
senior tag
Úgy tudom hogy van az excelben egy beépített billentyűkombináció ami az aktív cella tartalmával kitölti az aktív cella alatti tartományt.
Mint a duplakatt a cella jobb alsó sarkán illetve az alábbi sor is ezt csinálja
ActiveCell.Copy Destination:=Range(Cells(ActiveCell.Row + 1, ActiveCell.Column), Cells(ActiveCell.CurrentRegion.Rows.Count, ActiveCell.Column))
Mi ez a bill. komb?
-
m.zmrzlina
senior tag
válasz kiskornel #30021 üzenetére
Na megtaláltam. Itt kezdődött az én problémám.
Bogarászd át a rá adott válaszokat, hátha találsz benne hasznosat!
-
m.zmrzlina
senior tag
válasz kiskornel #30021 üzenetére
Én is jártam már így. Nálam több tízezer cellát érintő formázás okozta a nagy méretet. Itt a fórumon is kaptam hozzá segítséget, ha egy kicsit több időm lesz visszakeresem, hogy pontosan mit.
Addig is csinálj a fájlról egy biztonsági mentést és kezdd el kíirtani belőle a munkalapokat egyesével. Minden törlés után nyomj egy mentést és ellenőrizd a fájlméretet. Ahol számottevően csökken a fájlméret azon a munkalapon kell tovább kutakodni.
-
m.zmrzlina
senior tag
válasz m.zmrzlina #29933 üzenetére
helyesbítés: (lejárt a szerk. idő)
a "Ha jól értem a feladatot van öt terület," helyesen
Ha jól értem a feladatot van három terület,
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Ha jól értem a feladatot van öt terület, mindegyiken öt csoport dolgozik. Egymás munkáját kell leellenőrizniük, sajátjukat nem lehet. Az hogy melyik műszak az most mindegy, egymástól függetlenül lehet kezelni.
Az én táblázatom így néz ki:
A hozzá való makró (magyarázattal) pedig így:
Sub kioszt()
For i = 2 To 52 'a 2.-tól az 52. hétig
For j = 2 To 16 '15 csoportot oszt be
Do
Do
vel_szam = Int(15 * Rnd) + 1 'válasszunk ki egy tetszőleges csoportot
Loop While vel_szam + 1 = j 'de ne az legyen amelyikhez ellenőr csoportot akaronk rendelni (lásd 2. mondat)
If j = 15 And Application.WorksheetFunction.CountIf(Range(Cells(1, i + 2), Cells(j - 1, i + 2)), Cells(16, 3).Value) = 0 Then
'ha a kék_5 nevű csoport még nincs beosztva legkésőbb utolsó előttiként beosztjuk
Cells(j, i + 2).Value = Cells(16, 3).Value
Else
'egyébként véletlenszerűen kapja mindenki a beosztását :-)
Cells(j, i + 2).Value = Cells(vel_szam + 1, 3).Value '
End If
'ha már be van osztva a kiválasztott csoport válasszunk másikat
Loop While Application.WorksheetFunction.CountIf(Range(Cells(1, i + 2), Cells(j - 1, i + 2)), Cells(j, i + 2).Value) = 1
Next
Next
End SubAz a két ronda munkalapfüggvény ott a makróban nem túl elegáns de hirtelen nem jutott jobb az eszembe.
A 6. hét után természetesen még folytatódik a táblázat.
Egy szépséghibája van ennek a megoldásnak, hogy a kék_5-ös csoport a véletlennél egy kicsit nagyobb eséllyel fog a kék_4-es csoporthoz beosztódni ellenőrnek.[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz firemanus82 #29923 üzenetére
Mit értesz azon, hogy "kiválasztom"? Hogyan történik a kiválasztás?
-
m.zmrzlina
senior tag
válasz dellfanboy #29921 üzenetére
-
m.zmrzlina
senior tag
válasz dellfanboy #29919 üzenetére
A filter az szűrést jelent, neked rendezés kell. Az angol verzióban talán Sort. A képen bekarikázva az ikonja.
-
m.zmrzlina
senior tag
válasz dellfanboy #29907 üzenetére
A képen a kétszintű rendezés konfigja látszik. Az első szint Sorrendjénél az Egyéni listát kell választani ahol ki lehet választani a hét napjait. Ha az igazi munkalapodon is ékezetek nélkül szerepelnek a napok akkor előbb létre kell hozni az ékezet nélküli egyéni "hét napjai" listát és azt kell kiválasztani.
-
m.zmrzlina
senior tag
válasz m.zmrzlina #29903 üzenetére
Egy fokkal talán jobb ez a megoldás:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone
Cells.Font.ColorIndex = xlAutomatic
ActiveCell.EntireRow.Interior.ColorIndex = 1
ActiveCell.EntireRow.Font.ColorIndex = 2
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
Egy biztonsági mentés egyik munkalapjához rendeld az alábbi makrót. Ha ilyenre gondoltál akkor tovább lehet gondolni a megoldást. Ha vannak a munkalapon cellaháttér és betűszín beállítások akkor persze bonyolultabb lesz a dolog.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = 2
Cells.Font.ColorIndex = 1
ActiveCell.EntireRow.Interior.ColorIndex = 1
ActiveCell.EntireRow.Font.ColorIndex = 2
End Sub -
m.zmrzlina
senior tag
Rossz hírem van, a 2013-as Office-ból kivették ezt az opciót.
-
m.zmrzlina
senior tag
válasz coldfirexx #29740 üzenetére
Bocs, de te olvsod is ezt a fórumot, vagy csak írod?
Erre a kérdésedre itt már egyszer megkaptad ugyanezt a választ.
-
m.zmrzlina
senior tag
válasz bteebi #29728 üzenetére
Lehet, hogy az adat lapodon lévő néhány cellában van egy-két nem kinyomtatható karakter (pl:szóköz vagy aposztróf). Próbáld ki, hogy lefut-e így:
Sub kivalaszt()
Dim ar As String, lastrow As Double, lr As Double, sor As Double
Dim tiszta As String
lastrow = Sheets("forras").UsedRange.Rows.Count
lr = Sheets("adat").UsedRange.Rows.Count
For sor = 2 To lr
tiszta = Application.WorksheetFunction.Trim(Sheets("adat").Cells(sor, 1))
ar = WorksheetFunction.VLookup(tiszta, Sheets("forras").Range("A1:B" & lastrow), 2, False)
Sheets("adat").Cells(sor, 2) = ar
Next
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
Az alábbi tartományt szeretném rendezni a következőképpen. Legfelülre azok a sorok melyeknél C és D oszlopban is van adat, alá ahol csak a C oszlopban van adat, legalulra ahol csak a D oszlopban van adat.
Hogy lehet ezt legegyszerűbben megoldani?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz coldfirexx #29700 üzenetére
Szerintem a modulodnak amiben a kódod van az a neve, hogy "valasz". A kódban pedig van egy változó ugyanilyen néven.
Valamelyiket nevezd át!
-
m.zmrzlina
senior tag
Úgy értsük, hogy ha 1 karakter a számsor akkor is 3 nullát rakjon meg akkor is ha 6 karakter a számsor?
Esetleg úgy, hogy a 7 karakternél rövidebb számsorokat töltse fel hét karakterre nullákkal?
Az eredménynek ugyanabban a cellában kell megjelennie amiben a rövidebb szám van, vagy mehet másik cellába is?
-
m.zmrzlina
senior tag
válasz Delila_1 #29621 üzenetére
Nagyon köszönöm. Szépen működik. Sok finomhangolni való van rajta olyan dolgok miatt amit nem írtam le a kérdésben (így is hosszú volt) de alapvetően jól dolgozik.
A lényeg, hogy a létrehozott tartományban már sokkal könnyebb automatizálni a keresést és ez nagy segítség.
Köszi még egyszer, jár a
-
m.zmrzlina
senior tag
Azt be lehet állítani valahol, hogy a validált lista lenyíló ablakában hány sor legyen látható egyszerre?
Most nyolcat látok görgetősáv nélkül és legalább tizenkettőt szeretnék. Ha nagyobb tartományt adok meg az adatérvényesítésnél Forrásnak akkor csak a görgetősáv hossza változik de az ablakban egyszerre látszó tételek nem.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Feladat a következő:
Adott egy tartomány pl: A1:Z1. A cellákban szöveg (települések neve). Van cella amiben egy település neve szerepel van amiben ötvené ömlesztve. De szó szerint ömlesztve mert az elválasztó némelyik cellában <szóköz> máshol "," van ahol mindkettő. Ez a három konfig a legyakoribb. Van olyan is ahol semmilyen elválasztó nincs, hacsak a nagy kezdőbetűt nem tekintjük annak Ezeket kellene szétválogatni makróval úgy, hogy a cella oszlopában egyenként egymás alatt legyenek.
Ezt makró nélkül ugye a Szövegből oszlopok parancssal lehet cellánként megoldani (feltéve ha van egyértelmű elválasztó) majd másolás tranyszponálás. Ezt a rögzített makrót azonban nem tudom átírni úgy hogy működjön.
Az is jó lenne, ha keresni tudnék ebben a szénakazalban. Ezzel pedig az a bajom, hogy ha pl Eger-t keresem és az benne van másik tíz településsel együtt egy cellában akkor azt nem találja meg ha be van kattintva a "Ha ez a cella teljes tartalma" box. Illetve ha nincs bekattintva akkor talál még másik n+1-et (pl amiben szerepel Egercsehi, Egerszólát stb...)
Az adatok agyobb része html-ből más része pdf-ből CtrlC-CtrlV-vel lett Excelbe írva ezért a sokféleség.
Valamiért azt érzem, hogy ez nem lesz rövid projekt
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz irodakukac #29599 üzenetére
Egy kicsit más megoldás, ha az eredeti munkafüzetben elnevezed a megnevezés oszlopot pl "original"-nak
A visszaküldött fájl egy szabad oszlopába pedig mehet a következő képlet: /persze csak ha a visszaküldöttben A1-ben kezdődik a megnevezés oszlop.
=HA(DARABTELI(EredetiMunkafüzet2.xlsx!original;A1)=1;"egyezik";"nem egyezik")
-
m.zmrzlina
senior tag
válasz irodakukac #29599 üzenetére
Van képletes megoldás is.
Pl ha egymás mellé tudod másolni a két oszlopot /ha egyáltalán két oszlopról van szó/ akkor a C1 képlete lehet mondjuk:
=HA(A1=B1;"Egyezik";"Nem egyezik")
Ha volna egy szenzitív adatoktól mentes mintafájlod (vagy kettő) akkor többet lehetne mondani.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Digital #29594 üzenetére
Nem látom ugyan a sor és oszlopazonosítókat de tételezzük fel hogy B1-C1-D1 cellákban van a dátum. Ez a kód a munkafüzet összes munkalapjának B1:D1 artományába bemásolja az aktív munkalapodnak a B1:D1 tartományát.
Sub copy()
For Each ws In ThisWorkbook.Worksheets
Range("B1:D1").copy Destination:=ws.Range("B1")
Next
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz irodakukac #29588 üzenetére
Az én egyik munkafüzetemben egy nagyon hasonló feladatot a következő pár sor oldja meg. Ebben a formájában csak gondolatébresztő, egy az egyben nyilván nálad nem használható /még csak azt sem állítom, hogy hibátlan/.
Dim arr_Analist()
Dim arr_Digilist()
Dim int_Hibakszama As Integer
Dim str_Hibahely As String
Dim intI As Integer
' egyik listát tömbbe ír
arr_Analist() = ws_Kabelo.range(Cells(2, 1), Cells(int_usor, 1))
' másik listát tömbbe ír
arr_Digilist() = ws_Kabelo.range(Cells(2, int_uoszlop + 1), Cells(int_usor, int_uoszlop + 1))
'ciklus 1-től a tömb végéig(nálam ugyanannyi elemből áll a két tömb
For intI = 1 To UBound(arr_Analist)
'ha a két tömbelem nem egyezik akkor
If Trim(arr_Analist(intI, 1)) <> Trim(arr_Digilist(intI, 1)) Then
'változó értékét növeli
int_Hibakszama = int_Hibakszama + 1
'megjegyzi hanyadik sorban van a különbség
str_Hibahely = str_Hibahely & intI + 1 & ".sor, "
End If
Next
'ha talált hibát kiírja, hogy mennyit és mely sorokban
If int_Hibakszama > 0 Then
MsgBox "Összesen " & int_Hibakszama & " különbség a következő helye(ke)n: " & str_Hibahely
Else
'egyébként mindenki örül :-)
MsgBox "A kétlista azonos."
ws_Script.Activate
End If -
m.zmrzlina
senior tag
válasz Fferi50 #29484 üzenetére
vagy a tartományt e nélkül definiálod
Ez ezt a hibát generálná amit /számomra/ bonyolultabb lenne eliminálni mint megkerülni a problémát.Helyette....
Mi lenne, ha a keresésnél kihagynád az első oszlop celláit Illetve minden oszlop első celláját.
Ez lett a megoldás.
Köszi. -
m.zmrzlina
senior tag
válasz Fferi50 #29440 üzenetére
Azt sikerült megállapítani, hogy a kb 50 tartományból aminek a
Set rng_Akioszt = ws_Kabelo.range(str_Akioszt & "1:" & str_Akioszt & int_usor)
sor a program futása során egy ciklus értéket ad két olyan esetben akad ki, ahol az rng_Akioszt(1,1) értéke egy 256 karakternél hosszabb karaktersorozat. Valamint bármikor reprodukálni tudom a hibát, ha bármely tartomány (1,1)-es cellájában előállítom a fenti feltételt. Gondolom itt a fv valamilyen korlátjába ütközik a feldolgozás.
Az lenne a feladat, hogy ezekben a tartományokban határozzuk meg a legkisebb és a legnagyobb értékeket amik aztán egy számlálós ciklus -tól -ig határai lesznek. Nem feltétlen ragaszkodom munkalapfüggvényes megoldáshoz, megelégszem a legegyszerűbbel is.
-
-
m.zmrzlina
senior tag
válasz csferke #29449 üzenetére
Automatikus megoldás:/munkalaphoz rendelve a makrót/
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End SubElőnye, hogy a begépelt szöveget <Enter>-re a kívánt formátumra állítja hátránya, hogy .xlsm-ként kell menteni a munkafüzetet.
Feltételes formázásos megoldás:
Itt a usert erőlteted hogy az általad kívánt formátumban vigye be az adatot.
Nem magamtól vagyok ilyen okos innen loptam.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fferi50 #29440 üzenetére
Köszi a választ. Az az érzésem, hogy hosszas hibakeresésnek nézek elébe.
Először a int_Mincsom, int_Maxcsom változó tipusát állítottam Variantra de nem jutottam közelebb. A leálláskor is szám (1 és 9 ami reális) volt az értéke nem pedig hiba.
Aztán egyszer csak elkezdett működni úgy hogy semmit nem módosítottam a kódon és most is lefut akárhányszor indítom.
Az rng_Akioszt -szerintem- létrejön. Locals ablakban látom, sőt a FormulaR1C1 tulajdonságnál látom az elemek értékeit is. Ha erre gondolsz.
Még egy adalék:
Az rng_Akioszt(1,1) értéke szöveg az összes többi szám. Ha ezt a cellát kizárom a tartományból akkor úgy tűnik lefut a makró hiba nélkül ami logikus is. Csak akkor miért működik n+1-szer úgy is, hogy nincs kizárva a szöveges cella?[ Szerkesztve ]
-
m.zmrzlina
senior tag
Set rng_Akioszt = ws_Kabelo.range(str_Akioszt & "1:" & str_Akioszt & int_usor)
int_Maxcsom = Application.WorksheetFunction.Large((rng_Akioszt), 1)
int_Mincsom = Application.WorksheetFunction.Small((rng_Akioszt), 1)A fenti értékadást esetenként valami kiakasztja és az int_Maxcsom = stb...stb... sornál Runtime error '13': Type mismatch hibával megáll. A str_Akioszt egy sztring változó és a hiba jelentkezésekor az értéke: "k"
Most vettem csak észre, hogy a ws_Kabelo.range- ben kisbetűs a Range, mintha az excel nem értné, hogy mit akarok.
[ Szerkesztve ]
Új hozzászólás Aktív témák
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest