2017-03-15 192 views
1

我試圖根據動態範圍將負值更改爲正值。通過動態我的意思是行號可能會改變。VBA將負範圍更改爲正

例如

rowStart = 10 
rowEnd = 20 

從這些我需要在該範圍內的值改變爲正。我想下面的,但我得到一個錯誤:

Range("K" & rowStart & ":K" & rowEnd).Value = _ 
    Abs(Range("K" & rowStart & ":K" & rowEnd).Value) 

我得到的錯誤是:運行時錯誤「13」:類型不匹配

如何使這項工作任何想法?

+0

有什麼錯誤? – SteveES

+0

你能找到並用「」替換任何連字符嗎? – Jeeped

回答

4

您必須環比項目

Sub ksdjfh() 
    Dim r As Range 

    rowStart = 10 
    rowEnd = 20 

    For Each r In Range("K" & rowStart & ":K" & rowEnd) 
     r.Value = Abs(r.Value) 
    Next r 
End Sub 
3

試試這個:

rowStart = 10 
rowEnd = 20 
For Each myCell In Range("K" & rowStart & ":K" & rowEnd) 
    myCell.Value = Abs(myCell.Value) 
Next 
6

你不能做到這一點在整個的方式。

要麼循環:

For i = rowStart to rowEnd 
    ActiveSheet.Range("K" & i).Value = Abs(ActiveSheet.Range("K" & i).Value) 
Next i 

,也可以使用設置評估:

ActiveSheet.Range("K" & rowStart & ":K" & rowEnd).Value = Evaluate("INDEX(ABS(" & Range("K" & rowStart & ":K" & rowEnd).Address & "),)") 
+0

尼斯'評估'。 – brettdj

3

請問您的數字格式允許僅用於消除負號(即h yphens)?

Dim rowStart As Long, rowEnd As Long 
rowStart = 10 
rowEnd = 20 
With ActiveSheet 
    .Range("K" & rowStart & ":K" & rowEnd).Replace What:="-", Replacement:="", LookAt:=xlPart 
End With 
1

在陣列和環比物品的地方(可能不是更新的範圍內,如果這是一個大範圍的更快):

Sub Test() 

    Dim rowStart As Long, rowEnd As Long 
    Dim rRange As Range 
    Dim vRange() As Variant 
    Dim vItem As Variant 
    Dim R As Long 

    rowStart = 10 
    rowEnd = 20 

    With Sheet1 
     'Define the range. 
     Set rRange = .Range(.Cells(rowStart, 1), .Cells(rowEnd, 1)) 
    End With 
    vRange = rRange 

    'Loop through the values - consider R to mean Row. 
    For R = 1 To UBound(vRange, 1) 
     vRange(R, 1) = Abs(vRange(R, 1)) 
    Next R 

    rRange.Value = vRange 

End Sub