Avatar billede alexander_j Nybegynder
30. april 2015 - 14:45 Der er 11 kommentarer og
1 løsning

Lave en liste over værdier der passer

Hvis jeg har et ark, hvor der i kolonne A er oplistet nogle navne og i kolonne B er markeret med et "x" ud for nogle af navnene.

Er det så mulig (og hvordan) at lave en liste (gerne adskilt af mellemrum eller komma) over alle navnene, hvor der er sat "x" ud for?
Avatar billede natkatten Mester
30. april 2015 - 14:59 #1
Det er bestemt muligt, men hvor og hvordan vil du have output?

Dette kan ganske simpelt laves med filtrering, men skal det ud på et andet ark eller udskrives på en printer? Og skal det forstås således, at du vil have de markerede værdier vist i en celle/en række således:

Anders, Birte, Carl, Dorte, Erik, Frederikke, Gert, Hanne osv.
Avatar billede jens48 Ekspert
30. april 2015 - 19:56 #2
Det kan måske lade sig gøre med denne makro. Jeg har sat en del kommentarer ind, så du let selv kan rette den.

Sub Navneliste()
LastRow = Range("A65536").End(xlUp).Row 'checker sidste linie
Dim Liste As String
Liste = ""
For x = 1 To LastRow ' startlinie 1
If Cells(x, 2) = "x" Or Cells(x, 2) = "X" Then ' tester for både stort og lille x
Liste = Liste & ", " & Cells(x, 1) 'tilfører navn hvis x
End If
Next
Liste = Right(Liste, Len(Liste) - 2) ' fjerner første komma
Range("E1") = Liste 'skriver listen i celle E1
End Sub
Avatar billede alexander_j Nybegynder
01. maj 2015 - 14:02 #3
Jeg vil gerne have vist værdierne i en celle.

Var bange for at jeg skulle til at lege med makroer.
Avatar billede natkatten Mester
01. maj 2015 - 15:09 #4
Du får med jens48's løsning vist værdierne i en celle. Hvis du ønsker at få en formelbaseret løsning (helt uden VBA), så bliver der nok tale om en matriksformel. Dette vil jeg ikke give mig i kast med, bl.a. fordi jeg ikke ved, hvor stort et område (antal rækker), der skal søges i.
jens48's udgave kan laves som en UDF (user defined function), som gør, at du kan skrive en formel i Excel, som du er vant til. MEN der er stadig tale om VBA/en makro.
Avatar billede jens48 Ekspert
02. maj 2015 - 00:48 #5
Det vil måske være en idé at bruge nedenstående makro, som automatisk skriver listen i celle E1, hvis der rettes i kolonne B. Jeg har rettet makroen lidt til med et par tips fra Natkatten. Kopier makroen og indsæt den ved at højrekikke på fanebladet og vælg Vis Koder. Hvis listen skal laves i en anden celle end E1 skal du blot skrive det i linien

SkrivICelle = "E1"

Her er makroen:


Option Compare Text ' så checkes der for både små og store bogstaver
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Dim LastRow, x As Long
Dim Liste, SkrivICelle As String
LastRow = ActiveSheet.Range("A1").Offset(ActiveSheet.Rows.Count - 1, 0).End(xlUp).Row 'checker sidste linie
SkrivICelle = "E1"
Liste = ""
For x = 1 To LastRow ' startlinie 1
If Cells(x, 2) = "x" Then  ' tester for både stort og lille x
Liste = Liste & ", " & Cells(x, 1) 'tilfører navn hvis x
End If
Next
Liste = Right(Liste, Len(Liste) - 2) ' fjerner første komma
Range(SkrivICelle) = Liste 'skriver listen i celle E1
Range(SkrivICelle).EntireColumn.AutoFit
End If
End Sub
Avatar billede jens48 Ekspert
02. maj 2015 - 00:54 #6
Alternativt kan du lave en hjælpekolonne. I C1 skrives:

=IF(B1="X";A1;"")

I C2 skrives nedenstående formel, som kan kopieres nedefter så langt som nødvendigt:

=IF(B2="X";CONCATENATE(IF(C1="";A2;C1&", "&A2));C1)

I den nederste celle vil du så have din liste

CONCATENATE er på dansk SAMMENKÆDNING
Avatar billede alexander_j Nybegynder
04. maj 2015 - 11:22 #7
Jeg overvejer stadig om jeg kan undgå makroer.

Hvis jeg nu laver en skjult kolonne med de udvalgte værdier. Så kan jeg naturligvis lave en kode ala:

=HVIS(A1<>"";A1&",";"")&HVIS(A2<>"";A2&",";"")...

Findes der en smartere måde at lægge tekstværdierne sammen i en lidt længere kolonne?
Avatar billede jens48 Ekspert
04. maj 2015 - 17:33 #8
Løsningen i #6 er faktisk uden makro. Har du prøvet den?
Avatar billede alexander_j Nybegynder
05. maj 2015 - 08:30 #9
Ja, men udfordringen er blot, at det bliver en voldsom lang kode, hvis man har en kolonne med fx 50-100 celler, da hver celle skal skrives manuelt ind.

SAMMENKÆDNING(HVIS(C1="";"";C1&", ");HVIS(C2="";"";C2&", ");HVIS(C3="";"";C3&", ");...)
Avatar billede alexander_j Nybegynder
05. maj 2015 - 11:54 #10
Men kom med et svar - det var trods alt en løsning.
Avatar billede jens48 Ekspert
06. maj 2015 - 03:21 #11
Jeg tror du misforstod, hvad jeg skrev. Du skal indsætte

=IF(B2="X";CONCATENATE(IF(C1="";A2;C1&", "&A2));C1)

i C2 og så kopiere C2 så langt ned som nødvendigt. Koden bliver ikke længere end den er i C2.

Husk også

=IF(B1="X";A1;"")

i C1
Avatar billede alexander_j Nybegynder
09. maj 2015 - 16:54 #12
Du havde ret, jeg misforstod hvad du skrev. Den løsning er helt perfekt, hvis man ikke vil bruge makroer.
Det er lidt som at lave en løkke, hvor der lægges lidt til strengen såfremt bestemte forudsætninger er indfriet.

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

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