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 is
ColBG1=ColB&',“ColG
?您在
Countif
函数中传递了一个不连续的
范围,该范围不起作用。相反,请像
n=Application.Countif(ColB,c)+Application.Countif(ColG,c)那样尝试
问题是,这两个范围是相互比较的,而如果将它们分开,则只会指出唯一的值…所以我需要它来循环,或者至少识别单元格,并将其复制到SHT4。这只是直接循环到结尾,如果对我来说?一直向下,即使是唯一值:)@HosKvikOffIns是什么意思。这是它应该粘贴在sht4中的范围…我将编辑代码,因此您将看到解释如何处理唯一值。整个工作簿实际上是匹配两个不同的帐户概述列表…一个来自供应商,然后是我们在系统中的内容。因此,发票和贷记单编号应该相加。如果有系统中没有的发票或贷记单,则它应沿单元格左右复制,并将其插入sht4中,更易于查看:)