Telefonszámunk: 1-472-0679

[Resolved] Cellákban lévő karakterek kezelése, másolása

Kezdőlap Fórumok Excel programozás [Resolved] Cellákban lévő karakterek kezelése, másolása

Topic Resolution: Resolved
23 bejegyzés megtekintése - 1-23 / 23
  • Szerző
    Bejegyzés
  • #9500
    norbifun
    Felhasználó

    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!

    #9501
    horvimi
    Adminisztrátor

    Szia!

    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

    #9502
    norbifun
    Felhasználó

    Szia
    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ában

    Tö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önettel

    #9503
    norbifun
    Felhasználó

    Nem sikerült a feltöltés, még egyszer

    Attachments:
    You must be logged in to view attached files.
    #9505
    horvimi
    Adminisztrátor

    Makró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

    #9508
    norbifun
    Felhasználó

    Szia
    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 String

    Sheets(“Ú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
    Loop

    End 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?

    #9509
    norbifun
    Felhasználó

    Az alapfeladatot sikerült megoldanom! csak a gyorsaságon kellene javítani!!!

    #9510
    delila
    Felhasználó

    Szia!

    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

    #9511
    horvimi
    Adminisztrátor

    Delila 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

    #9513
    norbifun
    Felhasználó

    Szia

    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: 4 weeks telt el-norbifun.
    #9515
    delila
    Felhasználó

    Igazad 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
    #9517
    norbifun
    Felhasználó

    nagyon 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

    #9518
    delila
    Felhasználó

    Csak 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.

    #9519
    norbifun
    Felhasználó

    Az 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)

    #9520
    delila
    Felhasználó

    Igazad lehet. Megeshet, hogy például “\,” szerepel némelyik cellában. Az összes adat ismeretében meg kell találnod a helyes sorrendet.

    #9525
    norbifun
    Felhasználó

    Sziasztok

    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 újabba

    Egy 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 Date

    usor = 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 Sub

    #9526
    horvimi
    Adminisztrátor

    É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

    #9527
    norbifun
    Felhasználó

    szia

    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… 🙁

    #9528
    horvimi
    Adminisztrátor

    A 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 Sub

    Konkré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

    #9529
    norbifun
    Felhasználó

    Kö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?

    #9530
    horvimi
    Adminisztrátor

    É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

    #9531
    delila
    Felhasználó

    Azt 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
    #9593
    norbifun
    Felhasználó

    Sziasztok

    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…:-)

23 bejegyzés megtekintése - 1-23 / 23
  • Be kell jelentkezni a hozzászóláshoz.