嵌套的IF语句VBA

时间:2016-10-24 13:39:43

标签: vba excel-vba if-statement for-loop excel

我有以下代码,可以通过简单的循环代码将数据从一个工作表导入另一个工作表。

            Dim y As Integer
            y = 15
            For X = 15 To LR Step 1
            If Len(WS.Range("B" & X)) >= 7 Then
                WS.Range("B" & X).Copy
                WS1.Range("E" & y).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False

            y = y + 1
            Else
            End If
            Next X

我想添加一个IF语句,如果LEN大于7,则将所有上述值相加,直到最后一次值大于7 len并对这些值进行分组,以便将它们折叠成小计。

我想这将是一个嵌入我当前代码的IF语句,但不确定我将如何引用这些点。

添加图片以帮助解释我目前拥有的内容以及我希望在您的帮助下实现的目标。enter image description here

2 个答案:

答案 0 :(得分:0)

提案

Dim y As Integer
y = 15
Total = 0
For x = 15 To LR Step 1
    If Len(ws.Range("B" & x)) > 7 Then
        ws1.Range("E" & y) = Total
        Total = 0
        y = y + 1
    ElseIf Len(ws.Range("B" & x)) = 7 Then
        ws.Range("B" & x).Copy ws1.Range("E" & y)
        Total = Total + ws.Range("B" & x)
        y = y + 1
    End If
Next x

答案 1 :(得分:0)

尝试这种方法:首先声明Integer类型变量

Dim iSR As Integer: iSR = 15

请注意,我已为iSR分配了值15。由于我们将使用此变量来保存Starting Row数字,请确保为其分配数字开头的行号。现在,在If Len(WS.Range("B" & X)) >= 7 Then条件结束时和Next X之前,添加以下代码(以使其仍在FOR循环中)

If Len(WS.Range("B" & x).Value) > 7 Then
    oWS.Range("C" & x).Formula = "=Sum(C" & iSR & ":C" & oWS.Range("C" & x).Offset(-1).Row & ")"
    iSR = oWS.Range("C" & x).Offset(1).Row
End If

快速解释代码:IF条件检查文本的长度是否大于7.如果是,则在" C"中分配SUM公式。文本所在的同一行的列。 Formula使用iSR作为您的起始行,并使用Offset获取当前行之前的行的行号。下一行只是获取当前行之后的行的行号,以便我们知道下一个iSR数字是什么