Just nu i M3-nätverket
Gå till innehåll

Hjälp med makro som sorterar rader


Elle

Rekommendera Poster

Hej

 

Jag skulle bli så tacksam för hjälp att skriva ett vba-makro i Excel. Jag har en fil med jättemycket information (rader) i kolumn A. Så här ser informationen i filen ut på de första 10 raderna (mönstret upprepar sig sedan men med olika innehåll i 60.000 rader):

<Cell> <Id MCC="236" MNC="55" LAC="793D" CI="7B1D" /> <Name Short="10301 45678"> <Row RowNumber="1">10301 31261</Row> <Row RowNumber="2"> Cell: 240 12 283D 7A1D</Row> <Row RowNumber="3" /> <Row RowNumber="4" /> </Name> <Location Lat="45,20046003" Long="16,00673389" Angle="5" Direction="20" /> </Cell>

 

Om jag vill få ut informationen strukturerat i kolumner ist, dvs någon slags loop var 10:e rad (mellan <Cell> och </Cell>) som transformerar rader till kolumner (kopiera - klistra in Transponera - hur gör jag då?

 

Tack på förhand!

Länk till kommentar
Dela på andra webbplatser

Hej

 

Jag skulle bli så tacksam för hjälp att skriva ett vba-makro i Excel. Jag har en fil med jättemycket information (rader) i kolumn A. Så här ser informationen i filen ut på de första 10 raderna (mönstret upprepar sig sedan men med olika innehåll i 60.000 rader):

<Cell> <Id MCC="236" MNC="55" LAC="793D" CI="7B1D" /> <Name Short="10301 45678"> <Row RowNumber="1">10301 31261</Row> <Row RowNumber="2"> Cell: 240 12 283D 7A1D</Row> <Row RowNumber="3" /> <Row RowNumber="4" /> </Name> <Location Lat="45,20046003" Long="16,00673389" Angle="5" Direction="20" /> </Cell>

 

Om jag vill få ut informationen strukturerat i kolumner ist, dvs någon slags loop var 10:e rad (mellan <Cell> och </Cell>) som transformerar rader till kolumner (kopiera - klistra in Transponera - hur gör jag då?

 

Tack på förhand!

Bifogar en fil. Formatteringen blev visst inte så tydlig när jag postade inlägget. 

post-38138-0-06043200-1486565888_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

Tusen tack för svar. Den första formeln fungerade alldeles utmärkt. Försökte mig även på makrot men den klagar på raden

 

rCell.Offset(1,0).EntireRowDelete

 

Försöker mig också på att förstå koden men fastnar på raderna

rCell.Offset(0, i) = rCell.Offset(1, 0)
rCell.Offset(1, 0).EntireRow.Delete

 

Har du möjlighet att förklara vad makrot gör här och hur du tänkt. Får inte ihop det. Hur kopieras värdet egentligen? 

 

TACK igen!

Länk till kommentar
Dela på andra webbplatser

Hmm, det fungerat hos mig så det borde inte vara problem. Se till att deklarationen (dim) finns med och att det inte slunkit in något mellanslag eller specialtecken någonstans. 

 

Så här borde den ha varit kommaterad: 

i= en hjälpräknare 

rCell = någon cell (i kolumn a)

 

For Each rCell In Range("A:A")

Betyder bara att man stegar igenom alla celler i A-kolumnen (börjar högst upp)

 

Först ber vi makrot att sluta när den kommer till en tom cell.

If rCell = "" Then Exit Sub

 

Sen säger vi åt den att  börja flytta cellvärden så fort den kommer till en "startcell". annars går den vidare till nästa cell i A-kolumnen

If rCell = "<Cell>" Then

 

<Cell> står ju redan i A-kolumnen så den skall bara kopiera 9 värden till höger medan den står kvar i "<Cell>"

For i = 1 To 9

 

i VBA betyder Offset att man gör något med en cell som är förskjutet x rader och Y kolumner jämfört med den aktuella cellen ("<Cell>")

 

Den här raden säger alltså att cellen som står "i" steg åt höger (om "<Cell>") skall tilldelas samma värde som cellen ett steg ner

rCell.Offset(0, i) = rCell.Offset(1, 0)

Koden skall egentligen vara:

rCell.Offset(0, i).value = rCell.Offset(1, 0.value

Men excel är förlåtande

 

Fördelen med att tilldela en cell värdet från en annan cell istället för att klippa och klistra är att det går enormt mycket fortare. 

 

 

 

Sen tar vi bort raden som står nedanför "<Cell>" (värdet är ju redan kopierat)

rCell.Offset(1, 0).EntireRow.Delete

 

Och så loopar man igen, nu är  i=2 (osv) , så nästa cell som skall få ett nytt värde står 2 steg till höger om "<Cell>", och eftersom vi raderad den rad som stod under "<Cell>" så finns värdet vi vill kopiera ett steg ner igen.

Next i

 

 

*********************************************************************************************************

Om du tycker att det är obehagligt att låta ett makro automatiskt raderara rader (och det är det ju) så kan du skippa det steget. Slå ihop med makrot och sortera sedan efter kolumn B eller liknande så får du ta bort originalen (rader som inte startar med <Cell>) manuellt: 

Sub Makro1()
Dim i As Integer
Dim rCell As Range

For Each rCell In Range("A:A")
If rCell = "" Then Exit Sub
    If rCell = "<Cell>" Then
        For i = 1 To 9
            rCell.Offset(0, i).value = rCell.Offset(i, 0).value
        Next i
    End If
Next rCell
End Sub

Skillnaden är att du tar bort raderingskoden och ändrar

rCell.Offset(0, i) = rCell.Offset(1, 0)

till

rCell.Offset(0, i) = rCell.Offset(i, 0)

så att den hela tiden hämtar värdet i-rader ner (dvs värdet "i" kolumner till höger om <Cell> = värdet "i" rader nedanför <Cell> 

Tusen tack för världens bästa svar! Blir så glad och tacksam över denna hjälp!

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...