自动着色和自动排序宏Excel 2010

时间:2013-10-01 19:18:16

标签: excel vba sorting excel-vba

下午好,

我需要以下项目的帮助。

我正在尝试找到一个基于输入自动排序和自动颜色的宏。

例如,我有三列。在第一列中,我输入了感兴趣基因的基因型。在同一个excel中使用VLOOKUP表,该条目将返回第二列中该基因的等效表型。最后一栏,即第三列,将返回该表型如何影响疾病状态(例如,正常=绿色,慢=黄色,快速=红色)。

让我们说这是我们原始的电子表格显示为:

Genotype    Phenotype    Disease State 
XX          IM           Slow
YY          UM           Fast
XY          EM           Normal
YY          UM           Fast

自动着色和自动排序完成其任务后,此表应显示为:

Genotype    Phenotype    Disease State
XY          EM           Normal
XX          IM           Slow
YY          UM           Fast
YY          UM           Fast

我找到了自动排序的宏,或者单独自动着色,但是当我尝试组合这些宏时,我一直都会遇到错误。

非常感谢任何帮助!


这些是我一直在尝试的宏。自动排序工作得很好,但自动着色我遇到了麻烦。我得到的错误范围,有时没有任何反应。

自动排序:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("A1").Sort Key1:=Range("A2"), _
          Order1:=xlDescending, Header:=xlYes, _
          OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom
    End If
End Sub

自动着色:

Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
If Target.Row < 1 Then Exit Sub
Select Case LCase(Target.Value)
    Case "Normal"
        Target.EntireRow.Interior.ColorIndex = 3
    Case "Fast"
        Target.EntireRow.Interior.ColorIndex = 4
    Case "Slow"
        Target.EntireRow.Interior.ColorIndex = 5
        Target.EntireRow.Interior.ColorIndex = xlColorIndexAutomatic
End Select
Application.EnableEvents = True
End Sub

Sub changeApplicationEnableEvents2truee()
Application.EnableEvents = True
End Sub

2 个答案:

答案 0 :(得分:0)

如果你有一个正常运行的自动排序宏,你可以使用它,然后尝试一些Conditional Formatting来设置颜色。

答案 1 :(得分:0)

正如@pnuts所说,一个问题是你似乎有2个Worksheet_Change例程。您的换色代码存在一些问题:使用LCase()强制您的字符串值全部为小写;只有改变的行才会改变颜色,而不是整个范围;等

我对你所拥有的东西进行了一些微小的改动。这会产生你想要的结果吗?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng As Range


    On Error Resume Next
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("A1").Sort Key1:=Range("A2"), _
          Order1:=xlDescending, Header:=xlYes, _
          OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom

        For Each rng In Intersect(ActiveSheet.UsedRange, Range("A:A")).Cells

            If Not IsEmpty(rng) Then

                Select Case rng.Offset(, 2).Value
                Case "Normal"
                    rng.EntireRow.Interior.Color = vbGreen
                Case "Fast"
                    rng.EntireRow.Interior.Color = vbRed
                Case "Slow"
                    rng.EntireRow.Interior.Color = vbYellow
                Case Else
                    rng.EntireRow.Interior.ColorIndex = xlColorIndexNone
                End Select
            End If
        Next rng
    End If

End Sub