- Asszociációs játék. :)
- Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Fűzzük össze a szavakat :)
- Mindent a StreamSharkról!
- Szólánc.
- Bambanő háza tája
- Nagy "hülyétkapokazapróktól" topik
- Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- PLEX: multimédia az egész lakásban
- Ingyen kellene, de tegnapra
-
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.
Új hozzászólás Aktív témák
-
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 ]
-
m.zmrzlina
senior tag
válasz
Delila_1 #29427 üzenetére
Közben rájöttem (és megint tanultam valamit) hogy a rng_Dkioszt és rng_Akioszt objektumváltozó deklarálásával volt gond. Én azt gondoltam (helytelenül) ha én pl deklarálom - hogy a példáddal éljek -
Set rng_Dkioszt = Range("E2:E15")
tartományt akkor ott pl az E2 cellának a .Row tulajdonsága 1 lesz hiszen abban a tartományban az az 1. sor. Na hát ez nagyon nem így van.Köszi a választ!
-
m.zmrzlina
senior tag
For Each rng_Tempcell In rng_Dkioszt
If rng_Tempcell.Value = int_Csomag Then
If rng_Tempcell.Value <> "" And rng_Akioszt.Cells(rng_Tempcell.Row, 1).Value = "" Then
If Application.WorksheetFunction.CountIf(rng_Csatkimarad, ws_Kabelo.Cells(rng_Tempcell.Row, 1).Value) = 0 Then '
str_kodsor_csatlist = str_kodsor_csatlist & Trim(ws_Kabelo.Cells(rng_Tempcell.Row, 1).Value) & " + "
End If
End If
End If
NextA fenti programrészlettől a következőket várnám:
-menjen végig az rng_Dkioszt nevű tartomány összes celláján
-ha az rng_Akioszt tartományban a vizsgált cellával azonos sorban különbözőséget talál akkor történjen valamiA probléma, hogy a
If rng_Tempcell.Value <> "" And rng_Akioszt.Cells(rng_Tempcell.Row, 1).Value = "" Then
feltételnél amikor a rng_Tempcell.Value még csak az x-dik sor értékét tartalmazza akkor a rng_Tempcell.Row már az X+1-dik sor számát tartalmazza. Másképpen ha a rng_Tempcell.Value=1 a rng_Tempcell.Row=4. Vagyis nem annak az elemnek az értékét adja vissza amit vizsgál hanem az egyel korábbit.
Mitől lehet ez?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #29419 üzenetére
A kérdés tárgytalan. Probléma megoldva. Főleg, hogy a kérdésben benne van a válasz is.
-
m.zmrzlina
senior tag
Tartományt szeretnék definiálni objektumváltozóként.
Ez működik:
Set ws_Csatorna = wb_SPSS_scb.Worksheets("csatorna")
Set rng_Csatkimarad = ws_Csatorna.Range("A1:A101")Ez nem:
rng_Akioszt = ws_Kabelo.Range(str_Akioszt & "2:" & str_Akioszt & int_usor)
rng_Dkioszt = ws_Kabelo.Range(str_Dkioszt & "2:" & str_Dkioszt & int_usor)Ez szintén működik:
rng_Akioszt = ws_Kabelo.Range(str_Akioszt & "2:" & str_Akioszt & int_usor).Select
rng_Dkioszt = ws_Kabelo.Range(str_Dkioszt & "2:" & str_Dkioszt & int_usor).SelectMi lehet a baj?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
pirit28 #29304 üzenetére
Ahhoz munkalaphoz rendeld amin az adataid vannak!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
If Target.Value = "" Then
Target.Offset(0, 1).Value = ""
ElseIf Target.Value = "*hatroff*" Or Target.Value = "*Győr*" Or Target.Value = "*(OE)*" _
Or Target.Value = "*Ford*" Or Target.Value = "*Pors*" Or Target.Value = "*BMW*" _
Or Target.Value = "*AUDI*" Or Target.Value = "*hmmc*" Or Target.Value = "*kms*" _
Or Target.Value = "*Sassenburg*" Or Target.Value = "*Figueruelas*" Or Target.Value = "*Grossmehring*" _
Or Target.Value = "*Sindelfingen*" Or Target.Value = "*Bremen*" Or Target.Value = "*Koeln*" _
Or Target.Value = "*Voelklingen*" Or Target.Value = "*Seat*" Or Target.Value = "*emden*" _
Or Target.Value = "*Genk*" Or Target.Value = "*Daventry*" Or Target.Value = "*VW*" _
Or Target.Value = "*Benz*" Or Target.Value = "*Swarzedz*" Or Target.Value = "*Hannover*" Then
Target.Offset(0, 1).Value = "OE"
ElseIf Target.Value = "*WH*" Or Target.Value = "*W/H*" Then
Target.Offset(0, 1).Value = "W/H"
Else
Target.Offset(0, 1).Value = "DFC"
End If
End If
End Sub -
m.zmrzlina
senior tag
válasz
pirit28 #29300 üzenetére
Nem derült ki a kérdésből, hogy melyik cella tartalmát kell módosítania a képletnek ezért én a D11-es cellára írtam meg a makrót.
Próbáld ki jól fejtettem-e vissza a képletet!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("C11").Value = "" Then
Range("D11").Value = ""
ElseIf Range("C11").Value = "*hatroff*" Or Range("C11").Value = "*Győr*" Or Range("C11").Value = "*(OE)*" Then
Range("D11").Value = "OE"
ElseIf Range("C11").Value = "*WH*" Or Range("C11").Value = "*W/H*" Then
Range("D11").Value = "W/H"
Else
Range("D11").Value = "DFC"
End If
End SubA második ág ahogy látod nem teljes, ha így azt csinálja amit szeretnél akkor ki lehet egészíteni.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
Reinhardt #29275 üzenetére
Részlet a topik Téma összefoglalójából:
– Modulba írás: Alt+F11-re bejön a makró szerkesztő. Bal oldalon ki kell választani a füzetet, majd az Insert | Module menüpontokkal új modult kapunk, ami a bal oldalon látszik, és ki van jelölve. A jobb oldali nagy üres mezőbe kell bemásolni a fórumon kapott makrót. Visszalépve a füzetbe az Alt+F8 előhoz egy párbeszéd ablakot, itt tudjuk kiválasztani és indítani a makrót.
Az angol nyelv itt most nem számít.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
Reinhardt #29271 üzenetére
Ez is valami hasonló, csak ez nem nyomtat, hanem létrehozza a munkalapot amit neked kell kinyomtatni.
Sub letrehoz()
k = 1
For i = 1 To 50
Sheets("Munka1").Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = i
For j = 4 To 22 Step 2
Sheets(Sheets.Count).Range("G" & j).Value = k
k = k + 1
Next
Next
End Sub -
m.zmrzlina
senior tag
válasz
coldfirexx #29251 üzenetére
Én közismerten hajlamos vagyok verébre is makróval lőni de szerintem itt ne ragaszkodj a makrós megoldáshoz. Egyszerűen szűrd le a tartományt a H oszlop IGEN értékeire azután az F oszlop értékeit másold a kívánt helyre. Szerintem ettől egyszerűbb megoldást nem találsz.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz
Fferi50 #29036 üzenetére
Köszi a választ sokat segítettél bár a végeredmény csak nagyon kicsit hasonlít a te tippedre. Ez volt az első verzió:
Sub torolo()
Dim usor As Long, xx As Long
usor = Cells(Rows.Count, 1).End(xlUp).Row
For xx = usor To 1 Step -1
If IsNumeric(Cells(xx, 1)) And Cells(xx, 1).Value = Cells(xx - 1, 1).Value + 1 Then Exit For
Rows(xx).EntireRow.Delete
Next
End SubEzt azonban sok olyan konfiguráció át tudta ejteni ami szemét ugyan de át tudott menni a ciklusban lévő vizsgálaton. Pl a két vagy több utolsó szemét sor első cellája üres, vagy csökkenő sorszámozású.
Aztán a másik hiba indikátorra fókuszáltam ti. hogy a hibás sorokban /az eddigi tetöltéseket nézve legalábbis/ mindig van egy üres cella, és 2-3 sornál soha nincs több szemét sor. Ez lett a vége:
Sub tisztit()
Dim holavege As Long, i As Long, j As Integer
holavege = ActiveSheet.UsedRange.Rows.Count
For i = holavege To holavege - 10 Step -1
For j = 1 To 16
If Cells(i, j) = "" Then
Rows(i).EntireRow.Delete
Exit For
End If
Next
Next
End SubLehet, hogy a vége a kettő kombinációja lesz mert ha kiderül, hogy van olyan sor aminek mind a 16 cellájában van adat de az valamiért hibás abban az esetben ez sem tökéletes.
Köszi a tippedet. Vesszen a .Select!
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
Fferi50 #29031 üzenetére
Ez a megoldás azért nem jó mert pl az első képen az utolsó sor is számmal kezdődik de az már szemét kategória mert az eredeti szoftverben a táblázat véget ér az 1781. sornál.
Két szabályszerűséget figyeltem meg eddig. Az egyik amit már írtam, hogy ahol a sorszámozás folytonossága megszakad ott a vége az eredeti táblázatnak illetve hogy a hibás sorokban mindig van legalább egy üres cella, de rendszerint több is.
(A select- eket pedig próbáld meg elfelejteni.)
Pontosan ebben a felejtésben szeretném a segítségeteket kérni.
-
m.zmrzlina
senior tag
Problémám a következő:
Adott egy szoftver amiben a szoftver által előállított táblázatot egy parancsgombbal vágólapra lehet tenni. A táblázat fixen 16 oszlop széles és változó /1700-1800/ sor hosszú. A vágólapra kitett adatot excel munkalapra illesztem további feldolgozásra.
Az a gondom, hogy /nyilván a forrás szoftver hibájából/ a beillesztett tartomány végénre teljesen véletlenszerűen néhány cellában a képeken látható memóriaszemét kerül ami a további feldolgozásban problémákat okoz.
A feladat az, hogy a további feldolgozás előtt ezt a szemetet kitöröljük. Az A oszlop sorszámozást tartalmaz és eddigi tapasztalataim alapján ahol a sorszámozás folytonossága megszakad ott van vége a hasznos adatnak.
Hirtelen az alábbi Móricka megoldás jutott eszembe:
Sub holavege()
Range("A2").Select
Do While ActiveCell.Offset(1, 0) = ActiveCell + 1
ActiveCell.Offset(1, 0).Select
Loop
Range(Cells(ActiveCell.Row + 1, 1), Cells(ActiveCell.Row + 10, 16)).ClearContents
End SubEhelyett kéne egy profibb megoldás. Előre is köszi at ötleteket.
-
m.zmrzlina
senior tag
válasz
the radish #28786 üzenetére
Szivesen.
-
m.zmrzlina
senior tag
válasz
the radish #28782 üzenetére
Próbáld a következő egyéni formátumkóddal:
000;-00
-
m.zmrzlina
senior tag
Hogyan tudom beállítani az AutoFit tulajdonságot egy cellára?
Nem a sor/oszlop azonosítók közti duplakattra gondolok, hanem hogy automatikusan történjen az AutoFit ha szükség van rá. Régen volt ilyen egy munkalapomon de nem tudom hogyan lehet beállítani.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
RedHarlow #28686 üzenetére
Feltételezem, nincsen olyan emailcím az 1000 között aminek azonos az első öt karaktere. Ez esetben csinálj egy segédoszopot, modjuk az E oszlopba a következő képlettel:
E1 képlete:=BAL(A1;5)
Ezt másold le az email címlista aljáig. Azután akár el is rejtheted az oszlopot.C1 képlete:
=HAHIBA((INDEX(A:A;HOL.VAN(B1;E:E;0)));"")Ezt másold le a C20-ig. /vagy addig amennyi rövidítésed van/
Ha mégis van olyan email cím aminek azonos az első öt karaktere akkor az első előfordulást fogja eredményként adni.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
poffsoft #28655 üzenetére
Az XP-ig része volt a windowsnak egy clipboard viewer de ez úgy tudom a win7-től már nincs. Gondolom vannak ingyenes külső programok a neten erre a célra.
A képet nem tudom milyen formában akarod használni de a szokványos cellatartalmat a szokványos módon lehet hozni-vinni. A teljes sor is egy Range
-
m.zmrzlina
senior tag
válasz
elttiL #28650 üzenetére
Akkor még egy javítás. Ha a :
holavege = Range("A:A").Find(What:="beillesztési pont", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
változatot választod akkor a "beillesztési pont" részt írd át "XXX"-re. Én azt gondoltam, hogy a beillesztési pont maga a cellaérték. Nyilván ezt nem fogja megtalálni ha XXX-szel van megjelölve a vége.
Még egy dolog: ha aaz XXX minden esetben az utolsó sorban van akkor a
holavege = Range("A" & Rows.Count).End(xlUp).Row
változat is működik.
-
m.zmrzlina
senior tag
válasz
elttiL #28644 üzenetére
Bocs én voltam a béna.
A:
holavege = Selection.Find(What:="beillesztési pont", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Rowsor helyesen így néz ki:
holavege = Range("A:A").Find(What:="beillesztési pont", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
Ekkor nem az aktuális kijelölésben keres hanem az A oszlopban.
-
m.zmrzlina
senior tag
válasz
m.zmrzlina #28647 üzenetére
De ha így próbálod meghatározni az utolsó sort az is működhet.
Sub beilleszt()
holavege = Range("A" & Rows.Count).End(xlUp).Row
Worksheets("Munka1").Range("A" & holavege).PasteSpecial Paste:=xlPasteAll
End SubEz persze csak akkor működik, ha a Beillesztési pont mindig az A oszlop legutolsó cellájában van.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz
elttiL #28644 üzenetére
Ez volt az eredeti kérdésben:
A cellába be van írva, hogy "Beillesztési pont". Ez az A oszlopban bárhol lehet, ide kerül beillesztésre a vágólapon levő tábla
Ez a mostani állapot:
Töküres táblában próbáltam ki,
Azért akad ki mert a töküres táblában sehol nem találja a "Beillesztési pont" cellaértéket.
Azt írod:
no ennek a vágólapon levő táblának az utolsó A oszlopos cellája ugyancsak tartalmazza a "Beillesztési pont" tartalmat,
Írd be az üres táblába A1-be hogy "Beillesztési pont" /kisbetű-nagybetűre figyelj!!!/ és úgy próbáld. Az első beillesztett tartalom után ez már nem fog problémát okozni.
[ Szerkesztve ]
Új hozzászólás Aktív témák
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- AMD GPU-k jövője - amit tudni vélünk
- eBay
- Windows Insider Program
- Sütés, főzés és konyhai praktikák
- Steam topic
- Csak egyfajta 5G-t támogat majd az új iPhone SE
- 3DMark Night Raid eredmények (IGP-sek ide!)
- One mobilszolgáltatások
- Kerékpárosok, bringások ide!
- További aktív témák...