VBA-嵌套的For循环不起作用

时间:2018-06-25 11:14:12

标签: excel vba loops for-loop

我正在整理一个快速脚本,将表中的某些数据编译为更“可上传”的格式。我有一个三元组For循环,可以循环浏览6个工作表,查看A2:A100范围内的“集群”名称,并在下面定义为H1,J1,L1等的范围内选择每个“集群”中的分支编号。

代码可以编译,但似乎没有跳过空白单元格。如果找到一个空白的分支编号,我希望脚本继续前进到下一个群集,并且如果找到了一个空白的群集继续前进到下一个工作表,直到完成所有6个查找。

我想要输出的数据是按列:群集名称|回扣分支编号,当发现分支编号为空白时,我的脚本当前将返回所有三个字段!我希望这是有道理的。我的代码在下面-请您看看,让我知道怎么了吗?

Sub Clusterise()

Dim WSCount, Sheet As Integer
Dim Counter, CCounter As Integer

Dim Clusters, C As Range
Dim Branches, B As Range

Counter = 0

WSCount = ActiveWorkbook.Worksheets.Count

For Sheet = 2 To WSCount

    Set Clusters = Worksheets(Sheet).Range("A2:A100")
    Set Branches = Worksheets(Sheet).Range("H1, J1, L1, ...etc. up to BN1") 'Too long to display it all

    CCounter = 1

    For Each C In Clusters

        If Not IsEmpty(C) Then

        For Each B In Branches

            If Not IsEmpty(B.Offset(CCounter, 0)) Then

            Sheets("Clusterisor").Range("A1").Offset(Counter, 0) = C.Value
            Sheets("Clusterisor").Range("B1").Offset(Counter, 0) = C.Offset(0, 5).Value
            Sheets("Clusterisor").Range("C1").Offset(Counter, 0) = B.Offset(CCounter, 0).Value

            Counter = Counter + 1

            End If

            Next B

        CCounter = CCounter + 1

        End If

    Next C

Next Sheet

End Sub

1 个答案:

答案 0 :(得分:2)

TLDR:

ListView更改为If Not IsEmpty(C) Then


IsEmpty() MSDN

  

返回一个布尔值,该值指示变量是否已初始化。语法-IsEmpty(expression)必需的expression参数是一个包含字母数字或字符串表达式的Variant。但是,由于IsEmpty用于确定是否初始化了各个变量,因此expression参数通常是单个变量名。备注:如果变量未初始化或显式设置为Empty,则IsEmpty返回True;否则,返回0。否则,它返回False。如果expression包含多个变量,则始终返回False。 IsEmpty仅返回有关变体的有意义的信息。

What is the different between IsNull, IsEmpty, =Empty, and an empty string ie "" and why might I use variants


IsEmpty()仅应用于检查变量是否已初始化。这是什么意思?在VBA中,一旦声明不带单词If C <> "" Then的变量,就不会初始化该变量。检查一下:

New