Excel VBA通过两列循环,仅复制一个符合条件范围的单元格
我的问题:Excel VBA通过两列循环,仅复制一个符合条件范围的单元格,vba,excel,foreach,conditional-formatting,Vba,Excel,Foreach,Conditional Formatting,我的问题: Sub LoopForCondFormatCells() Dim sht3, sht4 As Worksheet Dim ColB, ColG, ColBG c As Range Set sht3 = Sheets("Compare") Set sht4 = Sheets("Print ready") Set ColG = sht3.Range("B3:B88") Set ColB = sht3.Range("G3:G86")
Sub LoopForCondFormatCells()
Dim sht3, sht4 As Worksheet
Dim ColB, ColG, ColBG c As Range
Set sht3 = Sheets("Compare")
Set sht4 = Sheets("Print ready")
Set ColG = sht3.Range("B3:B88")
Set ColB = sht3.Range("G3:G86")
HosKvik = sht4.Columns("B").Find("Hos Kvik, men ikke bogføring", Lookat:=xlWhole).Address(False, False, xlA1)
HosKvikOff = sht4.Range(HosKvik).Offset(1, 0).Address(False, False, xlA1)
Set HosKvikOffIns = sht4.Range(HosKvikOff).Offset(1, -1)
ColBG1 = ColB & "," ColG
Set ColBG = Range(ColBG1)
'In the following For Each strings, I would like it to look in the range ColBG, _
but it should only return the value it finds in ColB... _
But I don't know how to write the code to do so
For Each c In ColB.Cells
If Not IsEmpty(c) Then
n = Application.WorksheetFunction.CountIfs(ColBG, c) 'Error here
If n = 1 Then
c.Offset(0, -1).Resize(1, 3).Copy
HosKvikOffIns.PasteSpecial xlPasteAll
Set HosKvikOffIns = HosKvikOffIns.Offset(1, 0)
End If
End If
Next
我想在一个范围内循环,每当它找到一个彩色单元格时,它应该将左侧的单元格复制到右侧的单元格。然后将其粘贴到其他工作表中
我的名为“比较”的工作表比较两组数据,而FormatConditions作为xlUniqueValues应用。。。这两组数据应该包含相同的数据,但有时会有一些不在其他范围内。我感兴趣的是通过循环查找这些单元格,然后在满足条件的情况下执行这些过程
我的代码不会在单元格中循环并返回以下消息:
运行时错误“1004”:对象“WorksheetFunction”的方法“CountIfs”失败
“比较”表中部分数据的屏幕截图:
我的代码:
Sub LoopForCondFormatCells()
Dim sht3, sht4 As Worksheet
Dim ColB, ColG, ColBG c As Range
Set sht3 = Sheets("Compare")
Set sht4 = Sheets("Print ready")
Set ColG = sht3.Range("B3:B88")
Set ColB = sht3.Range("G3:G86")
HosKvik = sht4.Columns("B").Find("Hos Kvik, men ikke bogføring", Lookat:=xlWhole).Address(False, False, xlA1)
HosKvikOff = sht4.Range(HosKvik).Offset(1, 0).Address(False, False, xlA1)
Set HosKvikOffIns = sht4.Range(HosKvikOff).Offset(1, -1)
ColBG1 = ColB & "," ColG
Set ColBG = Range(ColBG1)
'In the following For Each strings, I would like it to look in the range ColBG, _
but it should only return the value it finds in ColB... _
But I don't know how to write the code to do so
For Each c In ColB.Cells
If Not IsEmpty(c) Then
n = Application.WorksheetFunction.CountIfs(ColBG, c) 'Error here
If n = 1 Then
c.Offset(0, -1).Resize(1, 3).Copy
HosKvikOffIns.PasteSpecial xlPasteAll
Set HosKvikOffIns = HosKvikOffIns.Offset(1, 0)
End If
End If
Next
目标:
Sub LoopForCondFormatCells()
Dim sht3, sht4 As Worksheet
Dim ColB, ColG, ColBG c As Range
Set sht3 = Sheets("Compare")
Set sht4 = Sheets("Print ready")
Set ColG = sht3.Range("B3:B88")
Set ColB = sht3.Range("G3:G86")
HosKvik = sht4.Columns("B").Find("Hos Kvik, men ikke bogføring", Lookat:=xlWhole).Address(False, False, xlA1)
HosKvikOff = sht4.Range(HosKvik).Offset(1, 0).Address(False, False, xlA1)
Set HosKvikOffIns = sht4.Range(HosKvikOff).Offset(1, -1)
ColBG1 = ColB & "," ColG
Set ColBG = Range(ColBG1)
'In the following For Each strings, I would like it to look in the range ColBG, _
but it should only return the value it finds in ColB... _
But I don't know how to write the code to do so
For Each c In ColB.Cells
If Not IsEmpty(c) Then
n = Application.WorksheetFunction.CountIfs(ColBG, c) 'Error here
If n = 1 Then
c.Offset(0, -1).Resize(1, 3).Copy
HosKvikOffIns.PasteSpecial xlPasteAll
Set HosKvikOffIns = HosKvikOffIns.Offset(1, 0)
End If
End If
Next
我希望宏在单元格中循环,找到FormatConditions类型为“xlUniqueValues”的单元格。每当遇到FormatConditions类型为“xlUniqueValues”的单元格时,它都应该执行以下步骤:
For Each c In ColB.Cells
If Not IsEmpty(c) Then
n = Application.WorksheetFunction.CountIfs(ColBG, c) 'Error here
If n = 1 Then
c.Offset(0, -1).Resize(1, 3).Copy
HosKvikOffIns.PasteSpecial xlPasteAll
Set HosKvikOffIns = HosKvikOffIns.Offset(1, 0)
End If
End If
Next
我应该在“If c Is”行中写些什么来让宏执行我希望它执行的操作?我是否可以循环两个不同的范围,并且只返回范围G中的任何xlUniqueValue?Countif的范围不正确
Sub LoopForCondFormatCells()
Dim sht3 As Worksheet, sht4 As Worksheet
Dim ColB As Range, ColG As Range, ColBG As Range, c As Range
Dim Wf As WorksheetFunction
Dim vR() As Variant
Dim k As Long, j As Integer
Set Wf = WorksheetFunction
Set sht3 = Sheets("Compare")
Set sht4 = Sheets("Print ready")
Set ColG = sht3.Range("B3:B88")
Set ColB = sht3.Range("G3:G86")
'ColBG1 = ColB & "," ColG
'Set ColBG = Union(ColG, ColB)
'In the following For Each strings, I would like it to look in the range ColBG, _
but it should only return the value it finds in ColB... _
But I don't know how to write the code to do so
For Each c In ColB.Cells
If Not IsEmpty(c) Then
With Wf
n = .CountIfs(ColG, c) 'Error here
If n = 0 Then
k = k + 1
ReDim Preserve vR(1 To 3, 1 To k)
For j = 1 To 3
vR(j, k) = c.Offset(0, j - 2)
Next j
End If
End With
End If
Next
sht4.Range("a1").Resize(k, 3) = Wf.Transpose(vR) '<~~The unique values are written below cell a1 in Sheet 4.
End Sub
Sub-LoopForCondFormatCells()
将sht3标注为工作表,将sht4标注为工作表
变暗ColB作为范围、ColG作为范围、ColBG作为范围、c作为范围
将Wf设置为工作表功能
Dim vR()作为变量
将k作为长,j作为整数
设置Wf=工作表功能
设置sht3=图纸(“比较”)
设置sht4=纸张(“打印就绪”)
设置ColG=sht3.范围(“B3:B88”)
设置ColB=sht3.范围(“G3:G86”)
'ColBG1=ColB&',“ColG
'Set ColBG=Union(ColG,ColB)
'在下面的每个字符串中,我希望它位于ColBG范围内_
但是它应该只返回它在ColB中找到的值_
但我不知道如何编写代码来做到这一点
对于ColB.单元格中的每个c
如果不是空的(c),那么
与Wf
n=.CountIfs(ColG,c)在此处出现错误
如果n=0,则
k=k+1
重拨保留vR(1到3,1到k)
对于j=1到3
vR(j,k)=c偏移量(0,j-2)
下一个j
如果结束
以
如果结束
下一个
sht4.Range(“a1”).Resize(k,3)=Wf.Transpose(vR)'What isColBG1=ColB&',“ColG
?您在Countif
函数中传递了一个不连续的范围,该范围不起作用。相反,请像n=Application.Countif(ColB,c)+Application.Countif(ColG,c)那样尝试
问题是,这两个范围是相互比较的,而如果将它们分开,则只会指出唯一的值…所以我需要它来循环,或者至少识别单元格,并将其复制到SHT4。这只是直接循环到结尾,如果对我来说?一直向下,即使是唯一值:)@HosKvikOffIns是什么意思。这是它应该粘贴在sht4中的范围…我将编辑代码,因此您将看到解释如何处理唯一值。整个工作簿实际上是匹配两个不同的帐户概述列表…一个来自供应商,然后是我们在系统中的内容。因此,发票和贷记单编号应该相加。如果有系统中没有的发票或贷记单,则它应沿单元格左右复制,并将其插入sht4中,更易于查看:)