2017-10-19 58 views
-1

此处的成员帮助我构建此代码。将值从 - 更改为+并将它们复制到新工作表中

我想,而不是在一个表中的所有负值转变为积极它取整排它应该是这样的:

enter image description here

和移动该行在与所有新的工作表数字转换为正数。

Sub ntp() 
    Dim ws As Worksheet 
    Dim cel As Range 
    With ActiveWorkbook.Worksheets("originalNeg") 
     For Each cel In .Range("I2:I" & .Range("I" & Rows.Count).End(xlUp).row) 
      If cel.value < 0 Then cel.value = Abs(cel.value) 
     Next cel 
    End With 
End Sub 
+0

@jsotola代码在我的问题先生。不知道你在说什么。对不起 – OneaboveAll

回答

2

最快的方法是将数据加载到数组中,处理它,然后将其写入新的工作表。

Sub ntp2() 
    Dim values As Variant 
    Dim x As Long 
    With ActiveWorkbook.Worksheets("originalNeg") 
     values = .Range("A1" , .Range("I" & .Rows.Count).End(xlUp)).value 
    End With 

    For x = 2 To UBound(values) 
     If values(x, 9) < 0 Then values(x, 9) = Abs(values(x, 9)) 
    Next 

    With ActiveWorkbook.Worksheets("NewSheet") 
     .Range("A1").Resize(UBound(values), UBound(values, 2)).value = values 
    End With 
End Sub 
+0

如果已知'x'值为负值,为什么不直接分配'-x'而不是'abs(x)'? OTOH,无论标志如何,都可以分配绝对值,不需要先测试。这两种方法似乎都浪费了性能。 – user1016274

+0

托马斯上面的代码不起作用。是给我一个错误,当我点击调试是要求我解决这个“values = .Range(”A1“&.Range(”I“&.Rows.Count).End(xlUp))。” – OneaboveAll

+0

Thomas this工作正常,但问题是,当我尝试将该宏分配给按钮时,它给了我一个错误消息,指出“引用必须是宏表”。我有三个按钮,我在原始数据中分配了三个不同的宏。在我点击第一个宏后,宏能正常工作,它按照我要求的做,第二个宏抽取所有具有负值的行并将其粘贴到新工作表(它自己创建一个新工作表并将所有数据在那里) – OneaboveAll

相关问题