excel - Excel VBA:查找值并仅粘贴颜色(没有颜色的问题)
问题描述
好久不见。我正在处理一个小任务,不知何故我无法绕过我的头。我有一个巨大的 Excel 表(大约 4000 行),它正在被拆分并发送给人们 - 他们在特定行中从 K 列到 T 列标记黄色或红色单元格,并每周将其发回,直到范围 K 到 T在这 4000 行中,具有“X”值(表示已发送)被标记为黄色或红色(已收到或未收到)。excel 工作表在 J 列中具有唯一值(所以我使用 MATCH)。因此,通过使用此列 J,我将遍历数据(主表)中的每一行,并检查是否在输入表中找到它(用户返回的东西),如果找到,我去复制他们的颜色标记到原始数据表。这非常适合那些黄色和红色的颜色,子本身运行得很快——只是想知道是否没有错误(我上次做一些宏是在 3 年前)。问题 - 如果单元格是空的,它会以白色的形式粘贴回数据表,并且 Excel 的原始网格消失了(难以阅读)。谁能指出我正确的方向?谢谢!
Sub test4()
Application.ScreenUpdating = False
Set dat = Sheets("Data")
n = dat.Range("J" & Rows.Count).End(xlUp).Row
Dim test As Long
For i = 2 To n
inputrow = 0
On Error Resume Next
inputrow = Application.WorksheetFunction.Match(Worksheets("Data").Range("J" & i).Value, Sheets("Input").Range("J:J"), 0)
On Error GoTo 0
If inputrow > 0 Then
o = dat.Range("A" & Rows.Count).End(xlUp).Row + 1
dat.Range("K" & i).Interior.Color = Sheets("Input").Range("K" & inputrow).DisplayFormat.Interior.Color
dat.Range("L" & i).Interior.Color = Sheets("Input").Range("L" & inputrow).DisplayFormat.Interior.Color
dat.Range("M" & i).Interior.Color = Sheets("Input").Range("M" & inputrow).DisplayFormat.Interior.Color
dat.Range("N" & i).Interior.Color = Sheets("Input").Range("N" & inputrow).DisplayFormat.Interior.Color
dat.Range("O" & i).Interior.Color = Sheets("Input").Range("O" & inputrow).DisplayFormat.Interior.Color
dat.Range("P" & i).Interior.Color = Sheets("Input").Range("P" & inputrow).DisplayFormat.Interior.Color
dat.Range("Q" & i).Interior.Color = Sheets("Input").Range("Q" & inputrow).DisplayFormat.Interior.Color
dat.Range("R" & i).Interior.Color = Sheets("Input").Range("R" & inputrow).DisplayFormat.Interior.Color
dat.Range("S" & i).Interior.Color = Sheets("Input").Range("S" & inputrow).DisplayFormat.Interior.Color
dat.Range("T" & i).Interior.Color = Sheets("Input").Range("T" & inputrow).DisplayFormat.Interior.Color
End If
Next i
End Sub
解决方案
DisplayFormat.Interior.ColorIndex = xlNone
如果单元格没有被着色,则为 True。除非您使用条件格式,否则您不需要DisplayFormat
Sub test4()
Dim test As Long, inputrow, dat As Worksheet, wsInput As Worksheet
Dim n As Long, i As Long, c As Long, o
Application.ScreenUpdating = False
Set wsInput = Sheets("Input")
Set dat = Sheets("Data")
n = dat.Range("J" & Rows.Count).End(xlUp).Row
For i = 2 To n
inputrow = Application.Match(dat.Range("J" & i).Value, wsInput.Range("J:J"), 0)
If Not IsError(inputrow) Then 'check for match
o = dat.Range("A" & Rows.Count).End(xlUp).Row + 1
'loop over columns
For c = 11 To 20
With wsInput.Rows(inputrow).Cells(c)
'copy color if cell is not default color
If .Interior.ColorIndex <> xlNone Then
dat.Cells(i, c).Interior.Color = .Interior.Color
End If
End With
Next c
End If 'got match
Next i
End Sub
推荐阅读
- python - 使用 Numpy PYthon 在值之间签入
- reactjs - 如何使用 Firebase 刷新令牌来保持身份验证?
- php - 如何在 php 的 ajax 调用函数中传递 2 个参数?
- c - 如何以编译器从库中获取函数声明的方式正确链接库?
- excel - 是否可以将 DAX 公式导入 Excel 的数据模型?
- apache-spark - 结构化流数据框为空
- twitter-bootstrap - 如何在引导程序的右侧添加 EMPTY col
- mysql - 你如何确定 PHP 中两个常量值之间的百分比?
- node.js - 使用 stripe + netlify 时如何将订单确认数据反映到前端?
- python - 将长字符串写入文件