Gå til innhold

Excel Makro splitte opp en litt kompleks fil...


andrevr

Anbefalte innlegg

Jeg lurer på om noen kan hjelpe meg med om en makro (Excel 2013) kan klare å splitte opp filer på en automatisk måte.

 

I vedlagte fil ligger det informasjon (noe lønnsrettet for ansatte på en arbeidsplass) om tre ulike avdelinger med avdelingsnumrene "110 Fellesposter", "112 Fagavdelingen" og "186 Dokumentsenteret". Spørsmålet er om man kan få en makro til å skjønne å skjønne når det kommer en ny avdeling slik at den kan kopiere/lime inn de aktuelle linjene til et eget ark.

 

I dette tilfelle skal for eksempel radene 24-31 kopiere til et nytt ark (evnt 24-32), radene 33-39 og 41-46. Er dette mulig å få til på en god måte?

makro-refusjon.xlsx

Lenke til kommentar
Videoannonse
Annonse

Hei!

Jeg har laget en makro som splitter.

Inne på fanen Parametre ligger det i A-kolonnen hva som er (starten på) linjen som skal starte flyttingen til en fane, og i B-kolonnen ligger fanenavnet som avdelingen skal flyttes til. I c-kolonnen fyller makroen ut hvor den finner denne linjen - og kopierer linjene mellom hvert av disse intervallene. 

 

Her finner du filen din:

http://www.excelguru.no/download/1778/

 

Vennlig hilsen Ketil

 

Slik ser den ut:

 

Sub DeleOpp()
 Dim P As Worksheet
 Dim A As Worksheet
 Dim Avd As Worksheet
 
 Dim x As Integer
 Dim y As Integer
 Dim s As String
 
 Set P = Worksheets("Parametre")
 Set A = Worksheets("Ark1")
 
 
 With P
  x = 2: While .Cells(x, 1) <> ""
   s = UCase(.Cells(x, 1))
    stopp = 0
    With A
     y = 2: While stopp < 50
      s1 = UCase(.Cells(y, 1))
      If s1 = "" Then stopp = stopp + 1 Else stopp = 0
      If Len(s1) >= Len(s) Then
       If Left(s1, Len(s)) = s Then
        P.Cells(x, 3) = y
       End If
      End If
     y = y + 1: Wend
    End With
  x = x + 1: Wend
  P.Cells(x, 3) = y
 End With
 
 With A
  x = 2: While P.Cells(x, 1) <> ""
    s = P.Cells(x, 2)
    Set Avd = Worksheets(s)
    A.Range(P.Cells(x, 3) & ":" & P.Cells(x + 1, 3) - 1).Copy
    Avd.Range("A1").PasteSpecial
  x = x + 1: Wend
 End With
 
 
End Sub
Lenke til kommentar

 

Hei!

Jeg har laget en makro som splitter.

Inne på fanen Parametre ligger det i A-kolonnen hva som er (starten på) linjen som skal starte flyttingen til en fane, og i B-kolonnen ligger fanenavnet som avdelingen skal flyttes til. I c-kolonnen fyller makroen ut hvor den finner denne linjen - og kopierer linjene mellom hvert av disse intervallene. 

 

Her finner du filen din:

http://www.excelguru.no/download/1778/

 

Vennlig hilsen Ketil

 

Slik ser den ut:

 

Sub DeleOpp()
 Dim P As Worksheet
 Dim A As Worksheet
 Dim Avd As Worksheet
 
 Dim x As Integer
 Dim y As Integer
 Dim s As String
 
 Set P = Worksheets("Parametre")
 Set A = Worksheets("Ark1")
 
 
 With P
  x = 2: While .Cells(x, 1) <> ""
   s = UCase(.Cells(x, 1))
    stopp = 0
    With A
     y = 2: While stopp < 50
      s1 = UCase(.Cells(y, 1))
      If s1 = "" Then stopp = stopp + 1 Else stopp = 0
      If Len(s1) >= Len(s) Then
       If Left(s1, Len(s)) = s Then
        P.Cells(x, 3) = y
       End If
      End If
     y = y + 1: Wend
    End With
  x = x + 1: Wend
  P.Cells(x, 3) = y
 End With
 
 With A
  x = 2: While P.Cells(x, 1) <> ""
    s = P.Cells(x, 2)
    Set Avd = Worksheets(s)
    A.Range(P.Cells(x, 3) & ":" & P.Cells(x + 1, 3) - 1).Copy
    Avd.Range("A1").PasteSpecial
  x = x + 1: Wend
 End With
 
 
End Sub

 

 

Hei og takk for svar.

 

Beklager at jeg ikke var presis nok i beskrivelsen. Problemet her er at hvor mye mange linjer som kommer på hver avdeling varierer fra måned til måned. Denne måneden var det linje 24, 33 og 41 som var "start-radene", men neste måned kan det være noe helt annet. Dette er en refusjonsoversikt og hvis det er mange ansatte som er sykemeldte en måned blir det flere linjer. Neste måned kan det altså veldig gjerne være rad 24 (denne er antageligvis lik hver måned, gitt at det er noen sykemeldte i denne avdelingen), 37 og 48.  

 

På en eller annen måte må makroen forstå at det er snakk om en ny avdeling (på en generisk måte som alltid fungerer uavhengig av hva som er start-raden den aktuelle måneden). Har man først klart å klippe opp filen på en korrekt måte skal jeg alltids klare å få hver fil inn i riktig fil (bruker avdelingsnummeret til å åpne en fil med et bestemt navn og så klipper jeg inn der).

Lenke til kommentar

Hei igjen.

Jeg har laget en variant som plukker avdelingsnummeret og oppretter en fane per avdeling og kopierer linjene som tilhører denne avdelingen.

Kriteriet er at det skal stå "Avdeling xxx" i kolonne A og "Id" på linjen under i kolonne C.

Parameterarket benyttes av makroen, men du trenger ikke gjøre noe der selv.

 

http://www.excelguru.no/download/1781/

 

Vennlig hilsen Ketil

Lenke til kommentar

Hei igjen.

Jeg har laget en variant som plukker avdelingsnummeret og oppretter en fane per avdeling og kopierer linjene som tilhører denne avdelingen.

Kriteriet er at det skal stå "Avdeling xxx" i kolonne A og "Id" på linjen under i kolonne C.

Parameterarket benyttes av makroen, men du trenger ikke gjøre noe der selv.

 

http://www.excelguru.no/download/1781/

 

Vennlig hilsen Ketil

 

Hei igjen Ketil.

 

Sett litt på det du satte opp og en smart måte du løste dette på. Hva brukes egentlig parameter-arket til nå da? Du kan jo strengt tatt fjerne det som står der, og allikevel fungerer det greit.

 

Grunnlagsfilen er ganske dårlig og må bearbeides noe for å få til noe som gir mening for brukeren. Se vedlagte eksempel for avd 720 (rad 48 og nedover i ark1) og eksempel (eget ark) som viser hvordan alle avdelinger skal se ut til slutt. Valgte avd 720 siden her ser du kostnader som kommer på både en konto som heter 5800 og en som heter 5801. I alle tilfelle tar oppsettet ditt hvor det må komme "Id" høyde for dette og får med seg alt på en korrekt måte før en ny avdeling starter.

 

1) der det står 1540 (for eksempel celle B67) er overflødig og kan slettes i bunn av avdelingene. Kan sikkert slette (section replace eller noe slikt) alt i hele grunnlagsfilen, men da er problemet om tallet 1540 tilfeldigvis skulle stå andre steder (som beløp)

2) Summer i celle G62, G65 og G67 burde flyttes noen kolonner til høyre. Samme med cellene B62, C62, B65 og C65 som burde flyttes litt til høyre. Litt enkel formatering med linjer og litt farge gjør den siste biten.  

 

Det som er krevende er det å få ting til å fungere på en generisk måte overalt uavhengig av hvordan grunnlagsfilen ser ut...

makro-refusjon-02v1.xlsx

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...