Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- gban: Ingyen kellene, de tegnapra
- sh4d0w: Nyitlocker
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- eBay-es kütyük kis pénzért
- Gurulunk, WAZE?!
- Chosen: Intel Arc B580 játék kompatibilitás (2026.01)
- laskr99: Processzor és videokártya szilícium mag fotók újratöltve!
-
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
-
válasz
Fire/SOUL/CD
#49628
üzenetére
2 dolgot kell beállítanod a makróban, hogy HONNAN (eredeti adatok) és hogy HOVA (átalakított adatok) másolódjanak az adatok.
Mindkét állítandó érték elé az[EZT KELL BEÁLLÍTANOD]kommentet tettem.Module1-be másolandó kód
Option Explicit'Fire/SOUL/CD - 2022Public Sub Fire_Salex1_Process()'kötött formátum elválasztó karaktereConst MYDELIMITER = "-"'a feldogozandó adatok ebben az OSZLOP-ban és azon belül ebben a SOR-ban kezdődnekDim MySrcColumn, MySrcColumnFirstCell As String'tartomány, amit a makró a MySrcColumn és MySrcColumnFirstCell értéke alapján határoz meg/generálDim MySrcRange As Range'a feldolgozott adatokat ebbe a tartmányba írja a makróDim MyDestRange As Range'a MySrcRange tartományban található aktuális cella tartománya (1 cella)Dim MyCell As Range'Variant típusú dinamikus tömb, ami az N számosságú halmaz N0 - N-1 elemét tároljaDim MyUniqueSubStrArray() As Variant'Variant típusú dinamikus tömb, ami az N számosságú halmaz N0 - N-1 elemének feldolgozottságát tárolja (True/False)Dim MyUniqueSubStrProcessedArray() As Variant'szöveg típusú dinamikus tömb, amelynek elemei az aktuális cella'SPLIT parancs segítségével, MYDELIMITER paraméterrel elválasztott elemeit tartalmazzaDim MyTempArray() As String'átmeneti változóDim MyTempStr As String'átmeneti változó, ami meghatározza, hogy a MyTempStr változó szerepel-e a MyUniqueSubStrArray-benDim MySubStr As Variant'nem megfelelő cella adat esetén megjelenő ablak visszatérési értékeDim SelectedOptionOnWarningBox As Integer'makró-ciklusokban használt Long típusú változók (ciklus-számlálók)Dim i, j As Long'hogy gyorsabb legyen a makró, pár eseménykezelőt letiltunkApplication.ScreenUpdating = FalseApplication.EnableEvents = False'[EZT KELL BEÁLLÍTANOD] - forrástartomány kezdetének beállítása (itt a példában A1) innen kezdődnek a feldolgozandó adatokMySrcColumn = "A"MySrcColumnFirstCell = "1"Set MySrcRange = Range(MySrcColumn & MySrcColumnFirstCell & ":" & MySrcColumn & Cells(Cells.Rows.Count, MySrcColumn).End(xlUp).Row)'[EZT KELL BEÁLLÍTANOD] - ettől a tartománytól kezdve írodnak ki a feldolgozott adatok (itt a példában B1-től)Set MyDestRange = Range("B1")'dinamikus tömbök méretének beállítása, egyéb változók inicializálásaReDim MyUniqueSubStrArray(Cells(Cells.Rows.Count, MySrcColumn).End(xlUp).Row)ReDim MyUniqueSubStrProcessedArray(Cells(Cells.Rows.Count, MySrcColumn).End(xlUp).Row)MyTempStr = ""i = 0j = 0'végignézzük a forrástartomány celláit egyenkéntFor Each MyCell In MySrcRange'ha az aktuális cella üres, akkor kihagyjuk, egyébként feldolgozzukIf Not IsEmpty(MyCell.Value) Then'aktuális cellát feldaraboljuk az elválasztó-karakter szerint, kvázi, mint szövegből oszlopokMyTempArray = Split(MyCell.Value, MYDELIMITER)'kötött formátum szerint a MyTempArray elemeinek a száma 5-nek kell, hogy legyen'ezért megvizsgáljuk, hogy annyi-eIf WorksheetFunction.CountA(MyTempArray) = 5 Then'igen, 5 eleme van a tömbnek'a MyTempStr dinamikus tömbbe bemásoljuk a MyTempArray első 4 elemétMyTempStr = MyTempArray(0) + MYDELIMITER + MyTempArray(1) + MYDELIMITER + MyTempArray(2) + MYDELIMITER + MyTempArray(3)'megvizsgáljuk, hogy a MyUniqueSubStrArray tömb elemei (az összes) tartalmazzák-e a MyTempStr-tMySubStr = Filter(MyUniqueSubStrArray, MyTempStr)'ha igen, akkor az elemeire bontott értékeket a MyDestRange + j + index címre másoljuk'és a MyUniqueSubStrProcessedArray aktuális indexű elemét TRUE-ra állítjuk'hogy a továbbiakban ne kelljen feldolgozniIf UBound(MySubStr) < 0 ThenMyUniqueSubStrArray(i) = MyTempStrMyUniqueSubStrProcessedArray(i) = FalseIf (InStr(1, UCase(MyCell.Value), UCase(MyUniqueSubStrArray(i)), vbTextCompare)) And (MyUniqueSubStrProcessedArray(i) = False) ThenCells(MyDestRange.Row + j, MyDestRange.Column) = MyTempArray(0) + MYDELIMITER + MyTempArray(1)Cells(MyDestRange.Row + j + 1, MyDestRange.Column) = MyTempArray(0) + MYDELIMITER + MyTempArray(1) + MYDELIMITER + MyTempArray(2)Cells(MyDestRange.Row + j + 2, MyDestRange.Column) = MyTempArray(0) + MYDELIMITER + MyTempArray(1) + MYDELIMITER + MyTempArray(2) + MYDELIMITER + MyTempArray(3)Cells(MyDestRange.Row + j + 3, MyDestRange.Column) = MyCell.Valuej = j + 4MyUniqueSubStrProcessedArray(i) = TrueEnd Ifi = i + 1Else:'ha nem, akkor az adott cella értékét be kell másolni a MyDestRange + j címreCells(MyDestRange.Row + j, MyDestRange.Column) = MyCell.Valuej = j + 1End IfElse:'ha nem megfelelő a kötött formátum, akkor feltesszük a kérdést, hogy mi legyen'kihagyja a makró a feldolgozásból, avagy kilépjenSelectedOptionOnWarningBox = MsgBox("Nem szabványos formátumú adat a(z) " & MyCell.Address & " cellában:" & vbLf & _MyCell.Value & vbLf & vbLf & _"[OK] - hibás cella kihagyása" & vbLf & _"[Mégse] - makró megállítása", vbQuestion + vbOKCancel)If SelectedOptionOnWarningBox = vbCancel ThenExit SubEnd IfEnd IfEnd IfNext MyCell'eseménykezelőket újra engedélyezzükApplication.ScreenUpdating = TrueApplication.EnableEvents = TrueEnd Sub
Új hozzászólás Aktív témák
Hirdetés
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Vírusirtó, Antivirus, VPN kulcsok GARANCIÁVAL!
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- PC Game Pass előfizetés
- Eladó Honor Magic 7 Lite 5G 8/512GB / ÚJ HÁTLAP / ÚJ KIJELZŐ / 12 hó jótállás
- Gamer PC-Számítógép! Csere-Beszámítás! R7 2700X / 16GB DDR4 / GTX 1080Ti 11GB / 256SSD + 2TB HDD
- Bomba ár! Dell Latitude 5410 - i5-10GEN I 16GB I 256SSD I HDMI I 14" FHD I Cam I W11 I Garancia!
- Honor 200 Lite 256GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Dell Latitude 5495 - Ryzen 5 I 8GB I 256SSD I 14" FHD I HDMI I Radeon I Cam I W11 I Gari
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs
Fferi50
