Avatar billede lassejuul Nybegynder
04. december 2007 - 12:22 Der er 14 kommentarer og
1 løsning

Ændre farve alt efter hvad der står i feltet med en macro

Jeg har nogle data som ser ud som følgende:

  a          b      c
1  Lasse      34    85
2  Børge      75    45
3  Kurt        85    2000
4  Claus      75    62
5  Henrik      74    32
6  Karl        72    25

Så vel jeg gerne have en macro der farver rækken (ved Lasse Farves: A1,B1 og C1), hvert navn har en farve. Når feltet er farvet og macroen køres igen skal den ikke farves på ny da listen kan blive meget lang. Dvs. at det er kun de rækker der ikke er farvet der skal have en farve.
Avatar billede mugs Novice
04. december 2007 - 12:27 #1
Kan du ikke bruge betinget formatering:

Formater > Betinget formatering

Der kan du indsætte op til 3 betingelser i hver celle.
Avatar billede jlemming Nybegynder
04. december 2007 - 12:35 #2
Vil du selv bestemmer farven?, f.eks ved at du selv giver navnet en farve først det optræder
Avatar billede jlemming Nybegynder
04. december 2007 - 12:37 #3
Eller har du farverne et andet sted, f.eks en liste
Avatar billede lassejuul Nybegynder
04. december 2007 - 12:51 #4
Hvert navn skal have en bestemt farve, og den samme heletiden. Nej jeg kan ikke bruge betinget formatering da der kun er 3 betingelser. Hvis der står Lasse skal rækken altid være gul osv..
Avatar billede jlemming Nybegynder
04. december 2007 - 12:58 #5
Denne kode sætter noget af farverne, men jeg mangler stadigvæk og få at vide hvor farverne skal komme fra?

Private Sub CommandButton1_Click()
 
  Const Kolonne As String = "A"
  Const StartRække As Integer = 1
  Const Regneark As String = "Sheet1"
  Dim SlutRække As Integer
 
  SlutRække = Range(Kolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1

For Each r In Range(Kolonne & StartRække & ":" & Kolonne & SlutRække)
    If r.Interior.ColorIndex = xlNone Then
        Select Case r.Value
        Case "Lasse"
            r.Interior.ColorIndex = 3
            r.Interior.Pattern = xlSolid
        Case "Kurt"
            r.Interior.ColorIndex = 4
            r.Interior.Pattern = xlSolid
        End Select
    End If
Next r


End Sub
Avatar billede jlemming Nybegynder
04. december 2007 - 13:54 #6
Denne kode, sætten farven efter hvilke farve navnet havde forrige gang


Private Sub CommandButton1_Click()
 
  Const Kolonne As String = "A"
  Const StartRække As Integer = 1
  Const Regneark As String = "Sheet1"
  Const farve As Integer = 1
  Const navn As Integer = 0
  Dim SlutRække As Integer
  Dim tabel(1000, 2) As Variant
 
SlutRække = Range(Kolonne & StartRække).CurrentRegion.Rows.Count + StartRække - 1
navnnr = 0
For Each r In Range(Kolonne & StartRække & ":" & Kolonne & SlutRække)
    If r.Interior.ColorIndex <> xlNone Then
        tabel(navnnr, farve) = r.Interior.ColorIndex
        tabel(navnnr, navn) = r
        navnnr = navnnr + 1
    End If
Next r

For Each r In Range(Kolonne & StartRække & ":" & Kolonne & SlutRække)
    If r.Interior.ColorIndex = xlNone Then
        For i = 0 To navnnr
            If UCase(r.Value) = UCase(tabel(i, navn)) Then
                For t = 0 To 2
                r.Offset(0, t).Interior.Pattern = xlSolid
                r.Offset(0, t).Interior.ColorIndex = tabel(i, farve)
                Next t
            End If
        Next i
    End If
Next r
End Sub
Avatar billede lassejuul Nybegynder
05. december 2007 - 09:27 #7
Det virker fint, men er meget langsomt, jeg har 11 celler der skal farves. Kan man ikke farve en hel række adgangen? F.eks. fra A1 til K1 på engang?
Avatar billede jlemming Nybegynder
05. december 2007 - 11:08 #8
Jooo, det kan man godt. Jeg kúnne bare ikke lige få det til at virke igår, så det sprang jeg over.

Prøv om dette er hurtigere

Private Sub CommandButton1_Click()
 
  Const Kolonne As String = "A"
  Const KolonneSlut As String = "K"
  Const StartRække As Integer = 1
  Const Regneark As String = "Sheet1"
  Const farve As Integer = 1
  Const navn As Integer = 0
  Dim SlutRække As Integer
  Dim tabel(1000, 2) As Variant
 
SlutRække = Range(Kolonne & StartRække).CurrentRegion.Rows.Count + StartRække - 1
Set omrade = Range(Kolonne & StartRække & ":" & Kolonne & SlutRække)

Application.ScreenUpdating = False
navnnr = 0
For Each r In omrade
    If r.Interior.ColorIndex <> xlNone Then
        tabel(navnnr, farve) = r.Interior.ColorIndex
        tabel(navnnr, navn) = r
        navnnr = navnnr + 1
    End If
Next r

For Each r In omrade
    If r.Interior.ColorIndex = xlNone Then
        For i = 0 To navnnr
            If UCase(r.Value) = UCase(tabel(i, navn)) Then
                Range(Kolonne & r.Row & ":" & KolonneSlut & r.Row).Interior.ColorIndex = tabel(i, farve)
            End If
        Next i
    End If
Next r
Application.ScreenUpdating = True

End Sub
Avatar billede jlemming Nybegynder
05. december 2007 - 12:39 #9
Denne kode farver også dem der har en farve i 1.kolonne.

Private Sub CommandButton1_Click()
 
  Const Kolonne As String = "A"
  Const KolonneSlut As String = "K"
  Const StartRække As Integer = 1
  Const Regneark As String = "Sheet1"
  Const farve As Integer = 1
  Const navn As Integer = 0
  Dim SlutRække As Integer
  Dim tabel(1000, 2) As Variant
 
SlutRække = Range(Kolonne & StartRække).CurrentRegion.Rows.Count + StartRække - 1
Set omrade = Range(Kolonne & StartRække & ":" & Kolonne & SlutRække)

Application.ScreenUpdating = False
navnnr = 0
For Each r In omrade
    If r.Interior.ColorIndex <> xlNone Then
        tabel(navnnr, farve) = r.Interior.ColorIndex
        tabel(navnnr, navn) = r
        navnnr = navnnr + 1
    End If
Next r

For Each r In omrade
        For i = 0 To navnnr
            If UCase(r.Value) = UCase(tabel(i, navn)) Then
                Range(Kolonne & r.Row & ":" & KolonneSlut & r.Row).Interior.ColorIndex = tabel(i, farve)
            End If
        Next i

Next r
Application.ScreenUpdating = True

End Sub
Avatar billede lassejuul Nybegynder
10. december 2007 - 14:46 #10
Det virker bare rigtigt fint, men lige et sidste men er det muligt at den tager efter den første farve og ikke den sidste når macroen køres??
Avatar billede jlemming Nybegynder
11. december 2007 - 21:44 #11
Prøv dette

Private Sub CommandButton1_Click()
 
  Const Kolonne As String = "A"
  Const KolonneSlut As String = "K"
  Const StartRække As Integer = 1
  Const Regneark As String = "Sheet1"
  Const farve As Integer = 1
  Const navn As Integer = 0
  Dim SlutRække As Integer
  Dim tabel(1000, 2) As Variant
 
SlutRække = Range(Kolonne & StartRække).CurrentRegion.Rows.Count + StartRække - 1
Set omrade = Range(Kolonne & StartRække & ":" & Kolonne & SlutRække)

Application.ScreenUpdating = False
navnnr = 0
For Each r In omrade
    If r.Interior.ColorIndex <> xlNone Then
        tabel(navnnr, farve) = r.Interior.ColorIndex
        tabel(navnnr, navn) = r
        navnnr = navnnr + 1
    End If
Next r

For Each r In omrade
        For i = navnnr To 0 Step -1
            If UCase(r.Value) = UCase(tabel(i, navn)) Then
                Range(Kolonne & r.Row & ":" & KolonneSlut & r.Row).Interior.ColorIndex = tabel(i, farve)
            End If
        Next i
Next r
Application.ScreenUpdating = True

End Sub
Avatar billede jlemming Nybegynder
02. januar 2008 - 11:12 #12
Husk at accepter
Avatar billede jlemming Nybegynder
08. januar 2008 - 14:38 #13
Lukketid ??, Det er altid rart at få sine point, når man nu har brugt sin fritid på at hjælpe andre
Avatar billede mugs Novice
08. januar 2008 - 14:42 #14
Enig!!
Avatar billede lassejuul Nybegynder
09. januar 2008 - 09:27 #15
Undskyld jeg har været bortrejst i et stykke tid...
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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