Kezdőlap › Fórumok › Excel programozás › [Resolved] Cellákban lévő karakterek kezelése, másolása
- This topic has 22 hozzászólás, 3 résztvevő, and was last updated 1 year, 10 months telt el by norbifun.
-
SzerzőBejegyzés
-
2023-01-09-16:55 #9500
Sziasztok
Kezdőként kérnék segítséget.
Cellákba írt szöveggel szeretnék manipulálni, de nem igazán találom a megfelelő megoldást.
Pl egy cella tartalma: 241319,-421,535329
Ennek a valós értelmét szeretném külön cellákban, külön oszlopokban szerepeltetni. a valós értékek 241319 241421 535329
Azaz a kötőjel helyén , mindig az előtte lévő számsor első 3 karaktere szerepel.
Van erre valami ötlet? egyáltalán van megoldás ilyen karakterkezelésre?
Válaszokat előre is köszönöm!2023-01-09-19:32 #9501Szia!
Pár kérdés:
– Milyen Excel verziót használsz?
– Az egyes részek mindig ugyanannyi karakter hosszúak-e?
– Jól értem, hogy az egész eredetileg 1 cellában van, és ezt te 3 cellába szeretnéd?
– Tudnál feltölteni mintát, ami több adatot tartalmaz, de valós, vagy ahhoz közeli?Sokszor járunk úgy, hogy egyszerűsített adatot és kérdést kapunk, dolgozunk vele, majd kiderül, hogy nem is az a feladat valójában, ami a kérdésben szerepelt.
Feltételezve, hogy 1 cellában van és 3 cellát szeretnél, de nem fix a részek hossza, de a szabály az, amit írtál én ezt csinálnám:
1. Vessző mentén szétbontanám 3 oszlopra (Pl. szövegből oszlopok / Text2Columns paranccsal), esetleg a 356-ös Excel erre való függvényével úgy, hogy mindegyik szöveges maradjon
2. Kivenném a kötőjelet a középső elejéről (HELYETTE / SUBSTITUTE függvény)
3. A középső elejéhez fűzném az első elejét (BAL/LEFT és összefűzés & jellel)A válaszok és minta után konkrét megoldás is születhet.
Imre
2023-01-10-08:07 #9502Szia
Köszi a választ
MIcrosoft 365 -öt használok.
Általában igen, 6 számjegyből álló karakterek vannak benne, ha nem akkor van a kötőjel
Jól érted, egy cellában van. Ezt kell nekem kibontanom, és egy másik munkafüzeten elhelyezni 3 különböző cellábanTöltök fel most mintát.
A megoldás jó lehet, de mellette rengeteg művelet van, így biztosan csak a makró lehet megoldás.
A táblázat maga 44 ezer sor, amivel dolgozom. 🙁
A feladat az, hogy a második lapfül M oszlopában lévő adatok, az első lapfül c,d,e,f oszlopába kerüljön. mindegyik egy helyre. Azért a négy oszlop, mert ha négy adat van mindegyiknek legyen helye.
Ha lehet akkor azzal is bonyolítanám, hogy csak az esetben, ha esetleg egyezőség van a behelyezendő adat és a meglevő adat között, akkor ne csináljon semmit, ha nincs akkor az első üres oszlopba helyezze be az adatot
Köszönettel2023-01-10-08:08 #9503Nem sikerült a feltöltés, még egyszer
Attachments:
You must be logged in to view attached files.2023-01-10-10:53 #9505Makrós fájlt csak ZIP formátumban lehet feltölteni.
Megint bebizonyosodott, hogy csak egy részfeladatra érkezett a kérdés.
Abban a bizonyos M oszlopban feldolgozhatóság szerint nem konzisztens adatok vannak.211853+263018 A + jel micsoda, Elválasztó? C és D oszlopokba kerülnének? 236321 236332 Ugyanez a kérdés a szóközre 240543/240544 Itt meg a slash-re 241003,263018 Nahát, itt meg egy vessző van! 241735 + 241737 Még jobb, a szóköz-pluszjel-szóköz 241861,-879,240475 Végül itt az eredeti kérdés mintája, megint vesszővel
Így meglehetősen problémás, ezt valahogy egységesíteni kellene, vagy minden létező esetet és a hozzá tartozó szabályt megadni.
Most az jutott eszembe, hogy lehetne csinálni egy kis segédtáblát, ahová felsorolod egymás alatti cellákba az összes lehetséges elválasztójelet, és képlettel vagy makróval minden elválasztót vesszőre cserélni. Ezután már egységesen lehetne tovább haladni, s szétdobni annyi oszlopra, amennyi vessző van benne.Imre
2023-01-10-14:17 #9508Szia
A karaktereknek nincs semmi tudományos értékük, az nem jelentenek sem ÉS -t , VAGY-t, nincs logikai tartalmuk.Én is pontosan ebbe az irányba indultam el. Az alábbi szösszenettel:
Sub UtódcikkszámokMeghatározásaAzÚjListában()
‘ mivel először a számokat ésszerű allpotba kell hozni, így szöveggé kell formázni az oszlopot
Sheets(„Új betöltendő árlista”).Select
Range(„M2”).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = „@”
‘Változók felvétele
‘melyik sorban keresünk
Dim i As Long
i = 2
‘milyen karaktert keresünk (k1=+;k2=szóköz;k3=/)
Dim k1 As String
k1 = „+”
Dim k2 As String
k2 = ” ”
Dim k3 As String
k3 = „/”
‘mire akarjuk cserélni (+ helyett vessző (v); szóközhelyett semmi(s); / helyett vessző(v))
Dim v As String
v = „,”
Dim s As String
s = „”‘ a kötőjel helyére irandó karakterlánc
Dim cikkszameleje As StringSheets(„Új betöltendő árlista”).Select
Do Until Sheets(„Új betöltendő árlista”).Cells(i, 1) = „”If Cells(i, 13) <> „” Then
cikkszameleje = Left(Cells(i, 13), 3)
Cells(i, 13).Value = Replace(Cells(i, 13), „-„, cikkszameleje, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), k1, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), k3, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), k2, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), „OD.”, v, 1)Cells(i, 13).Value = Replace(Cells(i, 13), „,,,,,,,,”, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), „,,,,,,,”, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), „,,,,,,”, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), „,,,,,”, v, 1)
Cells(i, 13).Value = Replaccele(Cells(i, 13), „,,,,”, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), „,,,”, v, 1)
Cells(i, 13).Value = Replace(Cells(i, 13), „,,”, v, 1)End If
i = i + 1
LoopEnd Sub
Rendben is lenne , ha a formátumok is egyeznének, de az sem egyezik.
Szóval a szöveggé formázok minden adatot az adott oszlopban , akkor helyreáll a rend, és megkapom a listát.
Most már „csak” szét kell szedni és a megfelelő cellába másolni.Illetve lefuttatva a makrót, az a tapasztalat hogy nagyon sokáig tart(18 percig ment a 44 ezer soron végig)
Arra gondoltam, ha először egy szűrést csinálnék, akkor kihagyhatnám az üres sorokat.
Abban tudnátok segíteni, hogy ha leszűröm, akkor hogy tudom neki megadni a sorokat meghatározó változót, hogy csak a leszűrt sorokban lévő cellát ellenőrizze?2023-01-10-19:05 #9509Az alapfeladatot sikerült megoldanom! csak a gyorsaságon kellene javítani!!!
2023-01-11-07:35 #9510Szia!
Nálam a felülírandó adatok a B oszlopban vannak, segédoszlopként a C-t használom – amit a végén törlök.
55.000 sorral 12 másodperc alatt végzett.Sub Csere() Dim usor As Long, ido As Date ido = Now usor = Range("B" & Rows.Count).End(xlUp).Row Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],""\"","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],""/"","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],"" "","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],""_"","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],""-"","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],"",,,,,,,,"","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],"",,,"","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Range("C1:C" & usor).FormulaR1C1 = "=SUBSTITUTE(RC[-1],"",,"","","")" Range("C1:C" & usor).Copy Range("B1").PasteSpecial xlPasteValues Columns(3).Delete MsgBox Format(Now - ido, "mm:ss") End Sub
Delila
2023-01-11-09:59 #9511Delila megoldása újabb gyönyörű példája a brute force cellánkénti loopolás és az oszlopkba egy lépésben illesztett képletek sebesség különbségére.
Minden munkalap interakció (olvasás, de főleg az írás) lassú. Ez 44e soron már elég jól látszik.És ezen még tovább lehetne finomítani a 365 új függvényeivel, de ha így jó neked Norbi, akkor íme egy lehetséges megoldás.
Én az „M” oszlopra írtam volna egy univerzális formulát, aminek az erdménye vessszővel tagolt szövegrészek, amit szétdobtam volna például TEXTSPLIT függvénnyel, ami 365-ös.
Még ciklus sem kell hozzá.Imre
2023-01-11-19:26 #9513Szia
Nagyon szépen köszönöm, ez tényleg sokkal gyorsabb.
Nekem egy bajom van, hogy mindent szreetk megérteni 🙂
Az úgy nem működne, ha nem kell plusz oszlopot létrehozni, és replace -el függvénnyel megy?
Gondolataim alapján mennie kellene, csak nem tudom hogy lehet a range -el megadni azt, hogy ugyanaz a cella a végállomás…KÖszi
- A hozzászólás módosításra került: 1 year, 10 months telt el-norbifun.
2023-01-11-20:43 #9515Igazad van, gyorsabb a REPLACE függvénnyel.
Sub CsereBere() Dim ido As Date usor = Range("M" & Rows.Count).End(xlUp).Row Range("M1:M" & usor).Replace What:=",,,,,,,,", Replacement:="," Range("M1:M" & usor).Replace What:=",,,", Replacement:="," Range("M1:M" & usor).Replace What:=",,", Replacement:="," Range("M1:M" & usor).Replace What:="_", Replacement:="," Range("M1:M" & usor).Replace What:="-", Replacement:="," Range("M1:M" & usor).Replace What:="\", Replacement:="," Range("M1:M" & usor).Replace What:="/", Replacement:="," Range("M1:M" & usor).Replace What:=" ", Replacement:="," MsgBox Format(Now - ido, "mm:ss") End Sub
2023-01-12-08:36 #9517nagyon köszönöm!!!
Még egy kérdés. Ebben az esetben a műveletek sorrendje nem releváns a programozás tekintetében?
Mindeg ymilyen sorrendben írom, ugyanazt az eredményt adja?
Ha nem a válasz, akkor most miért került fordított sorrendben meghatározásra?Köszi
2023-01-12-09:08 #9518Csak az fontos, hogy a több vessző törlése előbb legyen, mint a kevesebbé. Érthető lesz, ha végig gondolod a logikáját.
2023-01-12-09:40 #9519Az világos, hogy a több vesszőt korábban kell.
Abban van nekem a zavar, hogy az egyéb karaktereket utóbb cseréli , és ebből keletkezhet a több vessző. (már ha van sorrend)2023-01-12-10:04 #9520Igazad lehet. Megeshet, hogy például „\,” szerepel némelyik cellában. Az összes adat ismeretében meg kell találnod a helyes sorrendet.
2023-01-14-10:45 #9525Sziasztok
Most ott járok, hogy a vesszőt _ -ra cseréltem. A vessző sok helyen elkavarta a formátumot, még akkor is, ha előtte külön szöveggé formáztam a teljes oszlopot. Azt nem értem ugyan hogy miért, az eredeti-cellánként vizsgálóban ezt ez esetben nem tette meg.
De így működik az M oszlop karaktercseréje.
TexttoColumns -al szétdobtam külön oszlopokba. Ettől mondjuk jobb lenne egy elegánsabb megoldás… pl az első része a cikkszámsornak az eredeti oszlopban marad, a második megy a következő (vagy egyéb kijelölt oszlopba- sorba – cellába)oszlopba, a harmadik még újabbaEgy lépés maradt hátra , és azzal megakadtam
Vannak azok a cellák, ahol kötőjel szerepel a cikkszámban. Ez azt jelenti, hogy az ugyanabban a cellában szerepelő, előtte lévő cikkszám első három karakterét kell behelyettesíteni a . És itt nem igazán boldogulok. Tudtok ebben nekem segíteni?Egyenlőre én most itt járok a gondolkodásban:
Sub CsereBere()
Dim ido As Dateusor = Range(„M” & Rows.Count).End(xlUp).Row
Range(„M1:M” & usor).Select
Selection.NumberFormat = „@”Dim cikkszameleje As String
cikkszameleje = Left(ActiveCell, 3)Range(„M1:M” & usor).Replace What:=”-„, Replacement:=cikkszameleje
Range(„M1:M” & usor).Replace What:=”_”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”+”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”\”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”/”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=” „, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”OD.”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”,”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”________”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”_______”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”______”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”_____”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”____”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”___”, Replacement:=”_”
Range(„M1:M” & usor).Replace What:=”__”, Replacement:=”_”
Range(„M1:M” & usor).TextToColumns Destination:=Range(„o1″), other:=True, Otherchar:=”_”MsgBox Format(Now – ido, „mm:ss”)
End Sub2023-01-14-13:26 #9526Én már nem követem a folyamatot, elvagytok nélkülem is 🙂
De tennék bele inputot.
Ha jól értem, az egyes részek az M oszlopban alulvonással vannak most elválasztva.
Ha jól értem, bármelyik részben lehet kötőjel.
Elég lényeges kérdés, hogy több részben is lehet kötőjel, és akkor többször kell a helyettesítést megcsinálni?
Remélem az első tagban nem lehet 🙂Ha ez igaz, akkor alaposan el kell gondolkodni a dolgon, hogy el lehet-e kerülni a soronkénti feldolgozást, ami a kezdeti sebesség problémát okozta, azaz valami oszlop formula. Vagy az egészet memóriatöbmbbe kell tenni, ott feldolgozni, és visszaírni.
Másik lehetőség, hogy előbb oszlopokra bontod, és a kapott 4(?) oszlop mellé ugyanannyi kalkulált oszlopot csinálsz, ami megvizsgálja, hogy tartalmaz-e kötőjelet, és ha igen, megcsinálja a cserét. Ebből talán 3 is elég lehet, ha kijelenthető, hogy az első oszlopban nem lehet kötőjel.
A kapott oszlopokat végül átmásolod értékként az előző lapra, a helyére, utána takarítasz.
A „TextToColumns” helyett ajánlom figyelmedbe az O365 „SZÖVEGFELOSZTÁS” (TEXTSPLIT) függvényét, ami az egész M oszlopot az alulvonás mentén oszlopokra bont. Például.:
=SZÖVEGFELOSZTÁS(M2;"_")
Ezt beírva (makróval) az M oszlop után valahová, mondjuk O2-be, kapsz egy oszlopokra bontott tömböt az M2 celláról
Ha az egész oszlopba akarod betenni (44e sor?), akkor előbb ki kell jelölni, és utána betenni a formulát. Javaslom felvenni, mert a tömbképletek formula makrója kicsit eltér a hagyományos formuláktól. Nekem ez lett:
Selection.Formula2R1C1 = "=TEXTSPLIT(RC[-1],""_"")"
A Formula2 a lényeg.
Különben pedig, ha a TextToColumns már működik, akkor ezzel nem biztos, hogy kell szenvedni.Végül ezen tömb után lehet megcsinálni a kötőjelek cseréjét formulával oszloponként.
Nekem 3 oszlopot csinált a szétbontás a te mintád alapján, ezért az első szabad oszlopom az R lett.
R2-be írtam a képletet, ami a feltételes cserét csinálja.
=HA(BAL(P2;1)="-";HELYETTE(P2;"-";BAL(O2;3)))
Megnézi, hogy a szétbontott oszlopok közül a másodikban van-e kötőjel, és ha igen, akkor a kötőjelet kicseréli az előző oszlop első 3 karakterére.
Mivel relatív címeket használ, ezt elég jobbra lemásolni annyiszor, ahányszor ezt akarod, és előállnak a megjavított oszlopok.Imre
2023-01-14-15:18 #9527szia
köszönöm!
A textsplit működik.
Abban viszont kérnék segítséget, hogy a formula az mit takar pontosan? vagy a formula?Az uccsó bejegyzést is makróban kell megírnom. Soronként okés , azzal nincs bajom.
De tömbösítve?
Egy kicsit magas még ez nekem…
tudok tömbösítve is ha függvényt megadni neki?
hogy tudok ugyanarra a cellára hivatkozni? RC ? RC[0]? Activecell? nekem valahoyg egyiksem akar működni.
Ez ugy eakkor kellene , amikor abban a cellában szeretném a műveletek elvégezni.
Nem egyzserű nekem ez a tömbösítéses gondolkodás… 🙁2023-01-16-09:32 #9528A textsplit-et most felejtsd el, ha már van működő TextToColumns, csak érdekességként írtam.
A formula kérdésedet nem igazán értem, de sejtem.Ha képletet akarunk makróval írni egy oszlopba, akkor két lehetőség van:
Egyik, hogy beírod a z első cellába, és utána dupla klikkel a sarkán, lemásolod az aljáig.
Ha ezt felveszed makró rögzítővel, kapsz egy eredményt.Másik, hogy az oszlopot előre kijelölöd, és abba teszed be a képletet (formulát)
Ebbe az esetben elég azt csinálni, hogy csak a képletet veszed fel. Ha beírtad, rögtön megállítod a rögzítőt.
Ha ENTER-rel zártad le a beírást, akkor valami ilyesmi lesz:
Sub valami
Activecell.FORMULAR1C1 = „=és itt lesz a képlet R1C1 formátumban, angol függvénynevekkel”
End SubKonkrétan, a te esetedre:
1. A TextTo Colomns az „O” oszloptól megcsinálja a bontást, ami ha jól emlékszem 4 oszlop, tehát O-P-Q-R
2. Tehát az S oszlopba kell a képlet, amit megadtam (Ha….), ami lekezeli a kötőlejes tételeket
3. Próbáld ki!
4. Ha működik, akkor vedd fel rögzítővel: Jelöld ki az S2 cellát, írd bele a képletet, ENTER
5. a felvett kódot alakítsd át, hogy az egész oszlopra megcsinálja:
`Range(„S2:S” & usor).formulaR1C1 = amit felvett
Range(„S2:S” & usor).formula = Range(„S2:S” & usor).value ‘értékké alakítás`
6. Próbáld ki!
7. Ha működik, akkor másolással megcsinálhatod a többi oszlopra (T, U, V oszlopok?)
8. a 4 oszlopot átmásolhatod az első lapra.Imre
2023-01-18-19:31 #9529Köszönöm
Ez így működik
csak az a problémám, hogy folyamatosan új oszlopokat nyitok.
Nincs arra valami megoldás, hogy a p oszlopban, ha talál kötőjelet azt cserélje le az o első 3 karakterére?
Azért az egyszerűbb , mint oszlopot nyitni, eltüntetni.. stb
Bár lehet tévedek… okoskodom, de megcsinálni nem tudom :-)))A formula-ra vonatkozó kérdés:
mit jelent ez pontosan?
mi a különbség formulaR1C1 és formula2R1C1 között?függvényben, RC pozicióval lehet megadni valahogy aktív cellát?
2023-01-19-11:18 #9530Én azért vetettem fel ezt a megoldást, mert sokkal gyorsabb, mint ha soronként iterálsz végig 44 ezerszer.
Tehát Excel szinten oldom meg a problémát, de makróval írom meg a képletet.
A FORMULAR1C1 egy Excel képletet ír a kijelölésbe.
He azt érted, akkor nem kérdezhetsz olyat, hogy hivatkozhat-e saját magára (pl. RC), mert Excelben ilyen nincs (körkörös hivatkozás)
Én megadtam neked azt a képletet, ami pont azt csinálja, amit most újra megkérdeztél:
„Nincs arra valami megoldás, hogy a p oszlopban, ha talál kötőjelet azt cserélje le az o első 3 karakterére?”
=HA(BAL(P2;1)="-";HELYETTE(P2;"-";BAL(O2;3)))
Ha az a probléma, hogy makró közben új segédoszlopok keletkeznek, akkor másképp kel megoldanod.
Én azt javasoltam, hogy az oszlopokra bontás után:
1. Az első oszlop gondolom változatlan marad
2. A második-harmadik-negyedik lehet potenciálisan olyan, hogy kötőjellel kezdődik, ezért erre a 3 oszlopra csinálsz 3 ilyen IF-es számítást 3 újabb oszlopba. (javaslom értékké alakítani
3. Az első, változatlan és az utolsó 3 oszlopot átmásolod az első lapra, a helyére
4. Kitakarítod az átmeneti oszlopokat.A jelenlegi tudásoddal ezt meg tudod csinálni szerintem.
Ha ez nem felel meg, vagy meg akarsz küzdeni egy programozás szempontjából nagyobb kihívással, akkor memóriatömböket kell használnod.
1. Eszerint az eredeti M oszlopot beolvasod egy tömbbe, majd egy ciklusban szétdobod 4 külön tömbbe
2. a 4 külön tömböt feldolgozod egyesével és átalakítod vagy sem a tételeit az ismert szabályok szerint
3. A 4 tömböt visszaírod az első lapra, a helyére.Ha nem foglalkoztál még tömbökkel, szerintem ez nagy kihívás elsőre.
A FORMULA2R1C1 akkor van, amikor a rögzítővel nem egyszerű képletet, hanem tömbképletet veszel fel.
Ez jelen esetben most nem releváns.Ha érdekel, nézz utána a tömböknek, tömbfüggvényeknek, tömbképleteknek az Excelben.
Nem ugyanaz, mint a VBA memóriatömbök, de hasonló.
Ha megoldást akarsz, és az a prioritás, akkor azzal főzz, amid már megvan.
Ha tanulni akarsz, akkor menj a nehezebb irányba.Imre
2023-01-19-14:53 #9531Azt hiszem, addig már eljutottál, hogy az M oszlopban vannak az adatok, amik számjegyeket, és max 1 db kötőjelet tartalmaznak. Az L oszlopban azok az adatok vannak, amiknek az első 3 karakterét kell a kötőjelek helyére tenni az M-ben.
A lenti makró az O oszlopba ír egy képletet, ami létrehozza az általad kívánt eredményt. Ezt értékként beilleszti az M oszlopra, az ideiglenes O oszlopot törli.Sub Segedoszlop_O() Range("O2:O15").FormulaR1C1 = _ "=IFERROR(LEFT(RC[-2],SEARCH(""-"",RC[-2])-1)&LEFT(RC[-3],3)&RIGHT(RC[-2],LEN(RC[-2])-SEARCH(""-"",RC[-2])),RC[-2])" Columns(15).Copy Range("M1").PasteSpecial xlPasteValues Columns(15).Delete End Sub
2023-01-29-12:10 #9593Sziasztok
Bocsi, kicsit eltüntem, más irányba szólított a kötelesség.
Ennek megfelelően a tömbképletekkel sem foglalkoztam.Ma ültem neki megint.
Szeretnék tanulni, tehát a legoptimálisabb megoldások megértése lenne a cél.
De velahoyg ezek az oszlopra vonatkozó dolgok nem akarnak összeállni a fejemben. Illetve nem vágom hogy az active cellák hogy működnek ilyen esetben.
De ezt majd később.Most kipróbáltam ezzel a segédoszlopos megoldással. Sajnos ez azt az eredményt hozza, hogy ahol nincs a cellában semmi, azt 0 ként jeleníti meg.ez egy elég zavaró dolog. Próbáltam , hogy ha 0 az értéke akkor törölje, de nem tudom összerakni.
Illetve elő jött még egy variáció.
Az eredeti listában előfordulhat olyan, hogy a számok az alábbiak alapján vannak megadva
241875,819,240434
Ebben azt látni, hogy nincs kötőjel a középső számsornál, pedig kellene lennie…Arra gondoltam, hogy amikor lemegy a text to column (azért maradok ennél, mert nekem 365 van, de más gépeken, ahol ezt használni fogják sok esetben régebbi verzió él), akkor megvizsgálnám, hogy hány karakterből állnak a cella értékei. Ha 3 akkor kell elé egy kötőjel.
És itt megint elakadtam.Szóval van bajom…:-)
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.