Excel 如何对不';不包含特定的值
如果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
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提供的链接值得一读,谢谢。