Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
用vba进行逻辑运算_Vba_Excel_Macros - Fatal编程技术网

用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 =

嗨,我正在尝试做逻辑运算,或者,不是,用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 = 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