2017-03-15 193 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