Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1790|回复: 8

[已解决]IF语句 中的AND 最多可以连用几个

[复制链接]
发表于 2022-1-24 08:58 | 显示全部楼层 |阅读模式
Sub 计算新鸟按月()
    Dim x As Long, i As Long, h As Long, m, arr(1 To 13, 1 To 1)
    With Sheet2
        i = Sheet2.Range("Q65536").End(xlUp).Row
        For x = 4 To i
           If .Cells(x, "ac") <> 0 And .Cells(x, "K") = 0 And .Cells(x, "N") = 0 And .Cells(x, "Q") = 0 And .Cells(x, "T") = 0 And .Cells(x, "W") = 0 And .Cells(x, "Z") = 0 Then
            m = Month(.Cells(x, "Y")) '原 j P17=S18 计算月份
                arr(m, 1) = arr(m, 1) + 1 '月份统计个数
              arr(13, 1) = arr(13, 1) + 1 '总数
            End If
        Next x
        End With
        Sheet6.Range("L5").Resize(13, 1) = arr
   ' Sheet6.Cells(27, "j") = h
   ' Sheet6.Range("J30") = h
    MsgBox "执行完毕!"
End Sub

        这段程序是,计算“分类统计”表中K、N、Q、T、W、Z、AC列里出现的新鸟,AC列不为0,K、N、Q、T、W、Z列为0,则判为新鸟,去年统计正常,2021年新增加AC列,计算不出按月份的数据,不知是为什么,是不是列数超过Z以后就不能用了,请高手老师给予解惑。谢谢~!

最佳答案
2022-1-24 09:55
本帖最后由 砂海 于 2022-1-24 10:01 编辑

With sheets("表名称")  ' 可读性会好很多


=======================================

连续 用 And 不容易 判断

以下 方法直观些 , 供参考:

......
    Dim 列信息, temp, 总判断 As String, 判断 As String
    列信息 = Array("ac", "k", "n", "q", "t", "w", "z")

.....
            For Each temp In 列信息
                判断 = IIf(.Cells(x, temp), "是", "非")
                总判断 = 总判断 & 判断
                Debug.Print 总判断          '可以注释掉
            Next temp

            If 总判断 = "是非非非非非非" Then

.......


石家庄的鸟 - 专用 -改动.rar

206.55 KB, 下载次数: 3

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2022-1-24 09:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 砂海 于 2022-1-24 10:01 编辑

With sheets("表名称")  ' 可读性会好很多


=======================================

连续 用 And 不容易 判断

以下 方法直观些 , 供参考:

......
    Dim 列信息, temp, 总判断 As String, 判断 As String
    列信息 = Array("ac", "k", "n", "q", "t", "w", "z")

.....
            For Each temp In 列信息
                判断 = IIf(.Cells(x, temp), "是", "非")
                总判断 = 总判断 & 判断
                Debug.Print 总判断          '可以注释掉
            Next temp

            If 总判断 = "是非非非非非非" Then

.......


回复

使用道具 举报

 楼主| 发表于 2022-1-24 20:37 | 显示全部楼层
砂海 发表于 2022-1-24 09:55
With sheets("表名称")  ' 可读性会好很多

老师 好,我试了一下,还是不行,我的水平太低,照片葫芦画瓢,不知道用的对不对我想看看,到底是哪出了问题,2020年Z列就能计算,2021年加了三列,就不行了,不知是为什么?
希望老师给予解答。
回复

使用道具 举报

发表于 2022-1-24 21:51 | 显示全部楼层
凤鸣岐山 发表于 2022-1-24 20:37
老师 好,我试了一下,还是不行,我的水平太低,照片葫芦画瓢,不知道用的对不对我想看看,到底是哪出了 ...

上 附件
回复

使用道具 举报

 楼主| 发表于 2022-1-25 06:48 | 显示全部楼层

谢谢  老师!

石家庄的鸟 - 专用 -改动.rar

206.55 KB, 下载次数: 1

回复

使用道具 举报

发表于 2022-1-25 15:15 | 显示全部楼层
石家庄的鸟 - 专用 -改动_Re.rar (205.94 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2022-1-25 18:56 | 显示全部楼层
本帖最后由 凤鸣岐山 于 2022-1-25 19:05 编辑
砂海 发表于 2022-1-25 15:15
===================
好多别扭的地方 .
一般 循环 变量名 i , j

老师 辛苦了!谢谢!我明白问题出在哪了,统计AC列的新1,汇总应该按AB列的月份,我没有将去年的Y列改为AB ,所以计算出来 的数据,什么都不是。
去年  m = Month(.Cells(x, "Y"))    今年  m = Month(.Cells(x, "AB"))我还是看不明白老师修改的程序,计算结果不对,正确的计算结果应该是
L6=2  L7=5  L8=1  L9=2  L10=2  L14=1  L15 =1  L17=13

老师修改后的计算结果是
L6=2  L7=6  L8=2  L9=2  L10=2  L14=1  L15 =1  L16=2  L17=18


另外 ,老师在二楼的复帖,用数组应该更简单,只不过我水平不行,只能大概明白,具体还不会写。老师若是不忙的情况下,请给予具体指导!如果没时间就不要搞了。

谢谢  老师!

回复

使用道具 举报

发表于 2022-1-25 20:34 | 显示全部楼层
本帖最后由 砂海 于 2022-1-25 20:39 编辑
凤鸣岐山 发表于 2022-1-25 18:56
老师 辛苦了!谢谢!我明白问题出在哪了,统计AC列的新1,汇总应该按AB列的月份,我没有将去年的Y列改为A ...

旧有_判断 = 0: 新增_判断 = 0    '刚才漏写 新增 了


m = Month(arr0(x, 列标序号_新增 - 1)) '改用数组了


无标题.png

石家庄的鸟 - 专用 -改动_Re2.rar (208.56 KB, 下载次数: 0)
回复

使用道具 举报

 楼主| 发表于 2022-1-25 21:51 | 显示全部楼层
砂海 发表于 2022-1-25 20:34
旧有_判断 = 0: 新增_判断 = 0    '刚才漏写 新增 了

老师   好!   完全正确,跑通了!再次感谢老师给予指导!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 10:48 , Processed in 0.303016 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表