Kezdőlap › Fórumok › Excel programozás › [Resolved] Két táblázat adatainak beillesztése és táblázat átméretezése
- This topic has 7 hozzászólás, 3 résztvevő, and was last updated 8 months, 2 weeks telt el by horvimi.
-
SzerzőBejegyzés
-
2024-03-05-08:57 #10526
Sziasztok!
Egyszerűen nem jövök rá a hibára, légyszi segítsetek. A feladat, hogy a „Munka1” és „Munka2” munkalapon lévő táblázatok „Érték ID” sorába bemásoljuk a „Ssz” oszlopban lévő adatokat értékbeillesztéssel, majd a két táblázat „Érték ID” oszlop adatait beillesszük a „Feladat” fülben lévő táblázat „Érték ID” oszlopába egymás alá, és a táblázatot igazítsuk a beillesztett adatok mennyiségéhez. ŰIgazából működik minden, kivéve, hogy a táblázat bővítését lefutásonként 1 soronként végzi el. Nekem 1 lefutással kéne kibővítse a táblázatot az adatok hosszúságához.
?ég egy hiba, hogy a 4. sorba nem másol adatot. Egyszerűen átlépi, mintha ott sem lenne. Ide másolom a kódomat. Köszönöm, ha valaki segít ebben.
Sub Masolas()
Dim Munka2 As Worksheet
Dim Munka1 As Worksheet
Dim Szint2 As ListObject
Dim Szint1 As ListObject
Dim Tbl12 As ListObject
Dim FirstRowTbl12 As Long
Dim LastRowTbl12 As LongSet Munka2 = ThisWorkbook.Sheets(„Munka2”)
Set Szint2 = Munka2.ListObjects(„Szint_2”)
Set Munka1 = ThisWorkbook.Sheets(„Munka1”)
Set Szint1 = Munka1.ListObjects(„Szint_1”)
Set Feladat = ThisWorkbook.Sheets(„Feladat”)
Set Tbl12 = Feladat.ListObjects(„Táblázat12”)Szint2.ListColumns(„Érték ID”).DataBodyRange.Value = Szint2.ListColumns(„Ssz”).DataBodyRange.Value
Szint1.ListColumns(„Érték ID”).DataBodyRange.Value = Szint1.ListColumns(„Ssz”).DataBodyRange.ValueFirstRowTbl12 = 1
Tbl12.ListColumns(„Érték ID”).DataBodyRange.ClearContentsTbl12.ListColumns(„Érték ID”).DataBodyRange.Cells(FirstRowTbl12, 1).Resize(Szint1.ListColumns(„Érték ID”).DataBodyRange.Rows.Count, 1).Value = Szint1.ListColumns(„Érték ID”).DataBodyRange.Value
LastRowTbl12 = FirstRowTbl12 + Szint1.ListColumns(„Érték ID”).DataBodyRange.Rows.Count
Tbl12.ListColumns(„Érték ID”).DataBodyRange.Cells(LastRowTbl12, 1).Resize(Szint2.ListColumns(„Érték ID”).DataBodyRange.Rows.Count, 1).Value = Szint2.ListColumns(„Érték ID”).DataBodyRange.Value
utolsoSor = Tbl12.ListRows.CountSet ertekIDOszlop = Tbl12.ListColumns(„Érték ID”)
utolsoSor = Tbl12.ListRows.Count
If utolsoSor > 0 Then
For i = utolsoSor To 1 Step -1
If ertekIDOszlop.DataBodyRange.Cells(i, 1).Value = „” Then
Tbl12.ListRows(i).Delete
End If
Next i
End If
utolsoSor = Tbl12.ListRows.Count
utolsoAdatSor = ertekIDOszlop.DataBodyRange.Find(„*”, , xlValues, xlWhole, xlByRows, xlPrevious).Row
If utolsoAdatSor > utolsoSor Then
Tbl12.ListRows.Add utolsoAdatSor – utolsoSor
End If
End Sub2024-03-05-10:31 #10527Szia!
Az Excelt azért elküldhetnéd, akár Fake adatokkal, a kód önmagában legtöbbször kevés.
Nem elemeztem még a kódot, nem olyan rövid, de ha próbálni szeretném, nem szeretnék időt tölteni minta adat generálásra, táblázat átnevezésre, ráadásul az egy másik fájl lesz, amin lehet, hogy másképp működik.Legjobb, ha makrós fájl csatolsz adatokkal együtt, de előtte zip-elni kell, különben biztonság miatt nem fogadja el.
Ja, és még egy:
ha kódot teszel fel, akkor a beküldés előtt a kódot jelöld ki, és a szerkesztő tetején találsz egy „CODE” gombot.
ha ezzel formázod, akkor nem alakítja át és pl. a sima dupla idézőjeleket nem teszi nyomdai idézőjellé, amitől megint nem működik, ha bemásolom a VBA editorba, és keresés-cserét kell rajta csinálni, vagy kézzel javítgatni.Köszi,
Imre
2024-03-05-13:15 #10528Szia,
rendben, köszönöm. Legközelebb így járok el.
Most csatoltan küldöm ennek a feladatnak a Excelét, fals adatokkal, én is ezekkel dolgoztam.Attachments:
You must be logged in to view attached files.2024-03-06-12:43 #10531Szia!
Próbáld meg ezzel:Sub Masolas() Dim tabla As Range, usor As Integer, ide As Integer Sheets("Feladat").Select Set tabla = Range("C5").CurrentRegion tabla.Offset(1, 0).Resize(tabla.Rows.Count - 1, tabla.Columns.Count).ClearContents Sheets("Munka1").Select usor = Range("B5").End(xlDown).Row Range("B5:B" & usor).Copy Range("C5").PasteSpecial xlPasteValues Range("B5:C" & usor).Copy Sheets("Feladat").Range("C5").PasteSpecial xlPasteValues Range("F5:F" & usor).Copy Sheets("Feladat").Range("E5").PasteSpecial xlPasteValues ide = Sheets("Feladat").Range("C" & Rows.Count).End(xlUp).Row + 1 Sheets("Munka2").Select usor = Range("B5").End(xlDown).Row Range("B5:B" & usor).Copy Range("C5").PasteSpecial xlPasteValues Range("B5:C" & usor).Copy Sheets("Feladat").Range("C" & ide).PasteSpecial xlPasteValues Range("G5:G" & usor).Copy Sheets("Feladat").Range("F5").PasteSpecial xlPasteValues Application.CutCopyMode = False Sheets("Feladat").Select End Sub
Üdv,
Delila2024-03-06-14:07 #10532Kedves Delila!
Köszönöm, de sajnos nem jó. Hiba ugyan nincs benne, de nem úgy működik, amire szükségem van. A táblázatok függvényeket tartalmaznak, ezért kéne csak az Érték ID oszlopot mozgatni. A megoldás amit küldtél, a Táblázat12-t teljesen felülírta, ráadásul csak az egyik táblázat adatai kerülnek bele, a második táblázat adatai a cél helyen, de a táblázaton kívülre kerülnek. Meglepő módon viszont a cél táblázat mérete a második forrás táblázat méretével nőtt meg. Szóval itt legalább átméretezi a táblázatomat, csak nem jól és nem jó helyen.
2024-03-07-10:00 #10534Sziasztok.
Megoldottam. Bár 3 napom ráment. Ide teszem a kész kódot, ha valakit érdekel. Csatolom az Excelt is…
Köszönöm a segítséget.Sub Masolas() Dim Munka2 As Worksheet Dim Munka1 As Worksheet Dim Szint2 As ListObject Dim Szint1 As ListObject Dim Tbl12 As ListObject Dim FirstRowTbl12 As Long Dim LastRowTbl12 As Long Dim osszegSor As Long Set Munka2 = ThisWorkbook.Sheets("Munka2") Set Szint2 = Munka2.ListObjects("Szint_2") Set Munka1 = ThisWorkbook.Sheets("Munka1") Set Szint1 = Munka1.ListObjects("Szint_1") Set Feladat = ThisWorkbook.Sheets("Feladat") Set Tbl12 = Feladat.ListObjects("Táblázat12") Feladat.ListObjects("Táblázat12").ShowTotals = False For i = Tbl12.ListRows.Count To 2 Step -1 Tbl12.ListRows(i).Delete Next i Szint2.ListColumns("Érték ID").DataBodyRange.Value = Szint2.ListColumns("Ssz").DataBodyRange.Value Szint1.ListColumns("Érték ID").DataBodyRange.Value = Szint1.ListColumns("Ssz").DataBodyRange.Value FirstRowTbl12 = 1 Tbl12.ListColumns("Érték ID").DataBodyRange.ClearContents Tbl12.ListColumns("Érték ID").DataBodyRange.Cells(FirstRowTbl12, 1).Resize(Szint1.ListColumns("Érték ID").DataBodyRange.Rows.Count, 1).Value = Szint1.ListColumns("Érték ID").DataBodyRange.Value LastRowTbl12 = FirstRowTbl12 + Szint1.ListColumns("Érték ID").DataBodyRange.Rows.Count Tbl12.ListColumns("Érték ID").DataBodyRange.Cells(LastRowTbl12, 1).Resize(Szint2.ListColumns("Érték ID").DataBodyRange.Rows.Count, 1).Value = Szint2.ListColumns("Érték ID").DataBodyRange.Value LastRowTbl12 = Tbl12.ListRows.Count Set ertekIDOszlop = Tbl12.ListColumns("Érték ID") LastRowTbl1 = Szint1.ListRows.Count LastRowTbl2 = Szint2.ListRows.Count osszegSor = Application.WorksheetFunction.Max(Szint1.ListRows(LastRowTbl1).Range, Szint2.ListRows(LastRowTbl2).Range) Tbl12.Resize Tbl12.HeaderRowRange.Resize(osszegSor + 1) Feladat.ListObjects("Táblázat12").ShowTotals = True End Sub
Attachments:
You must be logged in to view attached files.2024-03-07-15:43 #10537Szándákosan értékeket másoltam a Feladat lapra, a sok képlet lassítja a futást (sok sornál).
Egy hiba is volt a makrómban, a Csoport (2) oszlopba az 5. sortól vittem be a Munka2 lap adatait.
A mostani makróban csak az F (Fűz) oszlopban vannak képletek, hogy megmutassam, miként lehet tartományba képleteket bevinni.
Ezt a makrót is meghívhatod a lapjaidról az adatok változásakor.Sub Masolas() Dim tabla As Range, usor As Integer, ide As Integer Sheets("Feladat").Select Range("C5:H1500").ClearContents 'előző adatok törlése Sheets("Munka1").Select 'Értékek másolása a Munka1 lapról usor = Range("B5").End(xlDown).Row Range("B5:B" & usor).Copy Range("C5").PasteSpecial xlPasteValues Range("B5:C" & usor).Copy Sheets("Feladat").Range("C5").PasteSpecial xlPasteValues Range("F5:F" & usor).Copy Sheets("Feladat").Range("E5").PasteSpecial xlPasteValues ide = Sheets("Feladat").Range("C" & Rows.Count).End(xlUp).Row + 1 Sheets("Munka2").Select 'Értékek másolása a Munka2 lapról usor = Range("B5").End(xlDown).Row Range("B5:B" & usor).Copy Range("C5").PasteSpecial xlPasteValues Range("B5:C" & usor).Copy Sheets("Feladat").Range("C" & ide).PasteSpecial xlPasteValues Range("G5:G" & usor).Copy Sheets("Feladat").Range("F" & ide).PasteSpecial xlPasteValues Application.CutCopyMode = False Sheets("Feladat").Select usor = Range("C" & Rows.Count).End(xlUp).Row 'összefűző képlet a Fűz oszlopba Range("G5:G" & usor) = "=E5 & F5" End Sub
2024-03-07-15:53 #10538Látom közben elvoltatok ezzel, ezért csak egy tapasztalatot tennék ide.
Nem tudom miért, de már többször belefutottam abba, hogy egy makró jelentősen lassabban futott, amikor táblázatként kezeltem a kódban egy tartományt, mint amikor tartományként. Attól még táblázat maradt, de a Delila féle módszerrel méregettem meg, hogy mik a dimenziói.
Az egyik esetben min. 100x sebességkülönbséget mértem. (Egy hosszú ciklus volt, táblázatmanipulációkkal)
Ebben most nincsen ciklus, valószínűleg nem nagyon számít, csak tudjatok róla, hogy a hiba nem a ti készüléketekben van, ha ilyesmi előfordul
Imre
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.