Avatar billede idani Praktikant
24. juli 2011 - 21:18 Der er 17 kommentarer og
1 løsning

Returner den sidste værdi - ved forspørgsel

Jeg har følgende opstilling

Unique Id    Start Date    Pension

Joachim        08-01-2007    HDO AA
        15-08-2007    HDO BB
        01-04-2008    HDO CC
        01-04-2009    HDO CC
        01-04-2010    HDO CC

Den indeholder ca 200 navne.

Hvert navn står kun anført i en celle (Kolonne A)og kun en gang, men kan have et antal variable rækker nedefter.

Min udfordring består i at jeg skal danne en liste som indeholder følgende
Kolonne A      Kolonne B        Kolonne C
Unique Id    Start Date    Pension
Navn            Den nyeste dato  Pensions ordningen som høre til datoen

Jeg kan ikke lige gennemskue hvordan jeg kan danne denne liste uden at lave alt for meget manuelt eller for mange ark.

Løsningen skal bruges til at afstemme pension for ialt 4000 medarbejderede mellem 2 systemer

Hilsen
Ida
Avatar billede supertekst Ekspert
24. juli 2011 - 23:09 #1
Vil den nyste dato altid være den sidste?

Kan udføres via VBA..
Avatar billede idani Praktikant
25. juli 2011 - 08:45 #2
Hej Supertekst

Ja det vil den - jeg har ikke set andet - men den kan også stå i samme række som navnet, altså når der ikke er flere linier på folk

Hvordan ville sådan en VBA umiddelbart se ud - jeg kan godt selv rette den til, men jeg er ikke sikker på hvordan jeg starter det

/Ida
Avatar billede supertekst Ekspert
25. juli 2011 - 09:12 #3
Hej Ida - jeg vender snarest tilbage med et forslag.
Avatar billede supertekst Ekspert
25. juli 2011 - 09:53 #4
Koden indsættes "under" relevante ark:

Dim antalRæk As Long, ræk As Long, ræk2 As Long
Dim navn As String, dato As Date, ordning As String
Public Sub nyestePension()
Rem beregn antal rækker
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    ræk2 = 2
   
    Application.ScreenUpdating = False
   
    For ræk = 2 To antalRæk
        If ræk = 2 Then                    'opstart
            navn = Range("A2")
            dato = Range("B2")
            ordning = Range("C2")
        Else
            If Range("A" & ræk) <> "" Then  'brud - opbyg nyeste i kol E-G
                Range("E" & ræk2) = navn
                Range("F" & ræk2) = dato
                Range("G" & ræk2) = ordning
                ræk2 = ræk2 + 1
               
                navn = Range("A" & ræk)
            End If
            dato = Range("B" & ræk)
            ordning = Range("C" & ræk)
        End If
    Next ræk
Rem sidste brud
    Range("E" & ræk2) = navn
    Range("F" & ræk2) = dato
    Range("G" & ræk2) = ordning
   
    Application.ScreenUpdating = True
End Sub
Avatar billede idani Praktikant
25. juli 2011 - 14:02 #5
Hej Supertekst den virkede super godt - lige indtil der kommer personer op med helt blanke linier i datoen (arket indeholder flere kolonner)
Så nu er det lykkedes mig at lave et ark hvor alle celler har en værdi.

Altså
NAVN          DATO          ORDNING
Joachim        08-01-2007    HDO AA
Joachim        15-08-2007    HDO BB
Joachim        01-04-2008    HDO CC
Joachim        01-04-2009    HDO CC
Joachim        01-04-2010    HDO CC

Så det jeg reelt har behov for er en VBA som siger.
If row "er størst" inden for det samme navn  - så skal den tage en kopi af hele rækken og ligge over i ark 2

er jeg helt sort ??

Den sidste dato vil altid ligge som den sidste på personen....
så måske noget i retning af

If Range ("A2") <> Range ("A") then
copy row
past special Sheet1

Men jeg kan ikke rigtig finde ud af at sætte det ind i en VBA
har været på kursus - men kan ikke helt starte de VBA'er op endnu ??

/Ida
Avatar billede supertekst Ekspert
25. juli 2011 - 14:16 #6
Er det så ikke "farbart" at teste på når navnet skifter i kolonne A?
Avatar billede idani Praktikant
25. juli 2011 - 14:30 #7
hmmm hvad har du så af gode ideer.
Det skal lige siges at det navn som står i kolonne A er unik - så det sammen navn vil kun optræde for en person.

/ida
Avatar billede supertekst Ekspert
25. juli 2011 - 14:40 #8
Ok - arbejder p.t. med version 2...
Avatar billede idani Praktikant
25. juli 2011 - 14:46 #9
du er simplethen en stjerne

TAK

/Ida
Avatar billede supertekst Ekspert
25. juli 2011 - 14:57 #10
Rem version 2
Dim antalRæk As Long, ræk As Long, ræk2 As Long
Dim navn As String
Public Sub nyestePension()
Rem beregn antal rækker
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    ræk2 = 2
   
    Application.ScreenUpdating = False
   
    For ræk = 2 To antalRæk
        If ræk = 2 Then                        'opstart
            navn = Range("A2")
        Else
            If Range("A" & ræk) <> navn Then
                udførBrud
            End If
        End If
    Next ræk
Rem sidste brud
    udførBrud
    Application.ScreenUpdating = True
End Sub
Private Sub udførBrud()
    Rows(ræk - 1 & ":" & ræk - 1).Select
    Selection.Copy
   
    ActiveWorkbook.Sheets("ark2").Activate
    ActiveSheet.Cells(ræk2, 1).Select
    ActiveSheet.Paste
    ræk2 = ræk2 + 1
   
    Application.CutCopyMode = False
    ActiveWorkbook.Sheets("ark1").Activate
    navn = Range("A" & ræk)
End Sub
Avatar billede idani Praktikant
25. juli 2011 - 15:24 #11
Hej Supertekst

Den virker bare til UG x / o / ~og hvad du ellers kan sætte på af superlativer

smider du et svar - og så takker jeg mange gange

Hilsen
Ida
Avatar billede supertekst Ekspert
25. juli 2011 - 15:27 #12
Hej Ida - tak for de pæne ord - og selv tak samt et svar...
Avatar billede idani Praktikant
26. juli 2011 - 12:01 #13
hej Supertekst

Håber det er ok jeg lige spørger igen.

Jeg har stor glæde af din macro - men er løbet ind i en lille udfordring.
Kan vi ikke få den til at PastSpecial - Values og Formats.

jeg har selv forsøgt flere forskellige versioner, men der kommer bare en fejl 400 op :o(

/Ida
Avatar billede supertekst Ekspert
26. juli 2011 - 12:24 #14
Ok - ser på det..
Avatar billede supertekst Ekspert
26. juli 2011 - 12:38 #15
Rem version 3
Dim antalRæk As Long, ræk As Long, ræk2 As Long
Dim navn As String
Public Sub nyestePension()
Rem beregn antal rækker
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    ræk2 = 2
   
    Application.ScreenUpdating = False
   
    For ræk = 2 To antalRæk
        If ræk = 2 Then                        'opstart
            navn = Range("A2")
        Else
            If Range("A" & ræk) <> navn Then
                udførBrud
            End If
        End If
    Next ræk
Rem sidste brud
    udførBrud
    Application.ScreenUpdating = True
End Sub
Private Sub udførBrud()
    Rows(ræk - 1 & ":" & ræk - 1).Select
    Selection.Copy
   
    ActiveWorkbook.Sheets("ark2").Activate
    ActiveSheet.Rows(ræk2 & ":" & ræk2).Select
   
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    ræk2 = ræk2 + 1
   
    Application.CutCopyMode = False
    ActiveWorkbook.Sheets("ark1").Activate
    navn = Range("A" & ræk)
End Sub
Avatar billede idani Praktikant
26. juli 2011 - 13:19 #16
perfekt det funker bare - mange tak for hjælpen

/ida
Avatar billede supertekst Ekspert
26. juli 2011 - 13:31 #17
Godt :-) & selv tak...
Avatar billede idani Praktikant
26. juli 2011 - 15:17 #18
hej Supertekst

kan jeg lokke dig til at kigge på

http://www.eksperten.dk/spm/943790#reply_7814107

nu har jeg forsøgt at løse den selv ved hjælp af VBA - men jeg kan ikke få den til det :(
beklager misbruget af dig

/IDa
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester