Excel 如何对不';不包含特定的值

Excel 如何对不';不包含特定的值,excel,vba,sum,Excel,Vba,Sum,如果Excel中的行与第二个工作表中的行不同,我将尝试从第一个工作表中计算这些行 但有点不对劲 inicijaliDT是一个范围,我在表2中查看了数据 inicijali = wsNOSTROSheet.Range("R" & brojac).Value For Each Row In inicijaliDT If inicijali <> Row.Value Then brojRedaka = brojRedaka + 1

如果Excel中的行与第二个工作表中的行不同,我将尝试从第一个工作表中计算这些行

但有点不对劲

inicijaliDT
是一个范围,我在
表2中查看了数据

inicijali = wsNOSTROSheet.Range("R" & brojac).Value
For Each Row In inicijaliDT
    If inicijali <> Row.Value Then
        brojRedaka = brojRedaka + 1
    'Else
        'Exit For
    End If
    Exit For
Next Row
inicijali=wsNOSTROSheet.Range(“R”和brojac).Value
对于inicijaliDT中的每一行
如果是inicijali行。值,则
布罗伊雷达卡=布罗伊雷达卡+1
”“否则呢
"退出
如果结束
退出
下一排

如果我正确理解了您想要完成的任务,请尝试下一个代码:

Sub testCompareRows()
 Dim sh1 As Worksheet, sh2 As Worksheet, lastR As Long, i As Long, cnt As Long
 
 Set sh1 = ActiveSheet 'use here your first sheet
 Set sh2 = sh1.Next    'use here your second sheet
 lastR = sh1.UsedRange.rows.count + sh1.UsedRange.row - 1
 For i = 1 To lastR
    With Application
        If Join(.Transpose(.Transpose(sh1.rows(i)))) <> _
            Join(.Transpose(.Transpose(sh2.rows(i)))) Then cnt = cnt + 1
    End With
 Next i
 If cnt > 0 Then MsgBox "There are " & cnt & " different rows..."
End Sub
子testCompareRows()
尺寸sh1为工作表,sh2为工作表,lastR为长,i为长,cnt为长
设置sh1=ActiveSheet'在此处使用您的第一张工作表
设置sh2=sh1。下一步“在此处使用第二张图纸”
lastR=sh1.UsedRange.rows.count+sh1.UsedRange.row-1
对于i=1到lastR
应用
如果连接(.Transpose(.Transpose(sh1.rows(i)))_
连接(.Transpose(.Transpose(sh2.rows(i))),然后cnt=cnt+1
以
接下来我
如果cnt>0,则MsgBox“有”&cnt&“不同的行…”
端接头

您没有提出澄清问题,代码假定两张图纸的行数相同,第一张图纸中的每个行号都要与第二张图纸中的相同行号进行比较…

您可以自定义此图纸。在运行代码之前,请记住配置代码中的值

'TASK: count rows in first sheet that 
'have a different value to the same cells in the second sheet.

Sub countRows()

Dim positioner As Long, count As Long, last_row As Long
Dim db_first_row As Byte, col_n As Byte, name_s1 As String
Dim name_s2 As String, display_ans As String, msg As String
Dim display_in_cell As Boolean, display_in_msgbox As Boolean

'CONFIR HERE BEFORE YOU RUN IT
'------------------------------------------------
name_s1 = "Sheet1"         'name of first sheet
name_s2 = "Sheet2"         'name of second sheet
db_first_row = 2           'first row of the data set
col_n = 2                  'colum number of the data set
count = 0                  'from what number would you like to start counting?
display_in_cell = True     'do you want to display the answer in a specific cell?
display_ans = "C3"         'in what cell?
display_in_msgbox = True   'do you want to display the answer in a msgbox?
msg = "Different values counted: " 'message to display in msgbox
'------------------------------------------------

'get the last row of the data set
last_row = Sheets(name_s1).Cells(Rows.count, col_n).End(xlUp).Row

For positioner = db_first_row To last_row
    
    'if values of both sheets match in the same cell then count
    If Sheets(name_s1).Cells(positioner, col_n) <> _
    Sheets(name_s2).Cells(positioner, col_n) Then
            count = count + 1
        End If

Next positioner

If display_in_cell Then
    Sheets(name_s1).Range(display_ans) = count
End If

If display_in_msgbox Then
    MsgBox msg & count
End If

End Sub
“任务:计算第一张工作表中
'对第二张工作表中的相同单元格具有不同的值。
子计数行()
尺寸定位器长度,计数长度,最后一行长度
Dim db_第一行作为字节,列作为字节,名称作为字符串
Dim name_s2为字符串,display_ans为字符串,msg为字符串
将\u单元格中的\u显示为布尔值,将\u msgbox中的\u显示为布尔值
“在你运行它之前先确认一下
'------------------------------------------------
name_s1=“Sheet1”第一张图纸的名称
name_s2=“Sheet2””第二张图纸的名称
db_first_row=2'数据集的第一行
列数=数据集的2'列数
计数=0'您希望从哪个数字开始计数?
display_in_cell=True'是否要在特定单元格中显示答案?
在哪个单元格中显示“C3”?
display_in_msgbox=True'是否要在msgbox中显示答案?
msg=“计算的不同值:””要在msgbox中显示的消息
'------------------------------------------------
'获取数据集的最后一行
最后一行=工作表(名称)。单元格(行数,列数)。结束(xlUp)。行
定位器=db\u第一行到最后一行
'如果两张图纸的值在同一单元格中匹配,则计数
若有表(名称)。单元(定位器,单元)_
表(名称)。单元格(定位器,列)
计数=计数+1
如果结束
下一个定位器
如果在_单元格中显示_,则
图纸(名称)。范围(显示)=计数
如果结束
如果在msgbox中显示,则
MsgBox msg和count
如果结束
端接头
计数不相等 如果
inicijaliDT
是一个单列范围,则可以执行以下操作之一:

Sub testLoop()
    Dim cel As Range
    Dim brojRedaka As Long
    inicijali = wsNOSTROSheet.Range("R" & brojac).Value
    For Each cel In inicijaliDT.Cells
        If cel.Value <> inicijali Then
            brojRedaka = brojRedaka + 1
        End If
    Next cel
    'Debug.Print brojRedaka
End Sub

Sub testCountIf()
    Dim brojRedaka As Long
    inicijali = wsNOSTROSheet.Range("R" & brojac).Value
    brojRedaka = inicijaliDT.Rows.Count _
        - Application.CountIf(inicijaliDT, inicijali)
    'Debug.Print brojRedaka
End Sub
Sub testRowLoop()
    Dim RowRange As Range
    Dim cel As Range
    Dim brojRedaka As Long
    Dim isFound As Boolean
    inicijali = wsNOSTROSheet.Range("R" & brojac).Value
    For Each RowRange In inicijaliDT.Rows
        For Each cel In RowRange.Cells
            If cel.Value = inicijali Then
                isFound = True
                Exit For
            End If
        Next cel
        If isFound Then
            isFound = False
        Else
            brojRedaka = brojRedaka + 1
        End If
    Next RowRange
    'Debug.Print brojRedaka
End Sub

Sub testRowMatch()
    Dim RowRange As Range
    Dim brojRedaka As Long
    inicijali = wsNOSTROSheet.Range("R" & brojac).Value
    For Each RowRange In inicijaliDT.Rows
        If IsError(Application.Match(inicijali, RowRange, 0)) Then
            brojRedaka = brojRedaka + 1
        End If
    Next RowRange
    ' Debug.Print brojRedaka
End Sub

不太清楚你需要完成什么。。。每张纸上的行数是否相同?是否要比较第一张图纸的第1行和第二张图纸的第1行,依此类推?并计算不相同的行数?(1)在第一次迭代后退出循环。(2)范围
inicijaliDt
是否为单列范围?(3) 你应该考虑一下你给变量起的名字(例如,
对单元格来说不是一个好名字)。谢谢你,我没有看到。一些温和的评论:1-你应该总是在
Dim
语句中声明每个变量的类型,否则,除每行最后一个变量外,所有变量的类型都将是
Variant
。2-每当你想使用
Integer
Byte
时,你应该使用
Long
。3-在
If
条件中,如果变量类型为
布尔值
,则不需要
=True
部分,谢谢您的建议。他们很有帮助。只有一个问题,为什么我要对可能不大于10的数字使用长变量,作为db_第一行?看看为什么使用整数而不是长?@vbasic208提供的链接值得一读,谢谢。