Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何基于重复的cloumn值为excel列着色_Vba_Excel_Colors_Conditional Formatting - Fatal编程技术网

Vba 如何基于重复的cloumn值为excel列着色

Vba 如何基于重复的cloumn值为excel列着色,vba,excel,colors,conditional-formatting,Vba,Excel,Colors,Conditional Formatting,我有一个叫做order#的Excel列,其中的订单号有重复的值,因为每个订单有一个或多个项目,所以如果订单有3个项目,订单#将重复三次,以此类推 +----------+--------+ | order# | item# | +----------+--------+ | 1 | 11 | | 2 | 12 | | 2 | 22 | +----------+--------+ 我想用两种颜色来区分不同的顺序,所以如果第一

我有一个叫做order#的Excel列,其中的订单号有重复的值,因为每个订单有一个或多个项目,所以如果订单有3个项目,订单#将重复三次,以此类推

+----------+--------+
|  order#  |  item# |
+----------+--------+
|    1     |   11   |
|    2     |   12   |
|    2     |   22   |
+----------+--------+
我想用两种颜色来区分不同的顺序,所以如果第一个顺序是“1”,它将是红色,第二个“2”将是黄色,第三个“3”将再次是红色,第四个“4”将是黄色,依此类推

+----------+--------+
|  order#  |  item# |
+----------+--------+
|    1     |   11   |
|    2     |   12   |
|    2     |   22   |
+----------+--------+

这应该可以做到:

Sub test_CairoCoder()
Dim wS As Worksheet, _
    LastRow As Long, _
    ColorChg As Boolean, _
    OrderNb As String

Set wS = ActiveSheet
ColorChg = False

With wS
    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
    OrderNb = wS.Cells(2, 1)
    For i = 2 To LastRow
        If .Cells(i, 1) <> .Cells(i + 1, 1) And .Cells(i, 1) <> .Cells(i - 1, 1) Then
            ColorChg = Not ColorChg
            If ColorChg Then
                .Range(.Cells(i, "A"), .Cells(i + 1, "A")).Interior.Color = vbRed
            Else
                .Range(.Cells(i, "A"), .Cells(i + 1, "A")).Interior.Color = vbYellow
            End If
        Else
            If .Cells(i, 1) <> .Cells(i + 1, 1) Then
            Else
                If OrderNb <> .Cells(i, 1) Then
                    OrderNb = .Cells(i, 1)
                    ColorChg = Not ColorChg
                Else
                End If

                If ColorChg Then
                    .Range(.Cells(i, "A"), .Cells(i + 1, "A")).Interior.Color = vbRed
                Else
                    .Range(.Cells(i, "A"), .Cells(i + 1, "A")).Interior.Color = vbYellow
                End If
            End If
        End If
    Next i
End With
MsgBox "All done!", vbInformation + vbOKOnly

End Sub
子测试\u CairoCoder()
将wS设置为工作表_
最后一行,只要_
ColorChg作为布尔值_
OrderNb作为字符串
设置wS=ActiveSheet
ColorChg=False
与wS
LastRow=.Range(“A”&.Rows.Count).End(xlUp).Row
OrderNb=wS.Cells(2,1)
对于i=2到最后一行
如果.Cells(i,1).Cells(i+1,1)和.Cells(i,1).Cells(i-1,1),那么
ColorChg=非ColorChg
如果是彩色的话
.Range(.Cells(i,“A”),.Cells(i+1,“A”)).Interior.Color=vbRed
其他的
.Range(.Cells(i,“A”),.Cells(i+1,“A”)).Interior.Color=vbYellow
如果结束
其他的
如果.Cells(i,1).Cells(i+1,1)那么
其他的
如果订单nb.单元格(i,1),则
OrderNb=.Cells(i,1)
ColorChg=非ColorChg
其他的
如果结束
如果是彩色的话
.Range(.Cells(i,“A”),.Cells(i+1,“A”)).Interior.Color=vbRed
其他的
.Range(.Cells(i,“A”),.Cells(i+1,“A”)).Interior.Color=vbYellow
如果结束
如果结束
如果结束
接下来我
以
MsgBox“全部完成!”,vbInformation+vbOKOnly
端接头
试试这个:

Sub test()
    Dim i&, x&, cl As Range, Dic As Object
    Set Dic = CreateObject("Scripting.Dictionary"): Dic.CompareMode = vbTextCompare
    i = [A:A].Find("*", , xlValues, , xlByRows, xlPrevious).Row
    x = [1:1].Find("*", , xlValues, , xlByColumns, xlPrevious).Column
    For Each cl In Range("A2:A" & i)
        If Not Dic.exists(cl.Value2) Then
            Dic.Add cl.Value2, IIf(Dic.Count Mod 2 = 0, vbRed, vbYellow)
        End If
    Next cl
    For Each cl In Range("A2:A" & i)
        Range(cl, Cells(cl.Row, x)).Interior.Color = Dic(cl.Value2)
    Next cl
End Sub

继续使用条件格式,如:

=MOD(ROUND(SUM(1/COUNTIF($A$2:$A2,$A$2:$A2)),0),2)=0
'and the other color
=MOD(ROUND(SUM(1/COUNTIF($A$2:$A2,$A$2:$A2)),0),2)=1

无需使用vba,也无需在每次更改列表内容时运行宏。复制A2:B100等范围的公式。单击要更改颜色的列。选择格式化和格式化列。可以在一个位置编辑或自定义所有特性。提供大量使用Microsoft Excel设计的模板。希望访问此网站将帮助您了解excel与预设计模板的关系。

如果只有数字,条件格式是否足够?说偶数是红色,奇数是黄色?不一定是奇数和偶数,也许整张纸是偶数,或者整张纸是奇数,但有不同的重复值。它只处理重复值,但不处理单个值。而且所有的纸都是彩色的,我只想要选定的列大致上是选定的列还是A列或A列和B列?编辑不执行A和B!;)完美,但仍然只适用于重复值,单一值没有颜色!