用vba进行逻辑运算
嗨,我正在尝试做逻辑运算,或者,不是,用vba,但我的代码有问题,它没有增加我知道的值,这可能(希望)是一个简单的修复错误,任何帮助都将不胜感激用vba进行逻辑运算,vba,excel,macros,Vba,Excel,Macros,嗨,我正在尝试做逻辑运算,或者,不是,用vba,但我的代码有问题,它没有增加我知道的值,这可能(希望)是一个简单的修复错误,任何帮助都将不胜感激 sub logicop () Dim myRange As range Dim rowi As range Dim cell As range Set myRange = Range("A8:F20") 'go into each row of column For Each rowi In myeRange.Rows andfunc =
sub logicop ()
Dim myRange As range
Dim rowi As range
Dim cell As range
Set myRange = Range("A8:F20") 'go into each row of column
For Each rowi In myeRange.Rows
andfunc = 1 'AND operaton
notfunc = 0 'NOT function
result1 = 0
result2 = 0
result3 = 0
For Each cell In rowi.Cells 'go into each cell of the rows in rowi
If cell.Value = notfunc Then
resuslt1 = result1 + 1
End If
If cell.Value = andfunc Then
resuslt2 = result2 + 1
End If
If cell.Value <> andfunc And cell.Value <> notfun Then
result3 = result3 + 1
End If
Next cell
Next
result1 = Cells(3,3 )
result2 = Cells(3, 4)
result3 = Cells(3,5)
End Sub
子逻辑运算()
将myRange变暗为range
Dim rowi As射程
暗淡单元格作为范围
将myRange=Range(“A8:F20”)设置为列的每一行
对于MyRange.Rows中的每个行
andfunc=1'和运算
notfunc=0'不是函数
结果1=0
结果2=0
结果3=0
对于rowi中的每个单元格。单元格'进入rowi中每行的每个单元格
如果cell.Value=notfunc,则
result1=result1+1
如果结束
如果cell.Value=andfunc,则
result2=result2+1
如果结束
如果cell.Value和func以及cell.Value不有趣,那么
结果3=结果3+1
如果结束
下一个细胞
下一个
结果1=细胞(3,3)
结果2=细胞(3,4)
结果3=细胞(3,5)
端接头
正如评论中指出的,有许多拼写错误会妨碍您的代码正常工作。您可以通过使用选项Explicit
来避免这种情况
这是您的代码的清理版本。我试着让它接近您的原始版本,除了在Select Case
Option Explicit
Sub logicop()
Dim wks As Worksheet
Dim myRange As Range
Dim rowi As Range
Dim cell As Range
Dim andfunc, notfunc, result1, result2, result3
Set wks = Sheets("Sheet1")
Set myRange = wks.Range("A8:F20") 'go into each row of column
andfunc = 1 'AND operaton
notfunc = 0 'NOT function
result1 = 0
result2 = 0
result3 = 0
For Each rowi In myRange.Rows
For Each cell In rowi.Cells 'go into each cell of the rows in rowi
Select Case cell.Value
Case notfunc
result1 = result1 + 1
Case andfunc
result2 = result2 + 1
Case Else
result3 = result3 + 1
End Select
Next cell
Next rowi
'Output results to specific cells
wks.Cells(3, 3).Value = result1
wks.Cells(3, 4).Value = result2
wks.Cells(3, 5).Value = result3
End Sub
请注意,空单元格将按其写入方式计为0。我假设你的范围内每个单元格都有数据,这样就不会有问题了
示例结果:
编辑 根据注释,我已经更新了代码,以计算哪些行具有全部0、1或混合
Option Explicit
Sub logicop()
Dim wks As Worksheet
Dim myRange As Range
Dim rowi As Range
Dim andfunc, notfunc, result1, result2, result3, rowSum
Set wks = Sheets("Sheet1")
Set myRange = wks.Range("A8:F20") 'go into each row of column
andfunc = 1 'AND operaton
notfunc = 0 'NOT function
result1 = 0
result2 = 0
result3 = 0
For Each rowi In myRange.Rows
rowSum = Application.WorksheetFunction.Sum(rowi)
Select Case rowSum / rowi.Cells.Count
Case notfunc
result1 = result1 + 1
Case andfunc
result2 = result2 + 1
Case Else
result3 = result3 + 1
End Select
Next rowi
'Output results to specific cells
wks.Cells(3, 3).Value = result1
wks.Cells(3, 4).Value = result2
wks.Cells(3, 5).Value = result3
End Sub
结果
正如评论中指出的,有许多拼写错误会妨碍代码的正常运行。您可以通过使用
选项Explicit
来避免这种情况
这是您的代码的清理版本。我试着让它接近您的原始版本,除了在Select Case
Option Explicit
Sub logicop()
Dim wks As Worksheet
Dim myRange As Range
Dim rowi As Range
Dim cell As Range
Dim andfunc, notfunc, result1, result2, result3
Set wks = Sheets("Sheet1")
Set myRange = wks.Range("A8:F20") 'go into each row of column
andfunc = 1 'AND operaton
notfunc = 0 'NOT function
result1 = 0
result2 = 0
result3 = 0
For Each rowi In myRange.Rows
For Each cell In rowi.Cells 'go into each cell of the rows in rowi
Select Case cell.Value
Case notfunc
result1 = result1 + 1
Case andfunc
result2 = result2 + 1
Case Else
result3 = result3 + 1
End Select
Next cell
Next rowi
'Output results to specific cells
wks.Cells(3, 3).Value = result1
wks.Cells(3, 4).Value = result2
wks.Cells(3, 5).Value = result3
End Sub
请注意,空单元格将按其写入方式计为0。我假设你的范围内每个单元格都有数据,这样就不会有问题了
示例结果:
编辑 根据注释,我已经更新了代码,以计算哪些行具有全部0、1或混合
Option Explicit
Sub logicop()
Dim wks As Worksheet
Dim myRange As Range
Dim rowi As Range
Dim andfunc, notfunc, result1, result2, result3, rowSum
Set wks = Sheets("Sheet1")
Set myRange = wks.Range("A8:F20") 'go into each row of column
andfunc = 1 'AND operaton
notfunc = 0 'NOT function
result1 = 0
result2 = 0
result3 = 0
For Each rowi In myRange.Rows
rowSum = Application.WorksheetFunction.Sum(rowi)
Select Case rowSum / rowi.Cells.Count
Case notfunc
result1 = result1 + 1
Case andfunc
result2 = result2 + 1
Case Else
result3 = result3 + 1
End Select
Next rowi
'Output results to specific cells
wks.Cells(3, 3).Value = result1
wks.Cells(3, 4).Value = result2
wks.Cells(3, 5).Value = result3
End Sub
结果
notfun
应该是notfunc
。(实际上,这可能没有帮助,因为未定义的变量notfun
的值可能为0,该值与notfunc
的值相同。)更可能的是,错误可能是由使用myRange.Rows
而不是myRange.Rows
引起的。我强烈建议您在模块的开头包含一个显式选项。当您要将result1
和result2
和result3
设置为三个特定单元格时,以及在将result1、result2和result3设置为三个特定单元格之前(正如@Gary的学生所指出的),为什么还要费心处理循环呢,它计算第20行中1、0和其他行的数量(并忽略所有其他行)。您还拼错了resuslt1
和resuslt2
。上面的显式注释选项为+1。notfun
应为notfunc
。(实际上,这可能没有帮助,因为未定义的变量notfun
的值可能为0,该值与notfunc
的值相同。)更可能的是,错误可能是由使用myRange.Rows
而不是myRange.Rows
引起的。我强烈建议您在模块的开头包含一个显式选项。当您要将result1
和result2
和result3
设置为三个特定单元格时,以及在将result1、result2和result3设置为三个特定单元格之前(正如@Gary的学生所指出的),为什么还要费心处理循环呢,它计算第20行中1、0和其他行的数量(并忽略所有其他行)。您还拼错了resuslt1
和resuslt2
。感谢你的帮助,这正是我想要做的,并为拼写错误道歉我没有在我的笔记本电脑上做这件事。我设置代码的方式可能有点不对劲,case stations当然是计算单元格的值,但如果第一行中所有单元格中的所有值都是0,则我想进行逻辑运算,并将其作为一进行计数并不断递增,例如set myRange=Range(“A1:B3”)
第一行中的所有值都是0的计数为1,但代码现在的计数为3,因此可能是我设置代码的方式,但有什么建议吗?我想用result1除以所选范围内的列数,但我不太确定如何做,我尝试了wks.Cells(3,3).Value=result1/cell
但我当然会得到一个error@dfgool我根据你的评论编辑了我的文章,以包含另一个代码集。我想这就是你想要的。试一试,看看我是否理解正确。干杯谢谢你的帮助这正是我想要做的,并为拼写错误道歉我不在我的笔记本电脑前做这件事。我设置代码的方式可能有点不对劲,case stations当然是计算单元格的值,但如果第一行中所有单元格中的所有值都是0,则我想进行逻辑运算,并将其作为一进行计数并不断递增,例如set myRange=Range(“A1:B3”)
第一行中的所有值都是0的计数为1,但代码现在的计数为3,因此可能是我设置代码的方式,但有什么建议吗?我想用result1除以所选范围内的列数,但我不太确定如何做,我尝试了wks.Cells(3,3).Value=result1/cell
但我当然会得到一个error@dfgool我编辑了我的帖子,加入了另一个代码se