Avatar billede warberg78 Nybegynder
28. august 2008 - 19:37 Der 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.
Avatar billede kabbak Professor
28. august 2008 - 21:39 #1
OK, her er et eksempel.

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)
 
End Sub
Avatar billede kabbak Professor
28. august 2008 - 22:11 #2
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

End Sub
Avatar billede warberg78 Nybegynder
28. august 2008 - 22:32 #3
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.
Avatar billede kabbak Professor
28. august 2008 - 22:45 #4
C tager bare hele kolonne A, så den skulle finde det selv
Avatar billede warberg78 Nybegynder
28. august 2008 - 23:03 #5
Har lidt problemer med koden. Jeg har tilføket Dim firma As Variant, men den siger stadig at der er problemer med "C"
Avatar billede kabbak Professor
28. august 2008 - 23:18 #6
Dim C as range
Avatar billede kabbak Professor
29. august 2008 - 08:19 #7
Så er de dimmet:

Option Explicit

Dim Data As Variant

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
Avatar billede warberg78 Nybegynder
29. august 2008 - 11:26 #8
Hej Kabbak

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

Rigtig god weekend herfra!
Avatar billede warberg78 Nybegynder
29. august 2008 - 16:28 #9
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"
Avatar billede kabbak Professor
29. august 2008 - 17:25 #10
"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

Slutrækken
    RkSlut = C.End(xlDown).Offset(-1, 0).Row
måske

RkSlut = C.End(xlDown).Offset(0, 0).Row


" 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
Avatar billede warberg78 Nybegynder
29. august 2008 - 18:33 #11
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.
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
Kurser inden for grundlæggende programmering

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