- AirTag-riválist hoz Európába a Xiaomi
- Google Pixel topik
- Xiaomi 15 - kicsi telefon nagy energiával
- Babra megy a játék az iPhone 18 Pro esetében
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Vivo X200 Pro - a kétszázát!
- Okosóra és okoskiegészítő topik
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- OnePlus 15 - van plusz energia
- Samsung Galaxy A54 - türelemjáték
-
Mobilarena
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
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Luck Dragon: Asszociációs játék. :)
- LEGO klub
- Forza Horizon 6 - Vár ránk Japán!
- Melyik tápegységet vegyem?
- Proxmox VE
- Nintendo Switch 2
- Xbox Series X|S
- One otthoni szolgáltatások (TV, internet, telefon)
- AirTag-riválist hoz Európába a Xiaomi
- További aktív témák...
- iKing.Hu - Apple iPhone 15 Pro Max Black Titanium 100% Akku
- BESZÁMÍTÁS! Asus TUF F15 FX506HE FHD notebook - i5 11400H 16GB DDR4 512GB SSD RTX 3050 Ti 4GB WIN11
- Apple MacBook Pro 16 (2021) 16GB/512GB használt, karcmentes 87% akku, 191 ciklus
- Dell 14 Latitude 7450 WUXGA 2in1 Touch X360 Ultra5 135U 12mag 16GB 512GB Win11 Pro WiFi7 Garancia
- AKCIÓ! BESZÁMÍTÁS! Részletfizetés 0% THM ÚJ RTX 5090 több típusban 3 év garanciával 27% áfával
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Fferi50
