Alternerende farve grupper av rader i Excel

stemmer
10

Jeg har et Excel-regneark som dette

id | data for id
   | mer data for id
id | data for id
id | data for id
   | mer data for id
   | enda flere data for id
id | data for id
   | mer data for id
id | data for id
id | data for id
   | mer data for id

Nå ønsker jeg å gruppere dataene i en id av vekslende bakgrunnsfarge på radene

Var color = white
for hver rad
    hvis den første cellen ikke er tom, og fargen er hvit
        sette farge til grønt
    hvis den første cellen ikke er tom og farge er grønn
        sette farge til hvit
    satt bakgrunn av raden å farge

Kan noen hjelpe meg med en makro eller noen VBA-kode

Takk

Publisert på 25/08/2008 klokken 20:11
kilden bruker
På andre språk...                            


8 svar

stemmer
0

Hvis du velger Betinget formatering menyalternativ under Format menyvalget det, vil du bli gitt en dialogboks som lar deg konstruere noen logikk til å gjelde den cellen.

Din logikk er kanskje ikke det samme som koden ovenfor, kan det se mer ut som:

Cell verdi er | lik | | og | Hvit .... Deretter velger du fargen.

Du kan velge tillegget knappen og gjøre tilstanden så stor som du trenger.

Svarte 25/08/2008 kl. 20:26
kilden bruker

stemmer
1

Må du bruke koden? hvis tabellen er statisk, så hvorfor ikke bruke auto formatering evne?

skriv bildebeskrivelse her

Det kan også hjelpe hvis du "slå sammen celler" med samme data. så kanskje hvis du slår sammen cellene i "data, mer data, enda mer data" i en celle, kan du lettere håndtere klassiske "hver rad er en rad" case.

Svarte 25/08/2008 kl. 20:53
kilden bruker

stemmer
4

Jeg tror dette gjør hva du leter etter. Vender farge når cellen i kolonne A endrer verdi. Løper inntil det ikke er noen verdi i kolonne B.

Public Sub HighLightRows()
    Dim i As Integer
    i = 1
    Dim c As Integer
    c = 3       'red

    Do While (Cells(i, 2) <> "")
        If (Cells(i, 1) <> "") Then    'check for new ID
            If c = 3 Then
                c = 4   'green
            Else
                c = 3   'red
            End If
        End If

        Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
        i = i + 1
    Loop
End Sub
Svarte 25/08/2008 kl. 22:03
kilden bruker

stemmer
37

Jeg bruker denne formelen for å få input for en betinget formatering:

=IF(B2=B1,E1,1-E1))    [content of cell E2]

Hvor kolonne B inneholder elementet som skal grupperes, og E er en hjelpekolonne. Hver gang det øvre celle (B1 på dette tilfellet) er den samme som den nåværende (B2), er den øvre rad innhold fra kolonne E returnert. Hvis ikke, vil den returnere en minus innholdet (det vil si at den outupt være 0 eller 1, avhengig av verdien av den øvre celle).

skriv bildebeskrivelse her

skriv bildebeskrivelse her

skriv bildebeskrivelse her

Svarte 20/07/2011 kl. 18:44
kilden bruker

stemmer
2

Basert på Jason Z svar, som fra mine tester ser ut til å være feil (minst på Excel 2010), her er en bit av koden som skjer for å fungere for meg:

Public Sub HighLightRows()
    Dim i As Integer
    i = 2 'start at 2, cause there's nothing to compare the first row with
    Dim c As Integer
    c = 2       'Color 1. Check http://dmcritchie.mvps.org/excel/colors.htm for color indexes

    Do While (Cells(i, 1) <> "")
        If (Cells(i, 1) <> Cells(i - 1, 1)) Then 'check for different value in cell A (index=1)
            If c = 2 Then
                c = 34   'color 2
            Else
                c = 2   'color 1
            End If
        End If

        Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
        i = i + 1
    Loop
End Sub
Svarte 06/06/2013 kl. 10:15
kilden bruker

stemmer
1

Jeg barrowing dette og prøvde å endre det for min bruk. Jeg har ordre tall i kolonne en og noen ordrer ta flere rader. Bare ønsker å veksle den hvite og grå per ordrenummer. Det jeg har her veksler hver rad.

ChangeBackgroundColor() ' ChangeBackgroundColor Macro ' ' Keyboard Shortcut: Ctrl+Shift+B Dim a As Integer a = 1 Dim c As Integer c = 15 'gray Do While (Cells(a, 2) <> "") If (Cells(a, 1) <> "") Then 'check for new ID If c = 15 Then c = 2 'white Else c = 15 'gray End If End If Rows(Trim(Str(a)) + ":" + Trim(Str(a))).Interior.ColorIndex = c a = a + 1 Loop

End Sub

Svarte 23/02/2015 kl. 18:49
kilden bruker

stemmer
0

Jeg har omarbeidet Bartdude svar, for Light Grey / Hvit basert på en konfigurerbar kolonne, ved hjelp av RGB-verdier. En boolean variablen er snudd når verdien endres og denne blir brukt til å indeksere farger matrisen via de heltallige verdier av sanne og falske. Fungerer for meg på 2010. Ring sub med arknummeret.

Public Sub HighLightRows(intSheet As Integer)
    Dim intRow As Integer: intRow = 2 ' start at 2, cause there's nothing to compare the first row with
    Dim intCol As Integer: intCol = 1 ' define the column with changing values
    Dim Colr1 As Boolean: Colr1 = True ' Will flip True/False; adding 2 gives 1 or 2
    Dim lngColors(2 + True To 2 + False) As Long   ' Indexes : 1 and 2
          ' True = -1, array index 1.    False = 0, array index 2.
    lngColors(2 + False) = RGB(235, 235, 235) ' lngColors(2) = light grey
    lngColors(2 + True) = RGB(255, 255, 255) '  lngColors(1) = white

    Do While (Sheets(intSheet).Cells(intRow, 1) <> "")
        'check for different value in intCol, flip the boolean if it's different
        If (Sheets(intSheet).Cells(intRow, intCol) <> Sheets(intSheet).Cells(intRow - 1, intCol)) Then Colr1 = Not Colr1
        Sheets(intSheet).Rows(intRow).Interior.Color = lngColors(2 + Colr1) ' one colour or the other
        ' Optional : retain borders (these no longer show through when interior colour is changed) by specifically setting them
        With Sheets(intSheet).Rows(intRow).Borders
            .LineStyle = xlContinuous
            .Weight = xlThin
            .Color = RGB(220, 220, 220)
        End With
        intRow = intRow + 1
    Loop
End Sub

Valgfritt bonus: for SQL-data, farge noen NULL verdier med samme gule som brukes i SSMS

Public Sub HighLightNULLs(intSheet As Integer)
    Dim intRow As Integer: intRow = 2 ' start at 2 to avoid the headings
    Dim intCol As Integer
    Dim lngColor As Long: lngColor = RGB(255, 255, 225) ' pale yellow

    For intRow = intRow To Sheets(intSheet).UsedRange.Rows.Count
        For intCol = 1 To Sheets(intSheet).UsedRange.Columns.Count
            If Sheets(intSheet).Cells(intRow, intCol) = "NULL" Then Sheets(intSheet).Cells(intRow, intCol).Interior.Color = lngColor
        Next intCol
    Next intRow
End Sub
Svarte 17/06/2015 kl. 14:21
kilden bruker

stemmer
0

Jeg bruker denne regelen i Excel til å formatere annenhver rad:

  1. Marker radene du ønsker å søke en vekslende stil.
  2. Trykk "Betinget formatering" -> Ny regel
  3. Velg "bruke en formel for å bestemme hvilke celler som til å formatere" (siste registrering)
  4. Skriv inn regelen i format verdi: =MOD(ROW(),2)=0
  5. Trykk på "Format", gjøre nødvendige formatering for vekslende rader, f.eks. Fyll -> Color.
  6. Trykk OK, trykk OK.

Hvis du ønsker å formatere vekslende spalter i stedet, bruk =MOD(COLUMN(),2)=0

Voila!

Svarte 06/12/2015 kl. 22:15
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more