-
Fototrend
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
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most Ünnepi áron! :)
- 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!
- Antivírus szoftverek, VPN
- Game Pass Ultimate előfizetések 1 - 36 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- Okosóra felvásárlás!! Samsung Galaxy Watch 5 Pro, Samsung Galaxy Watch 6 Classic
- Microsoft Surface Laptop 3 13.5" fekete i5-1035G7 16GB 512GB 1 év garancia
- DELL PowerEdge R730xd 16LFF 160TB+400GB 2U rack - 2xE5-2683v4 (16c/32t),256GB RAM,2x10G NET,HBA330
- Surface Pro 7+ i5-1135G7 16G 256GB 1 év garancia
- HP ProDesk 600 G4 i5-8100 16GB 512GB 1 év garancia
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Fferi50
