将不同的电池堆叠在一列中

时间:2018-09-07 18:30:30

标签: excel vba excel-vba

我刚刚开始学习VBA,但我真的无法弄清楚。 我有一列同时包含正整数和负整数,我想做的是将正值取到新的列中,并对负值做同样的事情。 我尝试过执行if语句,但是我只知道如何水平移动它们的位置,因此,如果我在行1、5、7、22和24中具有正值,它们将出现在下一行的这些行中,而不是在第1,2,3,4和5行中 我是这样的:

For i = 0 To NoofOb 
    If Range("D3").Offset(i + 1) > 0 Then
        Range("G3").Offset(i) = Range("D3").Offset(i + 1)

    ElseIf Range("D3").Offset(i + 1) < 0 Then
        Range("J3").Offset(i) = Range("D3").Offset(i + 1)
    End If
Next i

有人可以给我提示吗?我已经看了几个小时了,找不到答案。预先感谢!

2 个答案:

答案 0 :(得分:0)

尝试一下:

j = 1
k = 1

For i = 3 To NoofOb 
    If Range("D" & i).Value > 0 Then
        Range("G" & j).Value = Range("D" & i).Value
        j = j + 1
    ElseIf Range("D" & i).Value < 0 Then
        Range("J" & k).Value = Range("D" & i).Value
        k = k + 1
    End If
Next i

注意:我没有测试此代码,您可能需要调整每一列的起点(ijk)以满足您的需求

答案 1 :(得分:0)

另一种选择,假设在启动宏之前G和J列为空

For i = 3 To NoofOb 
    With Range("D" & i) ‘ reference column D current i row 
        Select Case .Value2 ‘check referenced range value and sct accordingly 
            Case Is > 0 ‘ if it’s positive
                Range("G" & Worksheetfunction.Count(Range("G:G")) + 1.Value2 = .Value2 ‘ fill column G next empty row 
            Case Is < 0 ‘ if it’s negative 
                Range("J" & Worksheetfunction.Count(Range("J:J")) + 1.Value2 = .Value2 ‘ fill column J next empty row 
        End Select
    End With
Next