我是VBA的新手,大多数时候,我要么在这里找到代码,要么记录一个宏,然后根据需要进行更改。这次我找不到合适的代码来更改,因此需要您的帮助。
假设我有一个如下表;
A B C
Account Name Surname
1 111 AA BB
2 111 AA BB
3 111 AA BB
4 222 CC DD
5 333 EE FF
6 333 EE FF
如果“帐户”列包含相同的值,我想用不同的颜色(即2种颜色,如表格格式)填充整行。例如,此处的第1-2-3行将为红色,第4行将为绿色,第5-6行将再次为红色。当宏到达最后一个单元格时,它将停止。
我试图修改条件格式代码,但是我无法对其进行管理。通常,它们会根据某些条件处理列中的单元格。
任何帮助将不胜感激。
非常感谢!
答案 0 :(得分:1)
这也可以在不使用VBA的情况下完成。
我们可以通过使用RANK
和MOD
来标识“备用组”,因为条件格式可以与仅返回TRUE
/ FALSE
的任何公式一起使用,因此我们可以偷偷摸摸。
使用示例数据(为适应标题而调整的行号除外):
A2:C2
;将填充颜色设置为浅红色。 然后仍选择A2:C2: =MOD(RANK($A2,$A:$A,1),2)=1
A2:C2
上)A2:C7
和特殊粘贴> 格式 答案 1 :(得分:0)
条件格式仍然是解决问题的方法。
我必须指出,您的着色逻辑(“相对于行A中previos单元的颜色行”)不适用于第一行,因此必须失败。
如果您绝对需要使用VBA,这是您要遵循的逻辑路径:
如果您需要编码方面的帮助,请使用到目前为止的尝试来更新您的问题。
答案 2 :(得分:0)
您似乎只需要一个简单的If-Then语句。尝试遵循以下代码的操作:
Sub ColorCode()
Dim thisAccount, lastAccount As String
Dim NumRows, colorValue As Integer
Dim isFirstRow As Boolean
NumRows = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
lastAccount = ""
isFirstRow = True
With Sheets("Sheet1")
For i = 1 To NumRows
thisAccount = .Range("A" & i).Value
If isFirstRow = False Then
If thisAccount <> lastAccount Then
If .Range("A" & i - 1).Interior.ColorIndex = 3
.Range("A" & i).EntireRow.Interior.ColorIndex = 4
Else
.Range("A" & i).EntireRow.Interior.ColorIndex = 3
End If
Else
colorValue = .Range("A" & i - 1).Interior.ColorIndex
.Range("A" & i).EntireRow.Interior.ColorIndex = colorValue
End If
Else
.Range("A" & i).EntireRow.Interior.ColorIndex = 3
End If
lastAccount = .Range("A" & i).Value
isFirstRow = False
Next
End With
End Sub
与上一个答案相反,这应该通过使用初始If语句询问它是否为第一行来说明第一行,并且由于我们稍后更改了它的值,因此它将运行的唯一时间是第一行
简单地说,我遍历数据中的总行数,询问其帐号是否与上一个帐号相同,如果是,则对它们进行相同的颜色编码,如果不是,我用不同的颜色标记它们。我只是自己用一些编造的数据运行了它,似乎运行完美。
祝您编程愉快,下一次尝试提出一个更具体的代码问题!