28. august 2008 - 19:37Der er
10 kommentarer og 1 løsning
Lookup i markeret område
Jeg har en række virksomheder i kolonne 1 og i kolonne 2 står de varer som denne virksomhed har og i kolonne 3 priser. Virksomhedens navn står kun ud for den første vare som virksomheden har. Jeg har alle varenumre i et nyt ark og når jeg skriver virksomhednes navn øverst i dette ark (a1) skal den returnere priserne på kun de varer som denne virksomhed har. Jeg bruger normalt lookup og har lavet denne kode:
Sub Hent_tal()
Dim K As Integer ' de rækker hvor varerne står i For K = 5 To 56
Dim henttal As Variant henttal = Application.VLookup(Sheets("ark2").Cells(K, 1), Sheets("ark1").Columns("A:C"), 2, 0) If IsError(found) = True Then Cells(K, 3) = 0 Else Cells(K, 3) = found End If Next K
End Sub
Men mit problem er koden som skal finde virsomhedsnavn i ark1 og returnere priserne på de produkter denne virksomhed har på baggrund af produktnavn i kolonne. Virksomhederne har ikke lige mange produkter, så området den skal søge i er kun ned til næste virksomhed i kolonne 1. Ud for hver virksomhed står der teksten "total" i kolonne 2, hvis dennne kan bruges som "stopklods"
Min tanke var at min loopup-kode skal komiberens med den nye kode
Håber virkelig der er nogen der kan hjælpe eller bare komme med ideer til hvordan jeg griber det an. Har forsøgt lit med activecell, do until og vil have denne markering ind i et array, men lykkedes ikke.
Du skriver firmanavn i A1 i ark 2 og kører så koden
Du har firma navn i A kolonnen i ark1, og der skal være en stop under det sidste firma's liste i a kolonnen.
Public Sub Hent_Liste() firma = Sheets("ark2").Cells(1, 1) For Each C In Sheets("ark1").Columns("A").Cells If C = firma Then rkstart = C.Row rkslut = C.End(xlDown).Offset(-1, 0).Row Exit For End If Next Sheets("ark1").Range("A" & rkstart & ":C" & rkslut).Copy Sheets("ark2").Cells(2, 1)
Prøv at sætte dette i et modul, du skriver firmanavn i A1 på Ark2. De varer du skal have priser på, står i A5 til A56, prisen skrives i C kolonnen
Du har firma navn i A kolonnen i ark1, og varenr. i B og pris i C,og der skal være en stop under det sidste firma's liste i A kolonnen.
Du kører makroen 'Hent_tal', når du vil have priser på'
********** kodestart *******************
Dim Data As Variant
Public Sub Hent_Liste(X) firma = Sheets("ark2").Cells(1, 1) For Each C In Sheets("ark1").Columns("A").Cells If C = firma Then rkstart = C.Row rkslut = C.End(xlDown).Offset(-1, 0).Row Exit For End If Next Data = Sheets("ark1").Range("A" & rkstart & ":C" & rkslut)
End Sub
Sub Hent_tal() Hent_Liste (X) Dim K As Integer ' de rækker hvor varerne står i Dim I As Integer, OK As Boolean
For K = 5 To 56 OK = False For I = 1 To UBound(Data) If Data(I, 2) = Sheets("ark2").Cells(K, 1) Then Cells(K, 3) = Data(I, 3) OK = True Exit For End If Next If Not OK Then Cells(K, 3) = 0 Next K
I den øverste kode har jeg lidt problemer med hvordan du har dim'et C, rkslut og rkstart samt at jeg skal vel fortælle hvilket interval C går fra og til.
Jeg takker meget for dit imponerende hurtige bud og vil kigge nærmere på det imorgen og vender tilbage hurtigst muligt.
Public Sub Hent_Liste(X As String) Dim Firma As String, C As Range Dim RkStart As Integer, RkSlut As Integer Firma = Sheets("ark2").Cells(1, 1) For Each C In Sheets("ark1").Columns("A").Cells If C = Firma Then RkStart = C.Row RkSlut = C.End(xlDown).Offset(-1, 0).Row Exit For End If Next Data = Sheets("ark1").Range("A" & RkStart & ":C" & RkSlut) End Sub
Sub Hent_tal() Hent_Liste ("X") Dim K As Integer ' de rækker hvor varerne står i Dim I As Integer, OK As Boolean For K = 5 To 56 OK = False For I = 1 To UBound(Data) If Data(I, 2) = Sheets("ark2").Cells(K, 1) Then Cells(K, 3) = Data(I, 3) OK = True Exit For End If Next If Not OK Then Cells(K, 3) = 0 Next K End Sub
Det virker helt perfekt og jeg takker rigtig mange gange da det har sparet mig for rigtigt meget tid, så du skal meget velfortjent have dine 200 points
Jeg kender ikke dt her system så men der skal vel være et svar fra dig før jeg kan give dig points.
Jeg var dog lidt for hurtigt på aftrækkeren da jeg har problemer med at den første vare som står lige ud for virksomhedsnavn ikke kommer med og det gør den sidste vare heller ikke som står på linjen lige før næste virksomhedsnavn. Den første "vare" for hver virksomhed er dog "total", men jeg skal meget gerne have denne med.
Der er ikke mellemrum mellem sidste vare og næste firma, er det et problem da du i begyndelsen skriver" "der skal være en stop under det sidste firma's liste i a kolonnen"
"eg var dog lidt for hurtigt på aftrækkeren da jeg har problemer med at den første vare som står lige ud for virksomhedsnavn ikke kommer med og det gør den sidste vare heller ikke som står på linjen lige før næste virksomhedsnavn. Den første "vare" for hver virksomhed er dog "total", men jeg skal meget gerne have denne med."
det forstår jeg ikke, de burde være med.
der kan skrues her RkStart = C.Row ' startrækken måske RkStart = C.Row-1
" Der er ikke mellemrum mellem sidste vare og næste firma, er det et problem da du i begyndelsen skriver" "der skal være en stop under det sidste firma's liste i a kolonnen""
det menes sådan,at allernederst i listen, hvor der ikke er mere i B kolonnen, sættes noget ind i A kolonnen, ud for den første tomme celle i B kolonnen
Tak for den sidste hjælp, og bliver nok nødt til at indrømme at start og slut-rækken var som de skulle være, så jeg må have lavet fejl ;-) Men glad for at jeg lige fik helt styr på det med stoppet til sidst.
Men igen mange tak for hjælpen.
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.