1

我想根据具有单元格需要拾取的相关颜色的命名状态范围,自动在一列值中为单元格着色。例如:


工作表 1

A栏| B栏| 列 C
A 名称 A | 部门 AAA | 状态 1
A 姓名 B | 部门 AAA | 状态 2
A 姓名 C | 部门 BBB | 状态 1
A 姓名 D | CCC 部 | 状态 3
A 姓名 E | 部门 BBB | 状态 2


在具有命名范围的单独工作表中状态
工作表 2
列 A
状态 1(单元格着色为绿色)
状态 2(单元格着色为蓝色)
状态 3(单元格着色为粉红色)

所以我想要的是工作表 1 的 C 列中的所有状态 1 都涂成绿色,状态 2 涂成蓝色,状态 3 涂成粉红色。
目前大约有 30 种状态为四种颜色中的一种。这些颜色将来可能会发生变化,并且可能会有其他颜色,因此它应该自动拾取这些颜色。

感激地收到任何帮助

4

2 回答 2

0

我同意@Stephan1010 的观点,即条件格式是最好的方法。它也应该更易于管理,因为您只有 4 种颜色,这意味着 4 个条件以及包含所有适用状态的 OR 语句。如果颜色/状态发生变化,您不必修改所有 30 个...

话虽如此,虽然它会严重影响工作簿的性能,但可以通过工作表事件在 vba 中完成。第一段代码将捕获工作表 1 中 C 列的任何更改并更新背景颜色(当然也可以进行其他更改)

Private Sub Worksheet_Change(ByVal Target As Range)

minCol = Target.Cells(1, 1).Column
maxcol = minCol + (Target.Columns.Count - 1)
If minCol > 3 Or maxcol < 3 Then
Else
    For Each cell In Target.Cells
        If cell.Column = 3 Then
            If Not IsError(Application.Match(cell.Value, 
                              Worksheets("Sheet1").Range("Statuses"), 0))     
            Then
                x = Application.Match(_
                        cell,Worksheets("Sheet1").Range("Statuses"), 0)
               cell.Interior.Color = Worksheets("Sheet1")._
                                      Range("Statuses").Cells(x, 1).Interior.Color
            End If
        End If
    Next cell
End If
End Sub

然后,您需要在工作表 1 中捕获对状态范围的任何更改,并更新工作表 2 中的每个适用值。这将更加复杂,如果确实需要此步骤,那么您应该能够开始并本质上实现了上面代码的逆逻辑。

于 2013-07-25T22:50:41.143 回答
0

为 Excel 单元格范围着色:

worksheet.Cells["A2:AZ"].interior.color= System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

从 Excel 单元格范围中删除颜色:

xlWorkSheet1.Range["A2:AZ"].Interior.ColorIndex = 0;

于 2019-01-10T10:18:59.637 回答