/ Forside / Teknologi / Administrative / MS-Office / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
MS-Office
#NavnPoint
sion 18709
refi 14474
Klaudi 9389
Rosco40 5695
berpox 5456
dk 5398
webnoob 4919
Benjamin... 4870
o.v.n. 4637
10  EXTERMINA.. 4373
Excel - datavalidering
Fra : Jesper Davidsen


Dato : 03-06-04 13:41

Hej

Jeg har brug for at brugerne af et Excel ark kan foretage et valg fra en
dropdown liste i to kolonner. I første kolonne har jeg lavet en alm
datavalidering som henviser til en række celler. I anden kolonne skal
valgmulighederne være afhængige af valget i første kolonne. Dette har jeg
foreløbeligt løst med en HVIS funktion for hver valgmulighed

Jeg er dog ikke særlig tilfreds med denne løsning da antallet af
valgmuligheder i første kolonne gør at funktionen i anden kolonne bliver
urimeligt lang.

Kender nogen en smartere metode?

Jesper



 
 
Leo Heuser (04-06-2004)
Kommentar
Fra : Leo Heuser


Dato : 04-06-04 09:00

Hej Jesper

Her er én (to) måde(r), du kan gøre det på:

Jeg er gået ud fra, at de to dropdown menuer findes i A2 og B2,
og at den i A2 foreløbig har 4 valgmuligheder.

1. Opret dataområdet for dropdown A2 i fx S2:S10
Kom nogle valgmuligheder i S2:S5.
2. Markér S2:S10 og navngiv området "StartListe" (uden gåseøjne)
Brug navneboksen helt til venstre for formellinjen.
3. Opret dataområdet for dropdown B2 i fx X2:AA12, således
at X2:X12 indeholder menuen, der skal vises, hvis første
menupunkt i A2 vælges, Y2:Y12 indeholder menuen for
andet punkt i A2 osv.
4. Markér X2:AA12 og navngiv området "MenuBlok"
5. Indtast testværdier i X2:AA2, X3:AA3, Y4:AA4, Y5 og AA5:AA6
6. Markér A2 og vælg Data > Datavalidering. Vælg "Liste" i "Tillad": og
indtast i "Kilde:"

=FORSKYDNING(StartListe;0;0;TÆLV(StartListe);1)

7. Markér B2 og vælg Data > Datavalidering. Vælg igen "Liste" og indtast:

=FORSKYDNING(MenuBlok;0;SAMMENLIGN(A2;StartListe;0)-1;
TÆLV(FORSKYDNING(MenuBlok;0;SAMMENLIGN(A2;StartListe;0)-1;;1));1)

Formlen skal indtastes som én linje.

Der må godt være tomme celler i *slutningen* af listerne i punkt 1 og 3,
men ikke imellem data.

En ulempe er, at hvis der *er* tomme celler i slutningen af en liste,
kan brugeren indtaste "hvad som helst". Hvis du vil undgå dette, kan du
i stedet for bruge følgende:

Ingen af de navngivne områder må indeholde tomme celler.

A. Markér S2:S5 og navngiv det "MenuListe"
B. Markér X2:X3 og navngiv det "MenuBlok1"
C. Markér Y2:Y5 og navngiv det "MenuBlok2"
D. Markér Z2:Z4 og navngiv det "MenuBlok3"
E. Markér AA2:AA6 og navngiv det "MenuBlok4"

I punkt 6 indtastes i stedet:

=MenuListe

og i punkt 7 indtastes i stedet:

=INDIREKTE("MenuBlok"&SAMMENLIGN(A2;MenuListe;0))


Så skulle opsætningen være klar til brug

Du kan evt. bruge Excels Change-event til at rydde B2,
når der er valgt en værdi for A2.
Kom tilbage for yderligere hjælp til dette, hvis der er nødvendigt.


--
Med venlig hilsen
Leo Heuser

Followup to newsgroup only please.

"Jesper Davidsen" <jda@greenfarmenergy.dk> skrev i en meddelelse
news:40bf1c66$0$295$edfadb0f@dread12.news.tele.dk...
> Hej
>
> Jeg har brug for at brugerne af et Excel ark kan foretage et valg fra en
> dropdown liste i to kolonner. I første kolonne har jeg lavet en alm
> datavalidering som henviser til en række celler. I anden kolonne skal
> valgmulighederne være afhængige af valget i første kolonne. Dette har jeg
> foreløbeligt løst med en HVIS funktion for hver valgmulighed
>
> Jeg er dog ikke særlig tilfreds med denne løsning da antallet af
> valgmuligheder i første kolonne gør at funktionen i anden kolonne bliver
> urimeligt lang.
>
> Kender nogen en smartere metode?
>
> Jesper
>
>









Jesper Davidsen (04-06-2004)
Kommentar
Fra : Jesper Davidsen


Dato : 04-06-04 12:24

Tag for det fine svar. Jeg har lige et par spørgsmål mere:

> 1. Opret dataområdet for dropdown A2 i fx S2:S10
> Kom nogle valgmuligheder i S2:S5.
> 2. Markér S2:S10 og navngiv området "StartListe" (uden gåseøjne)
> Brug navneboksen helt til venstre for formellinjen.

Hvis jeg har fået givet et område et forkert navn, hvordan sletter jeg det
så igen?

>
> Du kan evt. bruge Excels Change-event til at rydde B2,
> når der er valgt en værdi for A2.

Hvor finder jeg "Excels Change-event" og hvordan gør jeg helt præcist?


/Jesper



Leo Heuser (04-06-2004)
Kommentar
Fra : Leo Heuser


Dato : 04-06-04 12:56

"Jesper Davidsen" <jda@greenfarmenergy.dk> skrev i en meddelelse
news:40c05bc3$0$189$edfadb0f@dread12.news.tele.dk...
> Tag for det fine svar.

Velbekomme og tak for tilbagemeldingen

Jeg har lige et par spørgsmål mere:
>
> > 1. Opret dataområdet for dropdown A2 i fx S2:S10
> > Kom nogle valgmuligheder i S2:S5.
> > 2. Markér S2:S10 og navngiv området "StartListe" (uden gåseøjne)
> > Brug navneboksen helt til venstre for formellinjen.
>
> Hvis jeg har fået givet et område et forkert navn, hvordan sletter jeg det
> så igen?

Du bruger menupunktet Indsæt > Navn > Definer, hvor du også kan
oprette navne.

>
> >
> > Du kan evt. bruge Excels Change-event til at rydde B2,
> > når der er valgt en værdi for A2.
>
> Hvor finder jeg "Excels Change-event" og hvordan gør jeg helt præcist?

I det aktuelle ark højreklikker du på arkfanen og vælger
"Vis programkode"
Kopiér nedenstående kode og indsæt den i højre vindue og
gem projektmappen.
Koden afvikles, hver gang du afslutter indtastningen i en celle
i det aktuelle ark.
Den undersøger så, om den aktuelle celle er A2. Hvis dette er
tilfældet, ryddes B2, hvis ikke sker der ingenting.



Private Sub Worksheet_Change(ByVal Target As Range)
'Leo Heuser, 4-6-2004
Dim CheckRange As Range
Dim ClearRange As Range

On Error Resume Next

Set CheckRange = Range("A2")
Set ClearRange = Range("B2")

If Application.Union(CheckRange, Target).Address = _
Union(CheckRange, CheckRange).Address Then
ClearRange.ClearContents
End If

On Error Goto 0

End Sub



--
Med venlig hilsen
LeoH




Jesper Davidsen (04-06-2004)
Kommentar
Fra : Jesper Davidsen


Dato : 04-06-04 12:58

>
> Du kan evt. bruge Excels Change-event til at rydde B2,
> når der er valgt en værdi for A2.
> Kom tilbage for yderligere hjælp til dette, hvis der er nødvendigt.
>

Findes der en måde hvorpå valget i B2 kan blive opdateret når dataområdet
for B2 bliver ændret?



Leo Heuser (04-06-2004)
Kommentar
Fra : Leo Heuser


Dato : 04-06-04 13:04

"Jesper Davidsen" <jda@greenfarmenergy.dk> skrev i en meddelelse
news:40c063b0$0$230$edfadb0f@dread12.news.tele.dk...
> >
> > Du kan evt. bruge Excels Change-event til at rydde B2,
> > når der er valgt en værdi for A2.
> > Kom tilbage for yderligere hjælp til dette, hvis der er nødvendigt.
> >
>
> Findes der en måde hvorpå valget i B2 kan blive opdateret når dataområdet
> for B2 bliver ændret?
>
Jeg er ikke med på, hvad du mener.
Indtastning af nye data i dataområdet, slår igennem med det samme.
Kan du ikke uddybe?

LeoH




Jesper Davidsen (04-06-2004)
Kommentar
Fra : Jesper Davidsen


Dato : 04-06-04 13:20


"Leo Heuser" <leo.heuser@adslhome.dk> skrev i en meddelelse
news:2ib6psFlc2j7U1@uni-berlin.de...
> "Jesper Davidsen" <jda@greenfarmenergy.dk> skrev i en meddelelse
> news:40c063b0$0$230$edfadb0f@dread12.news.tele.dk...
> > >
> > > Du kan evt. bruge Excels Change-event til at rydde B2,
> > > når der er valgt en værdi for A2.
> > > Kom tilbage for yderligere hjælp til dette, hvis der er nødvendigt.
> > >
> >
> > Findes der en måde hvorpå valget i B2 kan blive opdateret når
dataområdet
> > for B2 bliver ændret?
> >
> Jeg er ikke med på, hvad du mener.
> Indtastning af nye data i dataområdet, slår igennem med det samme.
> Kan du ikke uddybe?
>

Først skal jeg nok nævne at jeg bruger den anden metode du beskriver i dit
første indlæg.

Når jeg foretager valg i Cellerne A2 og B2 ændre indholdet ikke hvis jeg
ændre i dataområdet (S2:S5 & X2:AA12). Først når jeg foretager valget i de
to celler igen, ændre indholdet i henhold til dataområdet. Det jeg ønsker er
at ændringer i dataområdet slår igennem øjeblikkeligt.

Jesper



Leo Heuser (05-06-2004)
Kommentar
Fra : Leo Heuser


Dato : 05-06-04 12:41

"Jesper Davidsen" <jda@greenfarmenergy.dk> skrev i en meddelelse
news:40c068da$0$198$edfadb0f@dread12.news.tele.dk...
>
> "Leo Heuser" <leo.heuser@adslhome.dk> skrev i en meddelelse
> news:2ib6psFlc2j7U1@uni-berlin.de...
> > "Jesper Davidsen" <jda@greenfarmenergy.dk> skrev i en meddelelse
> > news:40c063b0$0$230$edfadb0f@dread12.news.tele.dk...
> > > >
> > > > Du kan evt. bruge Excels Change-event til at rydde B2,
> > > > når der er valgt en værdi for A2.
> > > > Kom tilbage for yderligere hjælp til dette, hvis der er nødvendigt.
> > > >
> > >
> > > Findes der en måde hvorpå valget i B2 kan blive opdateret når
> dataområdet
> > > for B2 bliver ændret?
> > >
> > Jeg er ikke med på, hvad du mener.
> > Indtastning af nye data i dataområdet, slår igennem med det samme.
> > Kan du ikke uddybe?
> >
>
> Først skal jeg nok nævne at jeg bruger den anden metode du beskriver i dit
> første indlæg.
>
> Når jeg foretager valg i Cellerne A2 og B2 ændre indholdet ikke hvis jeg
> ændre i dataområdet (S2:S5 & X2:AA12). Først når jeg foretager valget i de
> to celler igen, ændre indholdet i henhold til dataområdet. Det jeg ønsker
er
> at ændringer i dataområdet slår igennem øjeblikkeligt.
>
Brug denne kode i stedet for den tidligere:

Private Sub Worksheet_Change(ByVal Target As Range)
'Leo Heuser, 5-6-2004
Dim CheckRange As Range
Dim ClearRange As Range
Dim MenuBlokNumber As Long
Dim MenuRange As Range

On Error GoTo Finito

Set CheckRange = Range("A2")
Set ClearRange = Range("B2")
Set MenuRange = _
Application.Union(Range("MenuListe"), Range("MenuBlok1"), _
Range("MenuBlok2"), Range("MenuBlok3"), Range("MenuBlok4"))

With Application
.EnableEvents = False
If .Union(CheckRange, Target).Address = CheckRange.Address Then
ClearRange.ClearContents
Else
If Not .Intersect(Target, MenuRange) Is Nothing Then
If Not .Intersect(Target, Range("MenuListe")) _
Is Nothing Then
If .WorksheetFunction _
.CountIf(Range("MenuListe"), _
CheckRange.Value) = 0 Then
CheckRange.Value = Target.Value
End If
Else
MenuBlokNumber = .WorksheetFunction _
.Match(CheckRange.Value, Range("MenuListe"), 0)
If Not .Intersect(Target, Range("MenuBlok" & _
MenuBlokNumber)) Is Nothing Then
If .WorksheetFunction _
.CountIf(Range("MenuBlok" & MenuBlokNumber), _
ClearRange.Value) = 0 Then
ClearRange.Value = Target.Value
End If
End If
End If
End If
End If
End With
Finito:
Application.EnableEvents = True
End Sub


Min nysgerrighed byder mig at spørge, hvorfor du skal udskifte
menutekster i ét væk.
Jeg går ud fra, at det er det, der sker. Hvis det kun var en gang imellem,
er det jo ikke noget arbejde at klikke i A2 eller B2 og foretage rettelsen
manuelt. Eller er det noget helt andet, det drejer sig om?

LeoH







Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste