2017-10-19 63 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

相關問題