热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如果在VBA中有或多个语句

如何解决《如果在VBA中有或多个语句》经验,为你挑选了1个好方法。

我想将带有14列的Excel文件重新分发到正确的列(具有12.000行).

为此,我必须使用一些If和Or语句将数字放在矩阵中.但显然我没有从中得到正确的东西.

它使我的所有单元格为零,而具有值的单元格应保持该值.

我哪里出错?:

    For i = 1 To LastRow
    If Cells(i, 8).Value2 = "" Then Cells(i, 8).Value2 = 0

    If Cells(i, 1).Value2 <437 And Cells(i, 5).Value2 = "aa" _
    Or Cells(i, 5).Value2 = "bb" _
    Or Cells(i, 5).Value2 = "cc" _
    Or Cells(i, 5).Value2 = "dd" _
    Or Cells(i, 5).Value2 = "ee" _
    Or Cells(i, 5).Value2 = "ff" _
    Or Cells(i, 5).Value2 = "gg" _
    And Cells(i, 7).Value2 = "" _
    Then Cells(i, 7).Value2 = 0

    Next i

因此,如果单元格包含aa或bb或cc或dd或ee或ff或gg且为empty,则单元格应为0,否则应保持相同的值.之后它应该进入矩阵

Then Matrixgetallen(i, 2) = CDbl(Cells(i, 7).Value2)

但我没有设法在同一个if语句中得到它.

如果有这样的If语句中的6个,那么可能如果那么Else不起作用.



1> brettdj..:

很难优化而不会看到您的完整代码但是这部分:

    由于VBA 没有短路,因此可以AND分成两个IF

    而不是长序列的ORs,对数组进行单次测试(数值结果表示找到了确切的字符串)

i = 1
Dim strIN
strIN = Array("aaf", "bb", "cc", "dd", "ee", "ff", "gg")

If Cells(i, 1).Value2 <437 Then
    If Len(Cells(i, 5)) = 0 Then
        Cells(i, 7).Value2 = 0
    Else
        If IsNumeric(Application.Match(Cells(i, 5), strIN, 0)) Then Cells(i, 7).Value2 = 0
    End If
End If


推荐阅读
author-avatar
手机用户2502930273
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有