Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 多张图纸的工作表function.CountIf_Excel_Vba - Fatal编程技术网

Excel 多张图纸的工作表function.CountIf

Excel 多张图纸的工作表function.CountIf,excel,vba,Excel,Vba,我正在使用WorksheetFunction.CountIf在两个不同的工作表之间进行比较,但得到1004错误 Sub sbWriteIntoCellData() Dim CODE As Workbook Dim Sheet1 As Sheets Dim Sheet2 As Sheets Set Sheet1 = Sheets Set Sheet2 = Sheets For Each rngCell In Worksheets("Sheet1").range("A2", range("A2").

我正在使用WorksheetFunction.CountIf在两个不同的工作表之间进行比较,但得到1004错误

Sub sbWriteIntoCellData()
Dim CODE As Workbook
Dim Sheet1 As Sheets
Dim Sheet2 As Sheets
Set Sheet1 = Sheets
Set Sheet2 = Sheets
For Each rngCell In Worksheets("Sheet1").range("A2", range("A2").End(xlDown))

If WorksheetFunction.CountIf(Sheets("Sheet2").range("A2", range("A2").End(xlDown)), rngCell) = 1 Then

      Worksheets("Sheet1").range("C" & Rows.Count).End(xlUp).Offset(1) = "Yes"
        Else: Worksheets("Sheet1").range("C" & Rows.Count).End(xlUp).Offset(1) = "No"
    End If



Next

MsgBox "Execution completed"

End Sub

[

整理您的代码,使用正确的引用并正确设置变量。为每个
范围
对象指定它所在的工作表。这样您就不会出现任何错误(当然,我没有检查您的代码逻辑,只是纠正了明显的问题)


我已经生成了一个代码,将v-lookup公式传递到VBA中,它运行良好。。。 我张贴我的代码(验证)…它可能会帮助一些人谁是寻找类似的解决方案

该代码用于在or条件下将表1中的三行数据与表2中的另一行数据进行比较

简单地说:如果a2(表2)中的值存在于表1的F2/H2/I2中,则代码将打印“是” 结果将存储在表1中的AB2中

    Sub compare()
    Dim DataRange As Range
      Dim Sheet1 As Worksheet
        Set Sheet1 = ThisWorkbook.Worksheets("Sheet1")
        Dim Sheet2 As Worksheet
        Set Sheet2 = ThisWorkbook.Worksheets("Sheet2")
.Find the last cell value
     Dim Cell As Range
      Dim last As Double
    With ActiveSheet
            last = .Cells(.Rows.Count, "A").End(xlUp).Row
        End With
       Range("AB2").Formula = "=IF(OR(ISNA(VLOOKUP(F2,Sheet2!$A$2:$A$5,1,FALSE))=FALSE,ISNA(VLOOKUP(H2,Sheet2!$A$2:$A$5,1,FALSE))=FALSE,ISNA(VLOOKUP(I2,Sheet2!$A$2:$A$5,1,FALSE))=FALSE),""Yes"",""No"")"
    Range("AB2").AutoFill Destination:=Range("AB2:AB" & last)
    MsgBox "Execution completed"
    End Sub

使用R1C1表示法既可以增加处理时间,也可以使代码更易于维护

Option Explicit

Public Sub sbWriteIntoCellData()

    Dim sht1 As Worksheet
    Set sht1 = ThisWorkbook.Worksheets("Sheet1")

    With sht1

        Dim lastRow As Long
        lastRow = .Range("A2").End(xlDown).Row

        Dim res As Range
        Set res = .Range("C2:C" & lastRow)

        With res
                                                 '-2 bc formula on column C and checking against column A from sheet2
            .FormulaR1C1 = "=If(COUNTIF(Sheet2!C[-2],RC[-2])>1,""Yes"",""No"")"
            .Calculate
            .Value = .Value
        End With

    End With

End Sub

If工作表功能计数If(工作表(“表2”).范围(“A2”,范围(“A2”).结束(xlDown)),rngCell)=1然后在此行出错您需要为每个范围指定一个工作表。有–范围对象未绑定到特定的工作表。另外,您希望
Set Sheet1=Sheets
做什么?感谢您的建议..您能用语法解释一下吗非常感谢先生..我向您低头耐心..我是c新手oding world,甚至不了解一些基本知识……非常感谢您在这次听说的旅程中站在我身边……代码对我来说非常有效……但当我尝试一个大约500k(500万)记录集的大集合时,与5000(最大计数)相比,它的执行速度非常慢(即使在15分钟后也没有响应)我强行关闭了excel…是否有任何方法可以缩短执行时间…请帮助如果是v-lookup公式,则与不同工作簿中的200条(甚至高达5k)记录相比,近120万条记录的执行时间不到2分钟…公式如下所述…如果(或)ISNA(VLOOKUP(F2),[Value Sets.xlsx]值集“!$AE$2:$AE$130,1,FALSE))=FALSE,ISNA(VLOOKUP(L2,[Value Sets.xlsx]值集”!$AE$2:$AE$130,1,FALSE))=FALSE,ISNA(VLOOKUP(M2,[Value Sets.xlsx]值集)!$AE$2:$AE$130,1,FALSE))=FALSE,ISNA(VLOOKUP(E2,[Value Sets.xlsx]值集)!$2:$AE$130,1,FALSE))=FALSE,“是”,“否”)但它将在每个单元格中执行,我需要每次拖动以进行不同的数据比较。这就是为什么我要寻找VBA代码如果你能使用公式,它们几乎总是比VBA快。嘿,一个小问题…我们能在v查找公式中包含动态范围而不是$a$2:$a$5吗
Option Explicit

Public Sub sbWriteIntoCellData()

    Dim sht1 As Worksheet
    Set sht1 = ThisWorkbook.Worksheets("Sheet1")

    With sht1

        Dim lastRow As Long
        lastRow = .Range("A2").End(xlDown).Row

        Dim res As Range
        Set res = .Range("C2:C" & lastRow)

        With res
                                                 '-2 bc formula on column C and checking against column A from sheet2
            .FormulaR1C1 = "=If(COUNTIF(Sheet2!C[-2],RC[-2])>1,""Yes"",""No"")"
            .Calculate
            .Value = .Value
        End With

    End With

End Sub