Print side | Luk vindue

Betinget udtræk af tekst

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Generelt
Forum beskrivelse: Hjælp til generel daglig brug af programmet Excel
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=1418
Udskrevet den: 05.Mar.2025 kl. 20:20


Emne: Betinget udtræk af tekst
Besked fra: Skemalægger
Emne: Betinget udtræk af tekst
Posteringsdato: 27.Okt.2013 kl. 14:11
AndersBjarne.       Carl.     Dennis.                  Opg1.                    Opg2.                   Opg3.
Opg1.            Opg2.        Opg1. Opg3.                    Anders, carl.          Bjarne.                  Dennis


Jeg har medarbejdere stående i kolonner, hver række med dagens arbejdsopgave. Til højre opgavekolonner med liste over, hvem der har hvilke opgaver den dag. Vekslende 1 eller flere på hver opgave pr dag.

Jeg for hver opgavekolonne lavet en sammenkædning af HVIS(opg for medarbejder n=opg m;medarbejder n;", ") for hver medarbejder.
Det bliver et ret langt udtryk med 30 medarbejdere i 10 uger ....

Jeg kan tænke, det var nemt at lave i Basic med en for-next løkke, og måske også derfor i VBA, men findes der en smartere måde at gøre det med formler alene end min lange sammenkædning ?            

Ps ... Jeg kan ikke få tab til at virke, så spørgsmålet står lidt rodet ... Håber, meningen fremgår



Svar:
Besked fra: Skemalægger
Posteringsdato: 28.Okt.2013 kl. 21:44
For at præcisere:

Her er udtrykket for de første 13 personer. For første person gælder:
$L$2 er medarbejdernavnet (kolonneoverskrift), $L33=opgave for medarbejder i kolonne L på dag 31 , AB$2 er opgavenavn (kolonneoverskrift)


=SAMMENKÆDNING((HVIS($L33=AB$2;$L$2&"  ";));(HVIS($M33=AB$2;$M$2&"  ";));(HVIS($N33=AB$2;$N$2&"  ";));(HVIS($O33=AB$2;$O$2&"  ";));(HVIS($P33=AB$2;$P$2&"  ";));(HVIS($Q33=AB$2;$Q$2&"  ";));(HVIS($R33=AB$2;$R$2&"  ";));(HVIS($S33=AB$2;$S$2&"  ";));(HVIS($T33=AB$2;$T$2&"  ";));(HVIS($U33=AB$2;$U$2&"  ";));(HVIS($V33=AB$2;$V$2&"  ";));(HVIS($W33=AB$2;$W$2&"  ";));(HVIS($X33=AB$2;$X$2&"  ";)))




Allan.....Børge.....Carl......Dennis.        Opg1...........Opg2..........Opg3

Opg1      Opg2      Opg1      Opg3           Allan, Carl    Børge         Dennis
Opg2      Opg2      Opg3      Opg1           Dennis         Allan, Børge  Carl



Det må da kunne rationaliseres ?


Besked fra: excelent
Posteringsdato: 29.Okt.2013 kl. 20:33
uploads/248/Skema.xlsm" rel="nofollow - uploads/248/Skema.xlsm

-------------
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!


Besked fra: Skemalægger
Posteringsdato: 30.Okt.2013 kl. 22:08
Nydeligt - Og umiddelbart synes det noget mere elegant end min løsning - når vi nu skal bruge VBA Smile
Da mange af mine kolleger ikke "tillader" makroer, ville jeg gerne have en ren excel løsning, men jeg må lære dem at ændre sikkerhedsniveauet.

 (J(n) er job-kolonner)

Sub opgaver()
'
' opgaver Makro
' Makro indspillet 29-10-2013 af 
'


ThisWorkbook.Worksheets("jobst").Range("a1").Activate

    Dim x As Integer
    Dim y As Integer
    Dim j As Integer
    
    Dim sStr As String

    For j = 10 To 14
    For y = 2 To 7
    sStr = ""
    For x = 1 To 9
        If Cells(y, x) = Cells(1, j) Then
            sStr = sStr + Cells(1, x) + ", "
        End If
    Next x
    Cells(y, j) = sStr
    Next y
    Next j
End Sub

Når jeg nu gerne vil have det til at køre automatisk, så det opdaterer, hver gang jeg ændrer på grunddata, er det så sådan her:


Sub auto_open()
    Worksheets("jobst").OnEntry = "opgaver"
End Sub



Besked fra: excelent
Posteringsdato: 02.Nov.2013 kl. 08:51
Ved ikke om vi kom i mål her ?

-------------
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!


Besked fra: Skemalægger
Posteringsdato: 16.Nov.2013 kl. 19:48
Undskyld den lange svartid. Sidder nu og prøver at gennemgå din kode og er nødt til at spørge banalt:

Som jeg ser det, har du lavet en brugerdefineret funktion, der inkluderer en parameteroverførsel (rng og opg). Jeg kan finde den under VBA men ikke som en makro. Vil det sige, det reelt er en ny Excel kommando - som kun gælder i den her workbook ? Kan den gøres generel, så jeg kan genbruge den i andre ?
Det synes jo en del smartere end min løsning med en makro, der bliver aktiveret - og gennemkørt i hele arket, hver gang noget indtastes. Det her må være en del hurtigere.
Hvis jeg sender arket til andre, skal de så have makroer aktiveret for at det kan virke ?

Du skrev:

Function xTest(rng As Range, opg As Range)
  For Each c In rng
     If c = opg Then navne = navne & Cells(1, c.Column) & " /"
  Next
  If navne <> "" Then xTest = Left(navne, Len(navne) - 1) Else xTest = ""
End Function

Jeg forstår ikke helt den her linie

 If c = opg Then navne = navne & Cells(1, c.Column) & " /"

"navne" er ikke defineret - kan man blot indføre den ?
 og i funktionen Cells:

c.Column ?

- Men det virker fint :0)


Besked fra: Skemalægger
Posteringsdato: 16.Nov.2013 kl. 21:48
Citat: Skemalægger Skemalægger skrev:



- Men det virker fint :0)

Og dog ....  kan jeg ikke forstå, at navnene sommetider forsvinder, og der står kun skråstreger tilbage ! 
Så må jeg op og genindtaste formlen for at få navnene frem igen. Det hjælper ikke at trykke "opdater alle" eller "beregn"...

Forslag ?


Besked fra: Skemalægger
Posteringsdato: 17.Nov.2013 kl. 12:52
Det her synes at fungere i mit ark - forstår dog stadig ikke "c.Column", men vil gerne tilføje en funktion med betinget formattering afhængigt af antal medarbejdere til opgaven i forhold til behov. 
Kolonnerne med antal medarbejder på opgaven hhv behov kan stå enten inde i oversigten over medarbejdere eller i et dataområde for sig
Der er 4 muligheder: 
Behov-antal: 0       Blank baggrund
Behov-antal: > 0    Grøn
Behov-antal <0      Rød
Behov = 0              Grå





I kolonnen  


Function job(rng As Range, opg As Range)
For Each c In rng
If UCase(c) = UCase(opg) Then navne = navne & Cells(5, c.Column) & ", "


Next
If navne <> "" Then job = Left(navne, Len(navne) - 1) Else job = ""
End Function



Print side | Luk vindue