Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 20:41 Der er 28 kommentarer og
1 løsning

Liste med mulige værdier

Jeg skal have en liste med valgmuligheder i en given celle. Jeg kan bruge datavalidering, men her kan jeg kun angive en kolonne. Jeg har nr. i en kolonne og teksten ved siden af:
A1;A2
1;Tekst1
2;Tekst2
3;Tekst3 osv...

Man skal enetn få vist begge dele alternativt teksten, men det er nummeret der skal gemmes i cellen??
23. oktober 2002 - 20:51 #1
Hvad med at lave det ved hjælp af LOPSLAG()
På et ark opretter du din tabel med mulige værdier:
1;Tekst1
2;Tekst2
3;Tekst3 osv... ( I eksemplet herunder er disse værdier indtastet på Ark2 i område A1:B100

På Ark1 indtaster du værdien i celle A1.
I celle B1 indtaster du formlen =LOPSLAG(A1;Ark2!A1:B100;2)
Denne formel vil så gå over på Ark2 og hente den tilhørende tekst.

LOPSLAG(Opslagsværdi;Tabelområde;Kolonne i tabellen)

På et andet ark henter du så disse data:
23. oktober 2002 - 20:53 #2
Den sidste linie skulle have stået efter de første 5 linier
Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 20:58 #3
Man skal kunne vælge de mulige værdier på en dropdownliste på cellen (ved at trykke F4). Lige som ved datavalidering...
Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 21:04 #4
Ja ok F4 virker ikke, men der er en lille pil til højre i cellen du ved...
23. oktober 2002 - 21:11 #5
Ikke med datavalidering - du skal bruge en liste eller combobox.
Avatar billede kabbak Professor
23. oktober 2002 - 21:16 #6
Du kan også lægge de 2 kolonner sammen i en 3 kolonne med denne formel
  =A1&B1
så kan du bruge datavalidering på den 3 kolonne
Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 21:22 #7
En combobox eller liste ligger jo nærmest oven på cellen, det skulle gerne være integreret præcis som i datavalidering. Men hvis fx. det er varenumre, vil man jo gerne se navnet på varen, men gemme nummret i cellen. Derfor nytter det vel ikke at lægge værdien i en tredie kolonne så vil man jo gemme værdien "1 tekst1" i cellen eller hva?...
23. oktober 2002 - 21:25 #8
For lige at skære det ud i pap, er det du ønsker:
At selve cellen forsynes med små pile, så du ved hjælp af disse kan udpege nr med tilhørende tekst, hvorefter værdi gemmes i cellen.
Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 21:27 #9
Ja dog kun én pil. Prøv at lave datavalidering på en celle og se hvordan det ser ud. Problemet med datavalidering er blot at man kun kan angive én kolonne.
Avatar billede kabbak Professor
23. oktober 2002 - 21:36 #10
Ok jeg kan se problemet.
hvis dine varenumre er af samme længde kan det godt gøres på min måde,
lidt klodset måske.
=A1&B1="1 tekst1"
hvis du laver datavalidering en kolonne længere til højre,
kan du i kolonnen for sige = højre(d1;1) så får du kun tallet-.
men hvis varenummeret er af forskellig længde er det ikke godt.
Avatar billede kabbak Professor
23. oktober 2002 - 21:37 #11
for = før
23. oktober 2002 - 21:40 #12
Jeg tror ikke det kan laves direkte i cellen, der er vist ingen vej uden om lidt VBA-programmering. Men så kommer det jo ikke helt til at virke, som du nævner.
Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 21:51 #13
VBA er ok, men jeg ved ikke hvordan jeg får listen koblet på cellen via VBA...
Avatar billede kabbak Professor
23. oktober 2002 - 22:04 #14
Hvis du kan finde ud af at lave en combo så er koden til celleværden her.

Private Sub ComboBox1_Click()
ActiveCell.Value = ComboBox1.Value
End Sub

Du kal bare have klikket ind på den celle du vil have opdateret først.
23. oktober 2002 - 22:11 #15
Jeg ville lave det noget lignende dette her:
23. oktober 2002 - 22:11 #16
Private Sub ComboBox1_Change()
    Range("D5").Value = ComboBox1.List(ComboBox1.ListIndex)
End Sub

Private Sub ComboBox1_GotFocus()
    Dim rCell As Range
    Dim asCells() As String
    Dim lCount As Long
    lCount = Range("A1").CurrentRegion.Rows.Count - 1
    ReDim asCells(lCount, 1)
    lCount = 0
    With ComboBox1
        .Clear
        .ColumnCount = 2
        .ColumnWidths = "20,30"
        For Each rCell In Range("A1").CurrentRegion.Columns(1).Cells
            asCells(lCount, 0) = rCell.Value
            asCells(lCount, 1) = rCell.Offset(0, 1).Value
            lCount = lCount + 1
        Next rCell
        .List = asCells
    End With
    Set rCell = Nothing
End Sub
23. oktober 2002 - 22:12 #17
jeg sender gerne en eks. fil fd@win-consult.com
Avatar billede kabbak Professor
23. oktober 2002 - 22:14 #18
Kontrolelemet combo skal have følgende værdier i egenskaber.
Boundcolumn 1
Columcount 2
Listfillrange a1:b4 ( kun et eksempel)
Textcolumn 2

resten kan godt være standard.
23. oktober 2002 - 22:25 #19
Ja, sådan kan den os laves :-)
Det kan være en god ide at ændre på ColumnWidth f.eks. til  20 pt;30 pt

Jeg bruger GotFocus hændelsen til at fylde Comboboxen, således området med "varenumre" kan vokse uden at jeg skal ændre i LIstFillRange.
Jeg har lige lavet endnu en lille feature - således der ikke medtages kolonneoverskrifter. Den kan gøres kortere med ListFillRange end jeg havde lavet først.

Private Sub ComboBox1_GotFocus()
    Dim rRegion As Range
    Dim lCount As Long

    Set rRegion = Range("A1").CurrentRegion
    ' This line is only used if the region has headings
    Set rRegion = rRegion.Offset(1, 0).Resize(rRegion.Rows.Count - 1)

    With ComboBox1
        .Clear
        .ColumnCount = 2
        .ColumnWidths = "20,30"
        .ListFillRange = rRegion.Address
    End With
End Sub
Avatar billede kabbak Professor
23. oktober 2002 - 22:31 #20
Flemmingdahl > hvor gemmer du i cellen ???
23. oktober 2002 - 22:32 #21
Jeg gemmer cellen således - samt har jeg opdaget en lille fejlmulighed - så :

Private Sub ComboBox1_Change()
    Range("D5").Value = ComboBox1.Value
End Sub

Private Sub ComboBox1_GotFocus()
    Dim rRegion As Range
    Dim lCount As Long

    Set rRegion = Range("A1").CurrentRegion
    ' This line is only used if the region has headings
    Set rRegion = rRegion.Offset(1, 0).Resize(rRegion.Rows.Count - 1)

    With ComboBox1
        On Error Resume Next
        .Clear
        On Error GoTo 0
        .ColumnCount = 2
        .ColumnWidths = "20,30"
        .ListFillRange = rRegion.Address
    End With
End Sub
23. oktober 2002 - 22:34 #22
.Clear kan give fejl i forskellige situationer, hvorfor denne lille error ting. ComboBox1_GotFocus kan dog sættes op på egenskaber, men det gør combobox'en statisk frem for dynamisk - hver ting til sin tid.
Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 22:41 #23
Ok jeg kan se i eksemplet hvad du mener, men listen er jo ikke helt sat på en celle.
23. oktober 2002 - 22:44 #24
Du kan da bare flytte combobox'en og ændre på størrelsen.
23. oktober 2002 - 22:47 #25
Skulle den nu blive så lille, at du ikke kan se skriften, så gå i egenskaber for comboboxen og ændre på skrifttypen og -størrelsen.
Avatar billede vision-jsp Nybegynder
23. oktober 2002 - 22:48 #26
Ja ok men jeg er lidt sart :-). Det er som om boksen ligger oven på cellen.
23. oktober 2002 - 22:51 #27
Ja, den ligger ligsom oven på cellen - men sådan virker den.
23. oktober 2002 - 22:53 #28
Du har helt ret, den ligger ovenpå cellen. Du kan forsøge at tilpasse størrelsen, så den passer med størrelsen på cellen - men den vil altid ligge ovenpå.
Som tidligere sagt, det kan ikke laves i en celle.
23. oktober 2002 - 22:55 #29
Hvis du gerne vil have returneret teksten fra kolonne "2" istedet for varenummeret, så kan det gøres således :
Private Sub ComboBox1_Change()
    With ComboBox1
        If Not (.ListIndex = 0) Then
            On Error Resume Next
            Range("D5").Value = .List(.ListIndex, 1)
        End If
    End With
End Sub
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