Avatar billede mainframe Nybegynder
04. oktober 2007 - 23:11 Der er 16 kommentarer og
1 løsning

lopslag med flere af samme værdi

Hej eksperter

Jeg har et regneark hvor der skal laves et lopslag, hvor værdien kan optræde flere steder

    a    b    c    d

1    1    aa    =lopslag(1;a1:b5;2)???
2    3    bb
3    4    cc
4    1    dd
5    0    ee


I c1 skal den returnere både aa og dd

MVH
Allan
Avatar billede luffeladefoged Praktikant
05. oktober 2007 - 10:12 #1
Umiddelbart vil jeg sige du ikke skal bruge et opslag. Flere værdier i en celle lyder ikke rigtig ideelt.
Har du overvejet at måske bruge et autofilter istedet? Menu - data - filter - autofilter. Så kunne du filtrere på 1 og få alle dine offset værdier i hver sin celle.
Hilsen Luffe
Avatar billede supertekst Ekspert
05. oktober 2007 - 10:27 #2
VBA er også en mulighed
Avatar billede mainframe Nybegynder
05. oktober 2007 - 15:11 #3
VBA er ok
Avatar billede mainframe Nybegynder
06. oktober 2007 - 23:09 #4
...men er der nogen der kan lave sådan een???
Avatar billede kabbak Professor
07. oktober 2007 - 00:22 #5
Public Function XOpslag(Kriterie As Variant, Område As Range, ResKolonne As Integer) As String
Application.Volatile
    Om = Range(Område.Address)
    For i = 1 To UBound(Om)
        If Om(i, 1) = Kriterie Then
            XOpslag = XOpslag & " " & Om(i, ResKolonne)
        End If
    Next
End Function

kaldes sådan

= XOpslag(1;A1:B5;2)
Avatar billede kabbak Professor
07. oktober 2007 - 00:28 #6
den kan også se sådan ud

Public Function XOpslag(Kriterie As Variant, Område As Range, ResKolonne As Integer) As String
Application.Volatile
    For i = 1 To Område.Rows.Count
        If Område(i, 1) = Kriterie Then
            XOpslag = XOpslag & " " & Område(i, ResKolonne)
        End If
    Next
End Function
Avatar billede mainframe Nybegynder
08. oktober 2007 - 09:36 #7
Den sidste er rigtig god, næsten som jeg ønsker det. Men alle resultaterne skal stå i hver sin celle, også selvom de har samme værdi.
Som den står deroppe kommer alle af samme værdi i en enkelt celle.
Kan det lade sig gøre ?
Avatar billede kabbak Professor
08. oktober 2007 - 22:15 #8
Jeg prøver, så kan du selv se resultatet.

Public Function XOpslag(Kriterie As Variant, Område As Range, ResKolonne As Integer) As Variant
Dim Res() As Variant, X As Integer
Application.Volatile
X = 0
For I = 1 To Område.Rows.Count
        If Område(I, 1) = Kriterie Then
        ReDim Preserve Res(X)
          Res(X) = Område(I, ResKolonne)
          X = X + 1
        End If
    Next
    XOpslag = Res
End Function

skrives sådan i formellinjen,samtidig med at du har markeret det antal celler, på samme række, som du mener vil blive returneret som maksimum.'

= XOpslag(1;A1:B5;2)

slut af med CTRL+SHIFT+ENTER
Avatar billede mainframe Nybegynder
09. oktober 2007 - 22:39 #9
Ok jeg prøver lige at formulere grafisk:

    A    B    C    D

1    1    4.a  4.a
2    2    4.b  5.b
3    5    5.a  4.b
4    1    5.b  6.a
5    3    6.a  6.b
6    4    6.b  5.a
7    6    7.a  7.b

----------------------

I kolonne A vil tallene løbende skifte
Kolonne B er navne (klasser)
Kolonne C skulle gerne løbende rangere klasserne alt efter hvilken placering de har.
I eksemplet er der 7 klasser og skulle gerne have rangeres i 7 celler.

MVH
Allan
Avatar billede kabbak Professor
09. oktober 2007 - 23:07 #10
var det så ikke nemmere med en sortering og bruge A kolonnen at sortere efter ??
Avatar billede mainframe Nybegynder
10. oktober 2007 - 07:30 #11
Det har du nok ret i...jeg har ikke brugt excel ret meget, så jeg kender ikke til ret mange funktioner. Det eneste krav er, at den løbende selv skal sortere, da pc'en hele tiden opdaterer sig selv via projektdeling (flere pc'ere om en excel fil)
Avatar billede mainframe Nybegynder
10. oktober 2007 - 15:59 #12
ok, jeg har lavet en makro...

Sub sorter()
'
' sorter Makro
'

'
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B4:B8"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Application.run "'trimdag97-03klar.xls'!run"
End Sub

Hvordan får jeg den til at køre hvert 20 sek. automatisk??
Avatar billede kabbak Professor
10. oktober 2007 - 16:24 #13
Dim Tid As Date


Public Sub StartSortering()
    Tid = Now() + TimeSerial(0, 0, 20)
    Application.OnTime Tid, "Sorter", , True
End Sub

Public Sub StopSortering()
Application.OnTime Tid, "Sorter", , False
End Sub


Sub sorter()
'
' sorter Makro
'

'
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B4:B8"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Application.Run "'trimdag97-03klar.xls'!run"
End Sub
Avatar billede mainframe Nybegynder
10. oktober 2007 - 19:11 #14
Jeg ved ikke hvorfor den anden sidste linje er med:
"Application.Run "'trimdag97-03klar.xls'!run"
Den var ikke med anden gang jeg lavede makroen.hmmm
gør det nogen forskel???

Det korte og det lange er at makroen kun kører 1 gang
Jeg har sat det hele ind i modules- module2 (har en makro der gemmer hele arket hvert 20 sek. i module1.

Dim Tid As Date


Public Sub StartSortering()
    Tid = Now() + TimeSerial(0, 0, 20)
    Application.OnTime Tid, "Sorter", , True
End Sub

Public Sub StopSortering()
Application.OnTime Tid, "Sorter", , False
End Sub


Sub sorter()
'
' sorter Makro
'

'
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B4:B8"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


Gør jeg noget forkert??
Avatar billede kabbak Professor
10. oktober 2007 - 19:41 #15
Min fejl, jeg glemte at kalde startmakroen igen, se nederst i koden


Dim Tid As Date


Public Sub StartSortering()
    Tid = Now() + TimeSerial(0, 0, 20)
    Application.OnTime Tid, "Sorter", , True
End Sub

Public Sub StopSortering()
Application.OnTime Tid, "Sorter", , False
End Sub


Sub sorter()
'
' sorter Makro
'

'
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "B4:B8"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

StartSortering

End Sub
Avatar billede mainframe Nybegynder
10. oktober 2007 - 21:35 #16
super
smid et svar
tusinde tak for hjælpen
Avatar billede kabbak Professor
10. oktober 2007 - 21:47 #17
et svar ;-))
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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