Hirdetés
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Rémisztő árakkal szembesülnek a notebookgyártók az új mobil platformoknál
- Házimozi haladó szinten
- Milyen videókártyát?
- ASRock lapok általában
- Androidos tablet topic
- Milyen monitort vegyek?
- 3D nyomtatás
- Milyen házat vegyek?
- Nvidia GPU-k jövője - amit tudni vélünk
-
PROHARDVER!
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
-
Mutt
senior tag
Szia,
Kösz a pontosítást. Félreértelmeztem a dolgot, a makró ez esetben egyszerűbb mivel az első oszlopban van egy azonosító rész (a pont előtti), ami alapján egybe kell tenni az adatokat.
A run-time error-t azért kapod, mert a makró úgy működik hogy előbb kijelölöd egérrel azt a részt ahol a bemeneti adatok vannak és utána indítod el.
A
Set adatsor = Intersect(Selection, ActiveSheet.UsedRange)részben a Selection jelenti az általad kijelölt tartományt, az Activesheet... pedig az összes tartományt jelenti ahol van adat. Ha fix helyen van a bementi adatod (pl. B1-es cellától indulva lefelé),
akkorSet adatsor = Range("B1").CurrentRegionműkődik.Option ExplicitSub Transzponalas()Dim adatsor As RangeDim adatok()'tegyük a kijelölt bemeneti adatokat egy tömbbeSet adatsor = Intersect(Selection, ActiveSheet.UsedRange)adatok = adatsor'kérdezzük meg hova kerüljön az eredményDim cel As RangeSet cel = Application.InputBox(Prompt:="Add meg hova kerüljön az eredmény!", Title:="Információ", Type:=8).Range("A1")'nézzük meg nem írjuk-e felül a bemeneti tartománytIf Not Intersect(adatsor, cel) Is Nothing ThenCall MsgBox(Prompt:="A cél terület beleér a bemenő adatokat tartalmazó tartományba", Buttons:=vbOKOnly, Title:="Hiba")Exit SubEnd If'ebbe a tömbbe fogjuk gyűjteni az eredménytDim kimenet()ReDim kimenet(1 To 2)Dim x As LongDim azonosito As String, fsplitDim v_sor As Longv_sor = 0With cel.ParentFor x = 1 To UBound(adatok, 1)'a legelőször látott értékeket eltároljukIf x = 1 Thenkimenet(1) = adatok(x, 1)kimenet(2) = adatok(x, 2)'szakasz azonosító meghatározása referenciáhozfsplit = Split(kimenet(1), ".")azonosito = fsplit(0)Else'aktuális sorban keressük meg a szakasz azonosítótfsplit = Split(adatok(x, 1), ".")'ha azonos mint az előző, akkor'1) hozzáadjuk a kimeneti tömbhöz az értékeketIf fsplit(0) = azonosito ThenReDim Preserve kimenet(1 To UBound(kimenet) + 2)kimenet(UBound(kimenet) - 1) = adatok(x, 1)kimenet(UBound(kimenet) - 0) = adatok(x, 2)Else'ha nem azonos a szakasz azonosító, akkor'1) kiírjuk a "kimenet"-et'2) növeljük a sorszámot ahova az eredményeket tesszük'3) töröljük a "kimenet" tartalmát'4) elmentjük az új szakasz azonosítótcel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenetv_sor = v_sor + 1ReDim kimenet(1 To 2)kimenet(1) = adatok(x, 1)kimenet(2) = adatok(x, 2)azonosito = fsplit(0)End IfEnd IfNext x'ha a ciklus végén maradt vmi a tömbben írjuk kiIf kimenet(1) <> "" Thencel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenetEnd IfEnd WithEnd SubMS365-ben vannak újabb függvények, amelyek tudnak segíteni.
A képlet:=LET(adatok;A1:B20;kodok;OSZLOPVÁLASZTÁS(adatok;1);azonositok;EGYEDI(SZÖVEGELŐTTE(kodok;"."));csoportok;REDUCE("";azonositok;LAMBDA(a;c;FÜGG.HALMOZÁS(a;SZÖVEGFELOSZTÁS(SZÖVEGÖSSZEFŰZÉS("|";IGAZ;SZŰRŐ(adatok;SZÖVEGELŐTTE(kodok;".")=c));"|"))));HAHIBA(ELTÁVOLÍT(csoportok;1);""))
Hogyan működik?
1) LET-el változókat lehet a képletben létrehozni és azokkal műveleteket végezni. Az első paraméter a változó neve és utána egy művelet, pl. "adatok" a változó neve és utána a "A1 : B20" a tartomány ahonnan kellenek az adatok. A LET-ben az utolsó paraméter egy művelet, aminek az eredményét kiírja az Excel.
2) Szóval bemeneti adatok első oszlopából csináltam egy listát, amely a pont előtti részeket visszaadja minden sorra ("F1-01", ... "F1-02"), és ebből csak az egyedi értékeket tartottam meg (ez kerül be az "azonositok" változóba).
3) Ezek után a SZŰRŐ függvénnyel az eredeti adatsorból kinyerem az egyik azonosítóhoz tartozó értékeket. Az eredményt egy sorba kell tenni, itt jön az a trükk hogy előbb összefűzzük az elemeket egy cellába olyan elválasztó jellel, ami nincs az adatsorban, majd ezt ugyanezen elválasztó jel szerint feldaraboljuk. Belül van a SZÖVEGÖSSZEFŰZÉS ahol a "|" (pipe) jelet használtam elválasztónak, és kívül van a SZÖVEGFELOSZTÁS szintén pipe-al.
4) A REDUCE függvény segít abban hogy a 3-as lépésben lévő szűrést mindegyik azonosítóval megcsináljam. Mindegyik szűrés eredményét egymásra teszem (függőleges halmozás).
5) Csinosítani kell a végeredményt, mert nem minden sorban lesz ugyanannyi oszlop.üdv
Új hozzászólás Aktív témák
- Linux Mint
- Sorozatok
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Battlefield 6
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Hardcore café
- Brogyi: CTEK akkumulátor töltő és másolatai
- Háztartási gépek
- One otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- ::::: HATALMAS LEÁRAZÁSOK! I JOGTISZTA MICROSOFT TERMÉKEK I 27%-OS ÁFÁS SZÁMLA I 10 ÉV GARANCIA ::::
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most Ünnepi áron! :)
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Game Pass Ultimate előfizetések 1 - 36 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RX 9070 16GB GAMER PC termékbeszámítással
- Eredeti Lenovo 90W szögleges laptop táp + kerek átalakító egyben eladó
- Bomba ár! Lenovo ThinkPad T420 - i5-2GEN I 4GB I 250GB I 14" HD I Cam I W10 I Garancia!
- Gamer PC-Számítógép! Csere-Beszámítás! I3 14100F / RTX 3060Ti / 16GB DDR5 / 1TB SSD
- Bomba ár! HP ProBook 450 G3 - i7-6G I 8GB I 256SSD I DVDRW I HDMI I 15,6" FHD I Cam I W11 I Gar!
Állásajánlatok
Cég: ATW Internet Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Fferi50

