2

VBA マクロによって複数の行に異なる色の背景が与えられている Excel テーブルがあります。これらの背景色は、行にロックする必要があります。私の問題は、テーブルがある列または別の列で並べ替えられると、データが並べ替えられると背景色が移動することです。

セルがロックされたままになるように、別の方法でフォーマットして、これが起こらないようにすることはできますか?

フォーマットに使用するコードは次のとおりです。

For Each Row In rng.Rows

If Condition Then

   Row.Select

   cIndex = ColourIndex(colour)
   With Selection.Interior
       .ColorIndex = cIndex
   End With

End If    
Next

私のテーブルの例は次のとおりです。

ここに画像の説明を入力 編集:追加コード

Sub Quota(ByVal Type As String)

Dim records As Long
Dim sht1 As Worksheet
Set sht1 = Worksheets("Sheet1")
Dim sht2 As Worksheet
Set sht2 = Worksheets("Sheet2")

records = sht1.Range("A1048576").End(xlUp).Row - 5

Dim rng As Range
Dim rngRowCount As Long
Dim rLastCell As Range
Dim i As Long

sht2.Activate

'Last used cell
Set rLastCell = sht2.Cells.Find(What:="*", After:=Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
'All used columns except 1st
Set rng = sht2.Range(Cells(2, 1), rLastCell)
rng.Select
rngRowCount = rng.Rows.CountLarge

For i = 1 To rngRowCount

Dim valueAs String
Dim colour As String
Dim VarX As Long
Dim maxValue As Long

value= sht2.Cells(i + 1, 1).Value
colour = sht2.Cells(i + 1, 2).Value

If Type = "A" Then
    VarX = sht2.Cells(i + 1, 3).Value
ElseIf Type = "B" Then
    VarX = sht2.Cells(i + 1, 5).Value
End If

maxValue = (records / 100) * VarX

ColourRows value, colour, maxValue

Next i

End Sub

Sub ColourRows(value As String, colour As String, maxValue As Long)

Dim sht1 As Worksheet
Set sht1 = Worksheets("Sheet1")
sht1.Activate

Dim rng As Range
Dim firstSixRowsOnwards As Range
Dim lastColumn As Long
Dim usedColumns As Range
Dim usedColumnsString As String
Dim highlightedColumns As Range
Dim rngDataRowCount As Long
Dim performancevalueAs String
Dim cIndex As Integer
Dim count As Long

count = 0

Dim rLastCell As Range

'End row
rngDataRowCount = sht1.Range("A1048576").End(xlUp).Row
'First 6 rows
Set firstSixRowsOnwards = sht1.Range("A6:XFD1048576")
'Last column
lastColumn = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
'Used Range
Set rng = sht1.Range(Cells(1, 1), Cells(rngDataRowCount, lastColumn))
'Used Columns
Set usedColumns = sht1.Range(Cells(1, 1), Cells(1048576, lastColumn))

Set rng = Intersect(rng, firstSixRowsOnwards, usedColumns)

For Each Row In rng.Rows

    compareValue= Cells(Row.Row, 5)).Value

    If (InStr(1, value, compareValue, 1) Then

        Dim rowNumber As Long
        Row.Select

        If count < maxValue Then

            cIndex = ColourIndex(colour)
            With Selection.Interior
                .ColorIndex = cIndex
            End With

            count = count + 1

        Else

            cIndex = 3                      'red
            With Selection.Interior
                .ColorIndex = cIndex
            End With

        End If

    End If

Next

End Sub
4

3 に答える 3

2

たとえば、CF で実行できます (最上位のルールは >11):

SO16274258 の例

編集 - うっかり 1 つのルールを省略してしまいました

下の 2 番目は次を使用します=ROW($A1)=11

SO16274258 2 番目の例

于 2013-04-29T09:10:20.553 に答える
1

どうぞ:

この場合、次の 2 つのいずれかを行います。

  1. 条件付き書式。多くのロジックと手動の手順が必要なので、そのままにしておきます。
  2. マクロ: データを並べ替えるたびに、次の関数を起動してください

    Sub Option1()
    Dim row As Range
    Dim rowNum As Integer
    Dim tRange As Range
    
    'set range here: in your example, it is A2:D11
    
    Set tRange = ActiveSheet.Range("A2:D11")
    
    'clear colors
    tRange.ClearFormats ' clears the previous format
    
    rowNum = 1
    
    For Each row In tRange.Rows
    
        Select Case rowNum
            Case 1, 2
                row.Interior.Color = RGB(255, 255, 0) ' 1 and 2nd will be yellow
            Case 3, 4
                row.Interior.Color = 255 ' 3rd and 4th row will be red
            Case 5, 6
                row.Interior.Color = RGB(0, 0, 255) ' 5 and 6th row will be blue
            Case Else
                row.Interior.Color = RGB(0, 255, 0) '' all the bottom row would be a Green row
        End Select
        rowNum = rowNum + 1
    Next row
    End Sub
    

それは役に立ちますか?

于 2013-04-29T08:55:42.090 に答える