Jeg har brug for at kunne udfylde felterne i kolonnen 'Basisløn' med tal, udfra hvilket løntrin der er anført i kolonnen 'løntrin'. Tallene hentes fra et dataark i samme excelmappe.
lopslag er baseret på, at listen med løntrin i Ark2 står i kolonne A og beløbet i kolonne B. Står de i rækker, bruges vopslag. Du skal måske overveje at bruge forment =LOPSLAG(A5; 'Ark2'!A$2:B$6; 2; sand) Så får du kun en værdi retur, hvis opslagsværdien matcher præcist.
Ah ja, problemet er at jeg skal kunne sikre at beregningen er i kolonnen uden at skulle kopiere den ned når der lægges nye linier ind. Det er nødvendigt at kunne kode det så jeg kan køre det som en makro.
Makroer er jeg ikke nogen ørn til, så der skal der nogle andre på banen. Min simple løsning, som godt nok i længden kan gøre arket lidt tungt, ville være denne:
Den sikrer i hvert fald, at der ikke kommer til at stå en masse nuller i kolonnen. Men held og lykke med at få en makro-løsning. Jeg afventer den med interesse, da jeg nok også selv vil kunne have gavn af den.
Men den løsning vil jo fylde en celle med en formel, hvor der faktisk skal være en anden formel, så den holder nok heller ikke... Det er VBA koden jeg er ude efter.
Ellers er en mulighed at bruge Find-funktionen på range-objektet til at finde den celle der indeholder det søgte løntrin i dit dataark, og så kombinere med Offset-funktionen til at finde basislønnen.
Jeg vil ikke lige nu bruge tid på at lave et konkret eksempel, da det jo er noget tid siden spørgsmålet er lagt, så det meget vel kan tænkes at du har fået det løst siden. Hvis det stadig er aktuelt, skal jeg gerne skrive et mere konkret eksempel.
Kan denne hjælpe? - skal selvf.tilpasses til hvor du har dine data:
Public Function LookUp(lookupVal As Variant) As Variant Dim foundCell As Range Dim lookupRange As Range Set lookupRange = Worksheets("Sheet1").Range("A1:A5") Set foundCell = lookupRange.Find(lookupVal, LookIn:=xlValues, lookat:=xlWhole) If Not foundCell Is Nothing Then LookUp = foundCell.Offset(0, 1).Value ' her antages at den søgte værdi står 1 kolonne til højre for lookup-værdien End If End Function
Jeg antager at du har dine løntrin til at stå samlet i en eller anden kolonne (her "A1:A5") i et givet ark (her "Sheet1") og at den tilhørende basisløn står på samme række i en anden kolonne (her 1 kolonne til højre for løntrinnet, dvs. kolonne B, hvis løntrin er i kolonne A).
Tak :-) Jeg kan godt se sammenhængen, men jeg mangler noget i koden der angiver i hvilken kolonne der skal ledes efter løntrinnet. Jeg tænker at koden ellers vil udskifte samtlige tal og bogstaver der har sammenfald med løntrin i det oprindelige ark med en lønsum. (løntrinnene er 1, 2, 4, 5, 6, 7, 8, S og C).
Ah.. ok, jeg troede bare det var lookup-funktionen du skulle have input til.
Samlet kode, som du kan lægge i et modul. Lookup-funktionen skal tilpasses som før nævnt. FillValues som er hovedrutinen du skal køre skal tilpasses som nævnt med kommentarer.
Public Sub FillValues()
Dim kodeCol As Integer Dim loensumCol As Integer
Dim row As Integer Dim startrow As Integer Dim stopBlankRows As Integer Dim numBlankRows As Integer Dim ws As Worksheet
''' Ret nedenstående 5 linjer så de passer kodeCol = 1 ' Den kolonne hvor koden for løntrin findes - 1=kolonne A loensumCol = 2 ' Den kolonne hvor den tilhørende lønsum skal skrives - 2=kolonne B startrow = 2 stopBlankRows = 1 ' stop når der er så mange blanke celler i træk i kode-kolonnen. hvis der ingen huller er, så den skal stoppe ved første tomme celle, så skal der stå 1 Set ws = Worksheets("Sheet2") ' Udskift Sheet2 med ark-navn
row = startrow numBlankRows = 0
Do While numBlankRows < stopBlankRows If ws.Cells(row, kodeCol).Value = "" Then numBlankRows = numBlankRows + 1 Else ws.Cells(row, loensumCol).Value = LookUp(ws.Cells(row, kodeCol).Value) numBlankRows = 0 End If row = row + 1 Loop
End Sub
Public Function LookUp(lookupVal As Variant) As Variant Dim foundCell As Range Dim lookupRange As Range Set lookupRange = Worksheets("Sheet1").Range("A1:A5") Set foundCell = lookupRange.Find(lookupVal, LookIn:=xlValues, lookat:=xlWhole) If Not foundCell Is Nothing Then LookUp = foundCell.Offset(0, 1).Value ' her antages at den søgte værdi står 1 kolonne til højre for lookup-værdien End If End Function
Synes godt om
Ny brugerNybegynder
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.