-
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
-
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 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 #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 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
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
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
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
Ú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 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
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 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
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
Rossz hírem van, a 2013-as Office-ból kivették ezt az opciót.
-
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
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
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 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 #29921 üzenetére
-
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
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 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
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 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
Ú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 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
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
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 #30335 üzenetére
Közben rájöttem. Előbb gondolkozni kellett volna.
-
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 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 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
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 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
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
Új hozzászólás Aktív témák
- Bivalyerős lett a Poco F6 és F6 Pro
- Kerékpárosok, bringások ide!
- Kecskemét és környéke adok-veszek-beszélgetek
- Kormányok / autós szimulátorok topicja
- Vezetékes FEJhallgatók
- EAFC 24
- Hivatalos képen a Samsung hajlíthatók
- Honor Magic6 Pro - kör közepén számok
- Feltörték a PROHARDVER!-es regisztrációmat! (vagy elvesztettem a belépési emailcímemet)
- Konteó topic
- További aktív témák...
- Bitdefender Total Security 3év/3eszköz! - "Tökéletes védelem most kedvező áron..."
- Game Pass Ultimate előfizetések 1 - 25 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN!
- Windows 10/11 Home/Pro , Office OEM/Retail kulcsok
- Windows, Office licencek a legolcsóbban, egyenesen a Microsoft-tól - 2990 Ft-tól!
- Új, bontatlan World of Warcraft gyűjtői kiadások
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen