Excel 条件格式
Excel Conditional Formatting
我有一个关于 excel 中的宏的查询,基于以下要求
我想要实现的目标:
1:Sheet 1 将包含我的数据输入(示例)
A B C D E
1 2 3 4 5
3 5 5
如图sheet1包含5列3行(第1行包含列名,第2行和第3行包含数据值)。
2:我需要检查 sheet 1 中的列名是否具有 sheet 2 中的值(sheet 2 在第 1 列中包含以下值)
A
E
3:首先检查 sheet1 的第 1 行的任何值(在我的示例中为列名,它们是 A、B、C、D、E)是否与 [= 中存在的任何列名匹配51=]2(在我的例子中是 A,E)
4:如果找到匹配项,请检查以下内容(在我的例子中,找到了 A 列和 E 列)。
5:在这种情况下,我想标记与这些列对应的值,也就是说,如果它们包含任何值,则应该标记它们(这可以突出显示或移到不同的 sheet) .只允许空值
6:所以在我的示例中,行 2 应该移动到不同的 sheet 中,或者 A 和 E 下的值应该突出显示,或者整行移动到 sheet 3
我更像是一名 ETL 人员和一名 excel 菜鸟,但我试图通过 macros.Looking 将其自动化,以寻求实现此功能的方法
我试过的方法
1:将 sheet1 中列名的值粘贴到新的 sheet3 中并粘贴为转置
2:使用 vlookup
将这些值与 sheet2 个值进行比较
3:每当找到匹配项时,使用相等运算比较单元格值并生成布尔值 return 值
好吧,在我继续之前,我想检查一下我的方法是否完全正确!!
感谢您的投入,伙计们
P.S:我不是在找人写整个代码,而是在 VBE 中处理上述场景的通用方法
你永远不会真正说出你想用数据做什么。此代码将突出显示无效单元格。
Sub HighlightInvalidData()
Dim rData As Range, rCheck As Range, c As Range, target As Range
Dim i As Long
Set rData = Sheet1.Range("A1").CurrentRegion
Set rCheck = Range(Sheet2.Range("A1"), Sheet2.Range("A" & Rows.Count).End(xlUp))
For i = rData.Rows.Count To 2 Step -1
For Each c In rCheck
Set target = rData.Rows(i).Columns(c.Text)
If Not IsEmpty(target) Then
'Highlight Invalid Data
target.Interior.Color = vbRed
End If
Next
Next
End Sub
您可以高亮显示无效行,而不是使用
'Highlight Invalid Row
Sheet1.Rows(target.Row).Interior.Color = vbRed
我从最后一行迭代到第一行。这样,你就可以在需要的时候删除行了。
'Delete Row
target.EntireRow.Delete
试试这个:
Sub Demo()
Dim lastRow As Long, colNum As Long, i As Long
Dim inputRng As Range, checkRng As Range, rngFound As Range
Dim inputWS As Worksheet, checkWS As Worksheet
'assigning worksheets to variable
Set inputWS = ThisWorkbook.Sheets("Sheet1")
Set checkWS = ThisWorkbook.Sheets("Sheet2")
'setting the range of both worksheets
Set inputRng = inputWS.Range("A1").CurrentRegion
Set checkRng = checkWS.Range("A1:A" & checkWS.Cells(Rows.Count, "A").End(xlUp).Row)
For Each cel In checkRng
'find Sheet2 values in Row1 of Sheet1
Set rngFound = inputWS.Rows(1).Find(cel.Value)
If Not rngFound Is Nothing Then
'get the column number if value found
colNum = rngFound.Column
lastRow = inputWS.Cells(Rows.Count, colNum).End(xlUp).Row
'loop through the entire column to find non-empty cells
For i = 2 To lastRow
If Not IsEmpty(inputWS.Cells(i, colNum)) Then
inputWS.Cells(i, colNum).Interior.Color = vbRed
End If
Next i
End If
Next
End Sub
参考图片:
我有一个关于 excel 中的宏的查询,基于以下要求
我想要实现的目标:
1:Sheet 1 将包含我的数据输入(示例)
A B C D E
1 2 3 4 5
3 5 5
如图sheet1包含5列3行(第1行包含列名,第2行和第3行包含数据值)。
2:我需要检查 sheet 1 中的列名是否具有 sheet 2 中的值(sheet 2 在第 1 列中包含以下值)
A
E
3:首先检查 sheet1 的第 1 行的任何值(在我的示例中为列名,它们是 A、B、C、D、E)是否与 [= 中存在的任何列名匹配51=]2(在我的例子中是 A,E)
4:如果找到匹配项,请检查以下内容(在我的例子中,找到了 A 列和 E 列)。
5:在这种情况下,我想标记与这些列对应的值,也就是说,如果它们包含任何值,则应该标记它们(这可以突出显示或移到不同的 sheet) .只允许空值
6:所以在我的示例中,行 2 应该移动到不同的 sheet 中,或者 A 和 E 下的值应该突出显示,或者整行移动到 sheet 3
我更像是一名 ETL 人员和一名 excel 菜鸟,但我试图通过 macros.Looking 将其自动化,以寻求实现此功能的方法
我试过的方法
1:将 sheet1 中列名的值粘贴到新的 sheet3 中并粘贴为转置
2:使用 vlookup
将这些值与 sheet2 个值进行比较3:每当找到匹配项时,使用相等运算比较单元格值并生成布尔值 return 值
好吧,在我继续之前,我想检查一下我的方法是否完全正确!! 感谢您的投入,伙计们
P.S:我不是在找人写整个代码,而是在 VBE 中处理上述场景的通用方法
你永远不会真正说出你想用数据做什么。此代码将突出显示无效单元格。
Sub HighlightInvalidData() Dim rData As Range, rCheck As Range, c As Range, target As Range Dim i As Long Set rData = Sheet1.Range("A1").CurrentRegion Set rCheck = Range(Sheet2.Range("A1"), Sheet2.Range("A" & Rows.Count).End(xlUp)) For i = rData.Rows.Count To 2 Step -1 For Each c In rCheck Set target = rData.Rows(i).Columns(c.Text) If Not IsEmpty(target) Then 'Highlight Invalid Data target.Interior.Color = vbRed End If Next Next End Sub
您可以高亮显示无效行,而不是使用
'Highlight Invalid Row
Sheet1.Rows(target.Row).Interior.Color = vbRed
我从最后一行迭代到第一行。这样,你就可以在需要的时候删除行了。
'Delete Row
target.EntireRow.Delete
试试这个:
Sub Demo()
Dim lastRow As Long, colNum As Long, i As Long
Dim inputRng As Range, checkRng As Range, rngFound As Range
Dim inputWS As Worksheet, checkWS As Worksheet
'assigning worksheets to variable
Set inputWS = ThisWorkbook.Sheets("Sheet1")
Set checkWS = ThisWorkbook.Sheets("Sheet2")
'setting the range of both worksheets
Set inputRng = inputWS.Range("A1").CurrentRegion
Set checkRng = checkWS.Range("A1:A" & checkWS.Cells(Rows.Count, "A").End(xlUp).Row)
For Each cel In checkRng
'find Sheet2 values in Row1 of Sheet1
Set rngFound = inputWS.Rows(1).Find(cel.Value)
If Not rngFound Is Nothing Then
'get the column number if value found
colNum = rngFound.Column
lastRow = inputWS.Cells(Rows.Count, colNum).End(xlUp).Row
'loop through the entire column to find non-empty cells
For i = 2 To lastRow
If Not IsEmpty(inputWS.Cells(i, colNum)) Then
inputWS.Cells(i, colNum).Interior.Color = vbRed
End If
Next i
End If
Next
End Sub
参考图片: