Hirdetés
- Meggyi001: Áram nélkül....méltóság nélkül.....
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- gban: Ingyen kellene, de tegnapra
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Lalikiraly: Macbook NEO 2
- N€T0X|N: Talaria tuning: meg kéne tudni állni!
- Elektromos rásegítésű kerékpárok
- sziku69: Fűzzük össze a szavakat :)
- hcl: GPT diszk kisebbre klónozása
-
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
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - 15% AKCIÓ
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem.
- Dell Latitude 5410 - 14", Core i5 10210U, 8-16GB RAM, SSD, jó akku, számla, 6 hó gar
- BESZÁMÍTÁS! Asus H110M i5 7400 8GB DDR4 120GB SSD 500GB HDD GTX 1050 Ti Formula Air Mesh G3 400W
- iPhone 16 Pro Max 156GB Fekete Titán - 27% ÁFA (0397)
- 27% - ASUS ROG Strix XG27ACS Monitor! 2560x1440 / 1ms / 180Hz / G-Sync / FreeSync
- Apple iPad mini 7 2024 128GB MXN63 SpaceGray
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Fferi50