Avatar billede tvc Seniormester
23. maj 2011 - 09:55 Der er 14 kommentarer og
1 løsning

Hent cellefarve fra en celle og anvend denne i en anden (på baggrund af betingelser)

Hej

Jeg sidder med et ark hvor jeg gerne vil kunne "overstrege" linjer (rækker), der indeholder en bestemt værdi/grupperingstekst.

Beskrivelse af ark:

I området H1:H5 er indsat "grupperingstekst" Aa, Bb, Cc, Dd og Ee. Hver af de fem celler er farvet med en individuel farve (baggrundsfarve).

Fra række 10 og ned er der indsat en mængde date, som jeg ønsker at gruppere. Til brug for grupperingen har jeg indsat enten Aa, Bb, Cc, Dd elle Ee i kolonne H.


Funktionen skal:

Skal knytte farven i celle H1, H2, H3, H4 og H5 til "grupperingsteksten" Aa, Bb, Cc, Dd og Ee.

Når jeg i kolonne H (område H10:H1000) skriver Aa, Bb, Cc, Dd eller Ee, skal funktionen finde den tilhørende farve og farve den pågældende række i den farve som hører til grupperingsværdien. Hvis grupperingsværdien slettes skal farven i rækken fjernes og kolonne H i rækken skal farves lysgul (Color = 10092543).

Håber der er en der kan hjælpe med denne lille farvelade ;-)
Avatar billede Ialocin Novice
23. maj 2011 - 12:44 #1
Hej tvc

Prøv eventuel om nedenstående kode fungerer efter hensigten ?
Kopier den ind i det aktuelle worksheets Change hændelse.


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


Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As String
Dim r As String
Dim v As String

c = Target.Column
r = Target.Row
v = Target.Cells.Value


If c = 8 And r >= 10 Then

   
    Select Case v
   
        Case "Aa"
       
            Target.Interior.Color = Range("H1").Interior.Color
       
       
        Case "Bb"
       
           
            Target.Interior.Color = Range("H2").Interior.Color
       
       
        Case "Cc"
       
           
            Target.Interior.Color = Range("H3").Interior.Color
       
       
        Case "Dd"
       
           
            Target.Interior.Color = Range("H4").Interior.Color
       
       
        Case "Ee"
           
               
            Target.Interior.Color = Range("H5").Interior.Color
       
       
        Case ""
       
            Target.Interior.Color = 10092543
           
        Case Else
       
            MsgBox "Værdien i cellen er ikke korrekt", vbInformation
           
            Target.Interior.Color = RGB(255, 255, 255)
       
    End Select
 
 
 
End If


End Sub



----------

OBS:
Koden virker i hele kolonne H fra og med H10
Koden farver/fjerner cellens border ... men det ta´r vi lige i anden omgang, når du har set om det virker.

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
23. maj 2011 - 12:46 #2
Hej tvc

Argh ...... var lige en kende for hurtig på tasterne ... Du skriver jo, at det skal være hele rækken!

Den fikser jeg straks :o)


Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
23. maj 2011 - 12:56 #3
Hej tvc


Så prøver vi lige igen :o)



----------


Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As String
Dim r As String
Dim v As String


'aktuel kolonne nummer
c = Target.Column

'aktuel række nummer
r = Target.Row

'Aktuel celle værdi
v = Target.Cells.Value


'Hvis kolonne H er den aktuelle kolonne
'og hvis det aktuelle rækkenummer er 10 eller større
If c = 8 And r >= 10 Then

   
    'Vælg aktuel celle værdi
    Select Case v
   
        'Celle værdi "Aa"
        Case "Aa"
       
           
            'Tildel hele den aktuelle række med fraven fra celle H1
            Target.Rows.EntireRow.Interior.Color = Range("H1").Interior.Color
       
       
        'Celle værdi "Bb"
        Case "Bb"
       
           
            'Tildel hele den aktuelle række med farven fra celle H2
            Target.Rows.EntireRow.Interior.Color = Range("H2").Interior.Color
           
       
        'Celle værdi "Cc"
        Case "Cc"
       
           
          'Tildel hele den aktuelle række med farven fra celle H3
          Target.Rows.EntireRow.Interior.Color = Range("H3").Interior.Color
       
       
        'Celle værdi "Dd"
        Case "Dd"
       
       
          'Tildel hele den aktuelle række med farven fra celle H4
          Target.Rows.EntireRow.Interior.Color = Range("H4").Interior.Color
       
       
        'Celle værdi "Ee"
        Case "Ee"
           
            'Tildel hele den aktuelle række med farven fra celle H5
            Target.Rows.EntireRow.Interior.Color = Range("H5").Interior.Color
       
       
        'Celle værdien er tom
        Case ""
       
           
            'Tildel hele den aktuelle række med farven lysegul
            Target.Rows.EntireRow.Interior.Color = 10092543
           
       
        'Celle værdien er alt andet
        Case Else
       
            'meddelelse ?
            MsgBox "Værdien i cellen er ikke korrekt", vbInformation
           
            'farv celle hvid
            Target.Interior.Color = RGB(255, 255, 255)
       
    End Select
 
 
 
End If


End Sub



----------


Med venlig hilsen, Nicolai
Avatar billede tvc Seniormester
23. maj 2011 - 13:13 #4
Hej Nicolai

Det er næsten på plads med din løsning.

Udfordringen er dog ligeledes at grupperingsværdierne i celle H1 til H5 (kan også tænkes at gå til H15) ikke er faste, da jeg skal bruge denne til mere sigende tekster end Aa, Bb, Cc, Dd, Ee - kunne også være Lone, Hans, Peter, Else m.v. Dette afhænger af de data jeg skal gruppere.
Kan din løsning til passes så den sammenholder værdien i cellerne H1:H15 (eller blot H5 så tilpasser jeg selv) med værdien i den aktuelle celle i kolonne H, tager farven fra cellen i området H1:H15 og farver hele rækken?

Nulstillingfunktionen (tilbage til lysgul) kan den sættes til kun at gælde H og ikke hele rækken?
Avatar billede tvc Seniormester
23. maj 2011 - 13:22 #5
Hej Nicolai

Jeg har rettet den lidt til så den nu kan det meste af ovenstående, men kan man få den til at opdatere alle rækker hvis en farve ønskes udskiftet i H1:H15 (i nedenstående kun til H5)?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As String
Dim r As String
Dim v As String


'aktuel kolonne nummer
c = Target.Column

'aktuel række nummer
r = Target.Row

'Aktuel celle værdi
v = Target.Cells.Value


'Hvis kolonne H er den aktuelle kolonne
'og hvis det aktuelle rækkenummer er 10 eller større
If c = 8 And r >= 10 Then

   
    'Vælg aktuel celle værdi
    Select Case v
   
        'Celle værdi "Aa"
        Case Range("H1").Value
             
           
            'Tildel hele den aktuelle række med fraven fra celle H1
            Target.Rows.EntireRow.Interior.Color = Range("H1").Interior.Color
       
       
        'Celle værdi "Bb"
        Case Range("H2").Value
       
           
            'Tildel hele den aktuelle række med farven fra celle H2
            Target.Rows.EntireRow.Interior.Color = Range("H2").Interior.Color
           
       
        'Celle værdi "Cc"
        Case Range("H3").Value
       
           
          'Tildel hele den aktuelle række med farven fra celle H3
          Target.Rows.EntireRow.Interior.Color = Range("H3").Interior.Color
       
       
        'Celle værdi "Dd"
        Case Range("H4").Value
       
       
          'Tildel hele den aktuelle række med farven fra celle H4
          Target.Rows.EntireRow.Interior.Color = Range("H4").Interior.Color
       
       
        'Celle værdi "Ee"
        Case Range("H5").Value
           
            'Tildel hele den aktuelle række med farven fra celle H5
            Target.Rows.EntireRow.Interior.Color = Range("H5").Interior.Color
       
       
        'Celle værdien er tom
        Case ""
       
           
            'Tildel hele den aktuelle række med farven lysegul
            Target.Cells.Interior.Color = 10092543
                       
       
        'Celle værdien er alt andet
        Case Else
       
            'meddelelse ?
            MsgBox "Værdien i cellen er ikke korrekt", vbInformation
           
            'farv celle hvid
            Target.Interior.Color = RGB(255, 255, 255)
       
    End Select
 
 
 
End If


End Sub
Avatar billede tvc Seniormester
23. maj 2011 - 13:29 #6
Rettet lidt mere - så den retter target linjen til ved sletning af værdi:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As String
Dim r As String
Dim v As String


'aktuel kolonne nummer
c = Target.Column

'aktuel række nummer
r = Target.Row

'Aktuel celle værdi
v = Target.Cells.Value


'Hvis kolonne H er den aktuelle kolonne
'og hvis det aktuelle rækkenummer er 10 eller større
If c = 8 And r >= 10 Then

   
    'Vælg aktuel celle værdi
    Select Case v
   
        'Celle værdi "Aa"
        Case Range("H1").Value
             
           
            'Tildel hele den aktuelle række med fraven fra celle H1
            Target.Rows.EntireRow.Interior.Color = Range("H1").Interior.Color
       
       
        'Celle værdi "Bb"
        Case Range("H2").Value
       
           
            'Tildel hele den aktuelle række med farven fra celle H2
            Target.Rows.EntireRow.Interior.Color = Range("H2").Interior.Color
           
       
        'Celle værdi "Cc"
        Case Range("H3").Value
       
           
          'Tildel hele den aktuelle række med farven fra celle H3
          Target.Rows.EntireRow.Interior.Color = Range("H3").Interior.Color
       
       
        'Celle værdi "Dd"
        Case Range("H4").Value
       
       
          'Tildel hele den aktuelle række med farven fra celle H4
          Target.Rows.EntireRow.Interior.Color = Range("H4").Interior.Color
       
       
        'Celle værdi "Ee"
        Case Range("H5").Value
           
            'Tildel hele den aktuelle række med farven fra celle H5
            Target.Rows.EntireRow.Interior.Color = Range("H5").Interior.Color
       
       
        'Celle værdien er tom
        Case ""
       
           
            'Tildel hele den aktuelle række med farven lysegul
            Target.Rows.EntireRow.Interior.Color = xlNone
            Target.Cells.Interior.Color = 10092543
                       
       
        'Celle værdien er alt andet
        Case Else
       
            'meddelelse ?
            MsgBox "Værdien i cellen er ikke en gyldig grupperingsværdi", vbInformation
           
            'farv celle hvid
            Target.Select
            Target.Value = ""
            Target.Interior.Color = xlNone
       
    End Select
 
 
 
End If


End Sub
Avatar billede Ialocin Novice
23. maj 2011 - 13:44 #7
Hej tvc

Er tilbage igen ...

Hvad mangler du efter din sidste opdatering ?

Med venlig hilsen, Nicolai
Avatar billede tvc Seniormester
23. maj 2011 - 14:57 #8
Mangler kun at farverne kan opdateres uden at skulle ind i hver celle og trykke F2. En opdateringsfunktion så de farvede rækker følger en evt. ændring af farve i H1:H15.

Jeg kan ikke selv se hvordan man undgår at lave 15 linjer med:

Case Range("H1").Value
Target.Rows.EntireRow.Interior.Color = Range("H1").Interior.Color

så det bliver ved denne løsning ;-)

Hvis du har en ide til opdateringen hører jeg meget gerne denne.

Hilsen

TVC
Avatar billede tvc Seniormester
23. maj 2011 - 14:59 #9
Har i øvrigt lige lagt endnu et spørgsmål, hvor denne funktion er det der skal lægges ind via en makro i en anden fil:

http://www.eksperten.dk/spm/939461
Avatar billede Ialocin Novice
23. maj 2011 - 15:11 #10
Hej tvc

Jamen så fik vi den jo løst ;o)

Umiddelbart vil jeg også sige, at der skal være 15 case linier i dit tilfælde.

Med hensyn til den fælles opdatering ?, så kigger jeg på den i aften.


Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
24. maj 2011 - 00:41 #11
Hej tvcs
Hvis du kan bruge en knap på det pågældende worksheet til at skifte baggrundsfarve med ?? Så vil jeg mene, at jeg har koden til dig ??

Jeg har forsøgt mig med den enkelte celles change hændelse samt selection_chance hændelse uden held ... Har dog ikke givet op ;0) ... Indtil det lykkes kan du evt. bruge knappen.

Mvh Nicolai
Avatar billede tvc Seniormester
24. maj 2011 - 09:25 #12
Hej Nicolai

En knap vil være fint ;-)

Hilsen

TVC
Avatar billede Ialocin Novice
25. maj 2011 - 00:06 #13
Hej tvc

Jeg har rodet lidt med diverse celle hændelser, men jeg kan ikke finde en som trigges/kaldes ved blot at skifte baggrundsfarven ??

Derfor må du foreløbig klare dig med en knap :o)

Jeg har oprettet en knap (cmdFarveskift) på mit ark ved siden af Kolonne H.
Bag knappen har jeg følgende kode, som ved et klik, skifter baggrundsfarve ned gennem rækkerne, hvor celle H har samme værdi som den valgte/udskiftede farve i cellerne H1-H5.

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


Private Sub cmdFarveskift_Click()
Dim c As String
Dim r As String
Dim v As String
Dim f As Integer
Dim a As String
Dim bc As String
Dim t As Integer


'Vælg den aktuelle celle
ActiveCell.Select



'Aktuel kolonne nummer
c = ActiveCell.Column

'Aktuel række nummer
r = ActiveCell.Row

'Aktuel celle værdi
v = ActiveCell.Cells.Value

'Aktuel celle adresse
a = ActiveCell.Address

'Aktuel celle baggrundsfarve
bc = ActiveCell.Interior.Color


'Tildel variablen t, rækkenummeret på sidste række i kolonne H, indeholdende data
t = ActiveSheet.Range("H65536").End(xlUp).Row



'Hvis kolonne H er den aktuelle kolonne
'og hvis det aktuelle rækkenummer er 5 eller mindre
If c = 8 And r <= 5 Then

                'Løb ned gennem rækkerne og find identistiske værdier med celle værdien af den aktuelle celle
                For f = 10 To t

                    'Start i 10. række i kolonne H
                    ActiveSheet.Range("H" & f).Select


                    'Hvis den nye aktive celles værdi er = med den aktuelle celle værdi
                    If ActiveCell.Value = v Then

                      'Tildel hele den pågældende række med baggrundsfarven fra den aktuelle celle
                      ActiveCell.EntireRow.Interior.Color = bc

                    End If

                Next f

End If



'Vend tilbage til den aktuelle celle
Range(a).Select

End Sub



--------


Med venlig hilsen, Nicolai
Avatar billede tvc Seniormester
27. maj 2011 - 10:35 #14
Tak Nicolai - du har været en stor hjælp.

Jeg lægger fortsættelsen in under dette spørgsmål, hvis jeg finder på noget vedrørende den automatiske opdatering af baggrundsfarverne ved farveskift.

Måske blot ved at indsætte en lille kode, der holder øje med om target er <>"" og om target er mellem H2 og H19. Hvis betingelserne er opfyldt kan der komme MSGbox med spørgsmålet "Vil du opdatere farver for datalinjer?".

Det bliver ikke lige med det samme jeg ser på dette, da det p.t. virker. Det bliver et hyggeprojekt senere.

Endnu en gang tak for hjælpen.
Avatar billede Ialocin Novice
27. maj 2011 - 12:34 #15
Hej tvc

Selv tak .. det er være spændende.
Glæder mig til at følge med i "jagten" på automatisk opdatering af baggrundsfarve :o)


Go´ weekend, Nicolai
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