-
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 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
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 the radish #28782 üzenetére
Próbáld a következő egyéni formátumkóddal:
000;-00
-
m.zmrzlina
senior tag
válasz the radish #28786 üzenetére
Szivesen.
-
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 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
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
-
m.zmrzlina
senior tag
-
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
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 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 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 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
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 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
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 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
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 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
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
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 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.
Új hozzászólás Aktív témák
- Békésen legelészik a májusi hardvercsorda
- Ukrajnai háború
- Luck Dragon: Asszociációs játék. :)
- Skull and Bones - Egy hétig ingyen játszhatunk vele
- Trollok komolyan
- Kormányok / autós szimulátorok topicja
- Fotók, videók mobillal
- Politika
- Horgász topik
- A PC-ből az asztalunkra is kilép a Noctua
- További aktív témák...
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen