Excel条件格式
我有一个关于macros基于以下要求的macros查询
我想要实现的事情是:
1:工作表1将包含我的数据input(示例)
ABCDE 1 2 3 4 5 3 5 5
如表1所示,包含5列3行(row1包含列名,row2和row3包含数据值)。
2:我需要检查工作表1中的列名是否出现在工作表2中的值(工作表2包含列1中的以下值)
A E
3:首先检查sheet1的row1的任何值(在我的例子中列名是A,B,C,D,E)是否与sheet2中存在的任何列名匹配(在我的情况下是A,E)
4:如果find匹配,请检查以下内容(在我的情况下find列A和E)。
5:在这种情况下,我想标记与这些列相对应的值,也就是说,如果它们包含任何值,那么它们应该被标记(这可以被突出显示或移动到另一个表格中)。只允许空值
6:所以在我的例子中,row2应该被移动到不同的工作表中,或者A和E下的值应该被突出显示,或者整行被移动到工作表3中
我更像是一名ETL人员和一名excel新手,但是试图通过macros来实现自动化。寻找一种如何实现这一点的方法
我已经尝试的方法
1:将来自sheet1的列名称的值粘贴到新的工作表3中,并粘贴为转置
2:使用vlookup将这些值与sheet2值进行比较
3:每当发现匹配时,使用相等的操作来比较单元格值并生成布尔返回值
在此之前,我继续我想检查我的方法是否正确! 欣赏你的投入家伙
PS:我不是在找人写整个代码,而是在VBE中处理上述场景的通用方法
尝试这个:
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
见图像以供参考:
你从来没有真正说过你想用数据做什么。 此代码将突出显示无效的单元格。
Sub HighlightInvalidData() Dim rData As Range,rCheck As Range,c As Range,target As Range 昏暗我只要 设置rData = Sheet1.Range(“A1”)。CurrentRegion 设置rCheck = Range(Sheet2.Range(“A1”),Sheet2.Range(“A”&Rows.Count).End(xlUp)) 对于i = rData.Rows.Count为2步-1 对于每个c在rCheck中 Set target = rData.Rows(i).Columns(c.Text) 如果不是空(目标)那么 突出显示无效的数据 target.Interior.Color = vbRed 万一 下一个 下一个 结束小组
您可以使用高亮显示无效行
'Highlight Invalid Row Sheet1.Rows(target.Row).Interior.Color = vbRed
我从最后一行迭代到第一行。 这样,您可以根据需要删除行。
'Delete Row target.EntireRow.Delete