根据列中的多个值格式化行
Format rows based on multiple values in a column
我是 VBA 的新手,大多数时候,我要么在这里找到代码,要么录制一个宏,然后根据需要进行更改。这次我找不到合适的代码来更改,所以我需要你的帮助。
假设我有一个 table 如下;
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
如果 "Account" 列包含相同的值,我想用不同的颜色填充整行(即 2 种颜色,如 table 格式)。例如,在这里,第 1-2-3 行将为红色,第 4 行将为绿色,第 5-6 行将再次为红色。当宏到达最后一个单元格时它将停止。
我试图修改条件格式代码,但是我做不到。他们通常根据某些标准处理列中的单元格。
任何帮助将不胜感激。
非常感谢!
这里仍然是条件格式。
我必须指出,您的着色逻辑 ("color row in respect to previos cell in row A") 不适用于第一行,因此必须失败。
如果您绝对需要使用 VBA,这是您要遵循的逻辑路径:
- 将 A 列设置为范围
- 对于此范围内的每个单元格,将此单元格与前一个单元格进行比较(同样,第 1 行在这里不起作用)
- 根据此比较为行着色
如果您在编码方面需要帮助,请使用您目前尝试过的内容更新您的问题。
一个简单的 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 语句询问它是否是第一行来说明第一行,并且因为我们稍后更改它的值,所以它唯一一次 运行 在第一行。
简单的说,我循环遍历数据的总行数,问它账号和上一个是不是一样,如果是,我用相同的颜色标示,如果不是,我用不同的颜色对它们进行编码。我只是运行自己用一些虚构的数据做的,看起来效果很好。
编码愉快,下次尝试提出更具体的代码问题!
这也可以在不使用 VBA 的情况下完成。
我们可以偷偷摸摸地使用 RANK
和 MOD
来识别 "alternating groups",因为条件格式适用于 returns 只有 TRUE
的任何公式/FALSE
.
使用您的示例数据(根据标题调整行号除外):
说明:
- Select
A2:C2
;将填充颜色设置为浅红色。 然后 A2:C2 仍然被选中:
- 主页(功能区菜单)> 条件格式 > 新规则...
- 选择使用公式确定要设置格式的单元格
- 选择为该值为真的单元格设置格式并输入公式:
=MOD(RANK($A2,$A:$A,1),2)=1
- 单击 格式 > 填充(选项卡)> 浅绿色 > 确定 > 确定
- Ctrl+C复制(同时还在
A2:C2
)
- Select
A2:C7
和 选择性粘贴 > 格式
我是 VBA 的新手,大多数时候,我要么在这里找到代码,要么录制一个宏,然后根据需要进行更改。这次我找不到合适的代码来更改,所以我需要你的帮助。
假设我有一个 table 如下;
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
如果 "Account" 列包含相同的值,我想用不同的颜色填充整行(即 2 种颜色,如 table 格式)。例如,在这里,第 1-2-3 行将为红色,第 4 行将为绿色,第 5-6 行将再次为红色。当宏到达最后一个单元格时它将停止。
我试图修改条件格式代码,但是我做不到。他们通常根据某些标准处理列中的单元格。
任何帮助将不胜感激。
非常感谢!
这里仍然是条件格式。
我必须指出,您的着色逻辑 ("color row in respect to previos cell in row A") 不适用于第一行,因此必须失败。
如果您绝对需要使用 VBA,这是您要遵循的逻辑路径:
- 将 A 列设置为范围
- 对于此范围内的每个单元格,将此单元格与前一个单元格进行比较(同样,第 1 行在这里不起作用)
- 根据此比较为行着色
如果您在编码方面需要帮助,请使用您目前尝试过的内容更新您的问题。
一个简单的 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 语句询问它是否是第一行来说明第一行,并且因为我们稍后更改它的值,所以它唯一一次 运行 在第一行。
简单的说,我循环遍历数据的总行数,问它账号和上一个是不是一样,如果是,我用相同的颜色标示,如果不是,我用不同的颜色对它们进行编码。我只是运行自己用一些虚构的数据做的,看起来效果很好。
编码愉快,下次尝试提出更具体的代码问题!
这也可以在不使用 VBA 的情况下完成。
我们可以偷偷摸摸地使用 RANK
和 MOD
来识别 "alternating groups",因为条件格式适用于 returns 只有 TRUE
的任何公式/FALSE
.
使用您的示例数据(根据标题调整行号除外):
说明:
- Select
A2:C2
;将填充颜色设置为浅红色。 然后 A2:C2 仍然被选中: - 主页(功能区菜单)> 条件格式 > 新规则...
- 选择使用公式确定要设置格式的单元格
- 选择为该值为真的单元格设置格式并输入公式:
=MOD(RANK($A2,$A:$A,1),2)=1
- 单击 格式 > 填充(选项卡)> 浅绿色 > 确定 > 确定
- Ctrl+C复制(同时还在
A2:C2
) - Select
A2:C7
和 选择性粘贴 > 格式