Vra

Ek het 'n Excel Spreadsheet soos hierdie

id | data for id
   | more data for id
id | data for id
id | data for id
   | more data for id
   | even more data for id
id | data for id
   | more data for id
id | data for id
id | data for id
   | more data for id

Nou wil ek groep die data van een id deur afwisselende die agtergrond kleur van die rye

var color = white
for each row
    if the first cell is not empty and color is white
        set color to green
    if the first cell is not empty and color is green
        set color to white
    set background of row to color

Kan iemand my help met 'n makro of 'n VBA-kode

Dankie

Was dit nuttig?

Oplossing

Ek dink dit doen wat jy is op soek na. Flips kleur wanneer die sel in kolom A waarde verander. Loop totdat daar is geen waarde in kolom 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

Ander wenke

Ek gebruik hierdie formule om die insette te kry vir 'n voorwaardelike formatering:

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

Waar kolom B bevat die item wat aangespreek moet word gegroepeer en E is 'n hulp kolom. Elke keer wat die boonste sel (B1 op hierdie geval) is dieselfde as die huidige een (B2), is die boonste ry inhoud van kolom E teruggekeer. Andersins, sal dit terugkeer 1 minus die inhoud (dit wil sê die outupt sal wees 0 of 1, na gelang van die waarde van die boonste sel).

betree beeld beskrywing hier

betree beeld beskrywing hier

betree beeld beskrywing hier

Op grond van Jason Z se antwoord, wat van my toetse blyk verkeerd (ten minste op Excel 2010), hier is 'n bietjie van die kode wat gebeur om te werk vir my te wees:

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

Het jy die kode te gebruik? As die tafel is staties, waarom dan nie die motor opmaak vermoë gebruik?

betree beeld beskrywing hier

Dit kan ook help as jy "saamsmelt selle" van dieselfde data. so miskien as jy die selle van die "data, meer data, selfs meer data" om saam te smelt in een sel, kan jy meer maklik hanteer klassieke "elke ry is 'n ry" geval.

Ek hierdie barrowing en probeer om dit vir my gebruik verander. Ek het einde nommers in kolom A en 'n paar bestellings neem verskeie rye. Wil net die wit wissel en grys per order nommer. Wat ek hier plaasvervangers elke ry.

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

As jy die kieslys opsie voorwaardelike formatering onder die formaat menu-item te kies, jy sal gegee word 'n dialoog waarmee jy 'n paar logika te bou om aansoek te doen om daardie sel.

Jou logika kan nie dieselfde as bo jou kode te wees, is dit dalk meer lyk soos:

Cell Waarde is | gelyk aan | | en | Wit .... Kies dan die kleur.

Jy kan dié byvoeging knoppie te kies en maak die toestand so groot soos wat jy nodig het.

Ek het antwoord Bartdude se verwerk, vir Light Grey / White gebaseer op 'n konfigureerbare kolom, met behulp van RGB waardes. 'N Titel var word omgekeer wanneer die waarde veranderinge en dit word gebruik om die indeks die kleure verskeidenheid via die heelgetalwaardes van Waar en Onwaar. Werk vir my op 2010. Bel die sub met die laken nommer.

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

Opsionele bonus, want SQL data, kleur enige nul waardes met dieselfde geel soos gebruik in 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

Ek gebruik hierdie reël in Excel te formateer afwisselende rye:

  1. Kies 'n voorbeeldfoto die rye wat jy wil 'n wisselende styl van toepassing op.
  2. Press "voorwaardelike formatering" -> New Reël
  3. Kies "Gebruik 'n formule om te bepaal watter selle te formatteer" (laaste inskrywing)
  4. Gee reël in formaat waarde: =MOD(ROW(),2)=0
  5. Press "Format", maak verlangde uitleg vir afwisselende rye, bv. Vul -.> Kleur
  6. Druk OK, druk OK.

As jy wil afwisselende kolomme te formateer plaas, gebruik =MOD(COLUMN(),2)=0

Voila!

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top