- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Lalikiraly: Mercis kalandok - Huszonnyolcadik rész - Az újrakezdés
- Navaren: Resident Evil Requiem szösszenet
- sziku69: Szólánc.
- Parci: Milyen mosógépet vegyek?
- Lalikiraly: Commodore The C64, Ultimate
- Luck Dragon: Óraátállítás
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- Luck Dragon: MárkaLánc
-
LOGOUT
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éső este ezt hoztam össze neked.
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 utolso_ertek As DoubleDim temp1, temp2Dim 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)utolso_ertek = adatok(x, 2)kimenet(2) = utolso_ertekElse'adjuk hozzá a további értékeket, ehhez terjesszük ki a tömbbötReDim Preserve kimenet(1 To UBound(kimenet) + 2)kimenet(UBound(kimenet) - 1) = adatok(x, 1)kimenet(UBound(kimenet) - 0) = adatok(x, 2)'ha a korábban tároltnál nagyobb értéket látunk, akkor tegyük az alábbiakat'1) levágjuk a "kimenet" utolsó 2 elemét és eltároljuk őket'2) kiírjuk a "kimenet"-et'3) növeljük a sorszámot ahova az eredményeket tesszük'4) töröljük a "kimenet" tartalmát és beletesszük az 1-es lépésben tárolt értékeketIf adatok(x, 2) > utolso_ertek Thentemp1 = kimenet(UBound(kimenet) - 1)temp2 = kimenet(UBound(kimenet) - 0)ReDim Preserve kimenet(1 To UBound(kimenet) - 2)cel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenetv_sor = v_sor + 1ReDim kimenet(1 To 2)kimenet(1) = temp1kimenet(2) = temp2utolso_ertek = temp2Elseutolso_ertek = adatok(x, 2)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 SubAdtam hozzá megjegyzéseket.
Amit én gondoltam végig, hogy a második oszlopban ha egy nagyobb számot látunk mint az előző sorban, akkor az előző sorig látott dolgokat ki kell írni és egy új sorba kell tenni majd az adatokat amíg megint találunk egy nagyobb számot mint az előző sorban.A kód egy tömbbe elkezdi gyűjteni az adatokat és ha jön a feltétel, akkor a tömb utolsó két elemét kivéve kiírjuk az addigi tartalmat. A tömböt nullázuk az aktuális sorban levő értékeket újra beletesszük és megyünk tovább. Közben mindig elmentjük egy változóba a második oszlop értékét.
A kódban ami haladó VBA dolog:
1) tömbök menetközbeni átméretezése (ReDim)
2) tömbök tartalmának munkalapra kiírása (cel.Offset(v_sor).Resize(, UBound(kimenet)) = kimenet)Szerintem makró nélkül is megoldható a feladat. Power Query vagy az újabb Excel függvényekkel (LET és FÜGG.HALMOZÁS). Próbáljuk meg azt is?
üdv
Új hozzászólás Aktív témák
- Game Pass Ultimate előfizetések 1 - 36 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- MS SQL Server 2016, 2017, 2019
- Microsoft Office 2024 Home Business dobozos
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- HP EliteBook 845 G7 14" Ryzen 5 pro 4650U, 8-16GB RAM, 256-512GB SSD, jó akku, számla, 6 hó gar
- Lenovo ThinkPad T14s Gen 5 Intel Ultra 5 135u,16 gb DDR5 6400,garancia 2028.03.
- Samsung Galaxy S23+ / 8/128GB / Kártyafüggetlen / 12Hó Garancia
- Samsung Galaxy A70 / 6/128GB / Kártyafüggetlen / 12Hó Garancia
- Honor 200 Pro 512GB,Újszerű,Dobozaval,12 hónap garanciával
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Fferi50